programmera.net -> oracledba -> normal     för utskrift      info@programmera.net

Parametrar, PFILE och SPFILE

1. PFILE och SPFILE
2. ALTER SYSTEM SET
3. Skapa en PFILE från en SPFILE

1. PFILE och SPFILE

När instansen startas läses en parameterfil som innehåller inställningar i form av en mängd parametrar och deras värden. Parametrarna kan delas upp i två typer:

  • Explicita parametrar: Dessa parametrar sätts i parameterfilen.
  • Implicita parametrar: Denna grupp innefattar de parametrar som administratören inte har valt att definiera själv i parameterfilen. Dessa parametrar tilldelas ändå ett defaultvärde vid uppstart.
När instansen väl är startad gör instansen ingen skillnad på explicita och implicita parametrar. Det finns två typer av parameterfiler; PFILE och SPFILE. Man kan inte starta Oracle med båda typer samtidigt:
  • PFILE: Hittas på sökvägen /$ORACLE_HOME/dbs/initSID.ora. Detta är en textfil som kan editeras med en vanlig texteditor. Förändringarna slår igenom först då du startar om instansen.
  • SPFILE: Hittas på sökvägen /$ORACLE_HOME/dbs/spfileSID.ora. Denna fil är binär och ska inte editeras med texteditor (även om det faktist går att läsa innehållet), utan måste modifieras indirekt via t.ex. "ALTER SYSTEM SET". På samma sätt som med PFILE överlever än förändring som hamnat i SPFILE en omstart av databasen. Fördelen med att använda SPFILE är att man med ett kommando kan ändra en parameter i instansens minne och i parameterfilen samtidigt.
SPFILE används per default i Oracle 10g.

2. ALTER SYSTEM SET

Med kommandot "ALTER SYSTEM SET" kan man ändra värdet på parametrarna inifrån SQL*PLUS. Parametrarna kan sättas med 3 olika "SCOPE":

  1. MEMORY: Parametern sätts om dynamiskt i instansens minne och får effekt omedelbart. Förändringen försvinenr dock när instansen startas om.
  2. SPFILE: Parametern sätts om i parameterfilen, så ändringen får effekt först när instansen startas om. OBS: Du måste vara inloggad med "AS SYSDBA" för att kunna utföra ändringar med detta SCOPE.
  3. BOTH: Parametern sätts om i instansens minne och i parameterfilen. Detta är default. OBS: Du måste vara inloggad med "AS SYSDBA" för att kunna utföra ändringar med detta SCOPE.
Vissa parametrar kan inte sättas dynamiskt utan måste sättas med SCOPE=SPFILE, och tar då först effekt när instansen startas om. Nedan ges ett exempel på hur parametern "OPEN_CURSORS" sätts om från 50 (som är default) till 20 med SCOPE=BOTH (som är default):
SQL> SHOW PARAMETER open_cursors;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     50

SQL> ALTER SYSTEM set OPEN_CURSORS=20;

System altered.

SQL> SHOW PARAMETER open_cursors;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     20

Vi ser att det dynamiska värdet har ändrats till 20.

3. Skapa en PFILE från en SPFILE

För att vi ska kunna ändra i parameterfilen direkt krävs att vi byter till från SPFILE till PFILE, det gör man genom följande kommando:
SQL> CREATE PFILE FROM SPFILE;

File created.

Nu kan vi se hur den ser ut:
[olle@dev1]$ more initorcl.ora
orcl.__db_cache_size=180355072
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__shared_pool_size=92274688
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.background_dump_dest='/u01/app/oracle/admin/orcl/bdump'
*.compatible='10.2.0.1.0'
*.control_files='/u02/oradata/orcl/control01.ctl','/u03/oradata/orcl/control02.ctl'
*.core_dump_dest='/u01/app/oracle/admin/orcl/cdump'
*.db_block_size=16384
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='/u02/oradata/orcl/flash_recovery_area'
*.db_recovery_file_dest_size=314572800
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.job_queue_processes=10
*.nls_territory='SWEDEN'
*.open_cursors=20
*.pga_aggregate_target=94371840
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=285212672
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/orcl/udump'
Nu vill jag testa om jag kan få en förändring i $ORACLE_HOME/dbs/initorcl.ora att synas i instansen. Jag utför följande:

  1. Jag ändrar $ORACLE_HOME/dbs/initorcl.ora och sätter "OPEN_CURSORS=25".
  2. Jag kastar filen $ORACLE_HOME/dbs/spfileorcl.ora. Om inte denna filen kastas kommer Oracle att läsa från SPFILE istället för från PFILE.
  3. Jag startar om databasen.
Nu ser vi följande:
SQL> SHOW PARAMETER open_cursors;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     25

Ändringen i PFILE slog alltså igenom efter omstart. För att komma tillbaka till SPFILE skriver vi bara:
SQL> CREATE SPFILE FROM PFILE;

File created.

Nu krävs det att vi startar om instansen för att SPFILE ska börja användas igen.
  • OBS: När en PFILE konverteras till en SPFILE försvinner alla kommentarer som ligger på egna rader. Endast kommentarer som ligger på samma rad som sjäva parametern kommer med.