Oracle Veritabanı Parametre (SPFILE & PFILE) Dosyaları

Yayınlandı: Mayıs 6, 2013 / Oracle, Veritabanı
Etiketler:, , , , , , , , ,

Merhaba,

Bu yazımda Oracle veritabanında önemli bir yer tutan parametre dosyalarını anlatacağım. Bu parametre dosyaları Oracle instance sı açılırken ortaya çıkar ve sonradan bu parametre dosyalarının içeriğini dinamik yada statik olarak değiştirebiliriz.Oracle Veritabanımızda SPFILE ve PFILE olmak üzere birbirinin aynısı 2 parametre dosyası vardır bu 2 parametre dosyasının görevleri aynı olsada yapısal ve kullanımsal olarak bazı farklılıkları vardır bu yüzden her ikisini aşağıda ayrı ayrı irdeleyeceğim.

spfile

SPFILE (Server Parameter File): Oracle instance sı açılırken instance ın konfigüre edilebilmesi için gereken parametrelerin saklandığı binary formatlı .ora uzantılı fiziksel bir dosyadır. Linux tabanlı Sunucular üzerinde genellikle $ORACLE_HOME/dbs dizini altında bulunur. Spfile dosyası işletim sistemi üzerinde spfile<ORACLE_SID>.ora formatıyla bulunur. Ayrıca bu dosyanın yerini veritabanından aşağıdaki gibi öğrenebilirsiniz.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon May 6 10:41:35 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /oracle/product/11.2.0/db/dbs/spfileTESTDB.ora
SQL>

Bu dosya veritabanı açılırken nomount adımında kullanılır, burda aşağıda göstereceğim parametreler okunarak instance yapılanır. Spfile yada pfile dosyası olmadan instance başlatılamaz çünkü veritabanının beyni olan controlfile ın adresi bu parametre dosyasında bulunur. Bu dosya binary formatta olduğu için direk açamayız ancak aşağıdaki gibi strings ifadesini kullanarak kullanıcının anlayacağı hale dönüştürebiliriz. Spfile ın önemini anlatmak için bu parametre dosyasındaki parametrelerin neler olduğunu aşağıdaki gibi listeleyeceğim.

bash-4.1$ strings /oracle/product/11.2.0/db/dbs/spfileTESTDB.ora
TESTDB.__db_cache_size=184549376
TESTDB.__java_pool_size=4194304
TESTDB.__large_pool_size=4194304
TESTDB.__oracle_base='/oracle'#ORACLE_BASE set from environment
TESTDB.__pga_aggregate_target=2764046336
TESTDB.__sga_target=536870912
TESTDB.__shared_io_pool_size=0
TESTDB.__shared_pool_size=331350016
TESTDB.__streams_pool_size=0
*.audit_file_dest='/oracle/admin/TESTDB/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/oracle/data/TESTDB/control01.ctl','/oracle/data/TESTDB/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_name_convert='/oracle/data/TESTDB/','/oracle/data/TESTDG/'
*.db_name='TESTDB'
*.db_recovery_file_dest_size=2070572032
*.db_recovery_file_dest='/oracle/recovery_area'
*.db_unique_name='TESTDB'
*.db_writer_processes=1
*.diagnostic_dest='/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=TESTDBXDB)'
*.fal_server='TESTDG'
*.log_archive_config='DG_CONFIG=(TESTDB,TESTDG,)'
*.log_archive_dest_1='LOCATION=/oracle/ARCH'
*.log_arc
hive_dest_2='SERVICE=TESTDG LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=TESTDG'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_archive_format='%t_%s_%r.arc'
*.log_archive_max_processes=30
*.log_file_name_convert='/oracle/data/TESTDB/','/oracle/data/TESTDG/'
*.open_cursors=300
*.pga_aggregate_target=2762997760
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=536870912
*.undo_tablespace='UNDOTBS1'
bash-4.1$

Yukarda ki parametrelerden çok önemli olanlarından bazılarını kırmızı kalın harflerle belirttim, bu parametreleri Oracle okumadan instance ayağa kalkamaz. Veritabanı ilk başladığı zaman mutlaka olması gereken ve çok önemli olan parametreleri veritabanından aşağıdaki gibi sorgulayabiliriz.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon May 6 10:55:50 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select name from v$parameter where isbasic='TRUE';

NAME
--------------------------------------------------------------------------------
processes
sessions
nls_language
nls_territory
sga_target
control_files
db_block_size
compatible
log_archive_dest_1
log_archive_dest_2
log_archive_dest_state_1

NAME
--------------------------------------------------------------------------------
log_archive_dest_state_2
cluster_database
db_create_file_dest
db_create_online_log_dest_1
db_create_online_log_dest_2
db_recovery_file_dest
db_recovery_file_dest_size
undo_tablespace
instance_number
ldap_directory_sysauth
remote_login_passwordfile

NAME
--------------------------------------------------------------------------------
db_domain
shared_servers
remote_listener
db_name
db_unique_name
open_cursors
star_transformation_enabled
pga_aggregate_target

30 rows selected.

SQL>

PFILE ( Parameter File ): Pfile parametre dosyası içerik ve görev yönüyle Spfile ile aynıdır fakat pfile işletim sistemi üzerinde binary olarak değil normal karakter formatında tutulur. PFile dosyası işletim sistemi üzerinde init<ORACLE_SID>.ora adıyla oluşur. PFILE veritabanında olmak zorunda değildir sadece spfile ilede çalışılabilir. İlk veritabanı kurulduğunda pfile dosyası oluşmaz sadece spfile dosyası oluşur.  Pfile dosyası metin içerikli olduğu için bazen bir parametreyi pfile de değiştirmek daha kolay olduğu için spfile dan pfile dosyası oluşturulur. Spfile dosyasından pfile dosyası aşağıdaki gibi oluşturulur.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon May 6 11:03:55 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create pfile from spfile;

File created.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
bash-4.1$ ls -l *initT*
-rw-r--r-- 1 oracle oinstall 1449 May  6 11:04 initTESTDB.ora
bash-4.1$

Yukarda belirttiğim gibi Oracle instance sının açılması için bunlardan birinin olması yeterlidir fakat instance açılırken her iki dosyada mevcut ise Oracle spfile ı kullanıp veritabanını açar.

Spfile dosyası metin içerikli olmadığı için burada parametreleri pfile da olduğu gibi dosyayı açıp direk değiştiremezsiniz, spfile da herhangi bir parametreyi aşağıdaki gibi SQL*Plus üzerinden değiştirebilirsiniz.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon May 6 11:16:52 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter log_archive_max_processes;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes            integer     30
SQL> alter system set log_archive_max_processes=20 scope=BOTH;

System altered.

SQL> show parameter log_archive_max_processes;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_max_processes            integer     20
SQL>

Yukardaki parametre dinamik bir parametre olduğu için direk değiştirebildik bazı parametrelerde yukardaki gibi direk değiştirilemez bu parametreleri spfile da değiştirip veritabanını restart ettirdiğimiz zaman bu parametrenin etkisini görebiriz. Scope parametresine BOTH dediğimiz zaman hemen değişikliği yap diyoruz, dinamik parametreler yukardaki gibi değişiyor statik parametreleri ise bu şekilde değiştirince hata verir o tip parametreleri Scope=spfile diyerek değiştirebiliriz. Bu parametrelerin etkisini sistemi restart edince aşağıdaki gibi görebilirsiniz.

Aşağıda bunun örneğini 6 adımda göstereceğim. Veritabanına ait çalışan process parametresi statik bir parametredir bunu değiştirme işlemi aşağıdaki gibidir.

1.Adım: Veritabanına bağlanıp bu parametrenin ilk değerini öğreniyoruz.
bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon May 6 11:20:51 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter processes

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     20
processes                            integer     150

2.Adım: Bu adımda 150 olan değeri 1000 olarak dinamik bir biçimde değiştirmek istediğimde aşağıdaki hatayı alıyorum.
SQL> alter system set processes=1000 scope=BOTH;
alter system set processes=1000 scope=BOTH
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified

3.Adım: Yukarda dinamik olarak değiştiremediğim parametreyi aşağıdaki gibi statik olarak değiştiriyorum.
SQL> alter system set processes=1000 scope=spfile;

System altered.
4.Adım: Parametrenin değerini tekrar kontrol ettiğimde statik olarak değiştirdiğim için parametrenin değiştirilmiş halini göremiyorum bunu görmem için veritabanını kapatıp açmam gerekiyor.
SQL> show parameter processes;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     20
processes                            integer     150

5.Adım: Veritabanını aşağıdaki gibi tutarlı bir şekilde kapatıp açıyorum.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  534462464 bytes
Fixed Size                  2230072 bytes
Variable Size             339740872 bytes
Database Buffers          184549376 bytes
Redo Buffers                7942144 bytes
Database mounted.
Database opened.
6.Adım: Veritabanı tutarli bir şekilde restart olduktan sonra tekrar parametrenin değerini kontrol ettiğimde parametrenin değiştiğini görüyorum.
SQL> show parameter processes;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     1
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
global_txn_processes                 integer     1
job_queue_processes                  integer     1000
log_archive_max_processes            integer     20
processes                            integer     1000
SQL>

Spfile dosyamız çok önemli olduğu için alınan full backuplarla birlikte spfile ında backup ının sürekli olarak alınması gerekmektedir. Spfile dosyasının da otomatik olarak yedeklenmesi için veritabanının otomatik yedekleme ( autobackup ) modunda olması gerekir. Bunuda aşağıdaki gibi RMAN tool u üzerinde yapabiliriz.

bash-4.1$ rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Mon Oct 7 11:38:40 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: TESTDB (DBID=2602199602)

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

using target database control file instead of recovery catalog
old RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP OFF;
new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
new RMAN configuration parameters are successfully stored

RMAN>

Yukardaki gibi Control file ın otomatik olarak backup ının alınmasını sağladığımız takdirde her backup operasyonu gerçekleştiğinde Spfile ın kopyasıda aşağıda kırmızı kalın harfle gösterdiğim Autobackup ın set edildiği path in bulunduğu yere kopyalanır.

bash-4.1$ rman target /

Recovery Manager: Release 11.2.0.3.0 - Production on Mon Oct 7 11:41:49 2013

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: TESTDB (DBID=2602199602)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name TESTDB are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 3 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/oracle/recovery_area/ctrl_%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1;
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 2 G;
CONFIGURE MAXSETSIZE TO 4 G;
CONFIGURE ENCRYPTION FOR DATABASE ON;
CONFIGURE ENCRYPTION ALGORITHM 'AES128';
CONFIGURE COMPRESSION ALGORITHM 'LOW' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
CONFIGURE ARCHIVELOG DELETION POLICY TO SHIPPED TO ALL STANDBY;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/product/11.2.0/db/dbs/snapcf_TESTDB.f';

RMAN>

Ayrıca spfile içerisinde kritik bir değişiklik yapıyorsanız spfile içerisinden operasyon öncesinde farklı bir path de pfile oluşturup kendinizi garantiye alabilirsiniz.Bu durumda yaptığınız değişiklik sonrasında instance açılmadığı takdirde veritabanını operasyon öncesi almış olduğunuz pfile den açabilirsiniz. Spfile den /oracle dizini altında pfile aşağıdaki gibi oluşturulabilir.

bash-4.1$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Mon May 6 11:46:07 2013

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create pfile='/oracle/initTESTDB.ora' from spfile;

File created.

SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
bash-4.1$ ls -l *initTE*
-rw-r--r-- 1 oracle oinstall 1450 May 6 11:46 initTESTDB.ora
bash-4.1$ pwd
/oracle
bash-4.1$

Böylece bu yazımın sonuna gelmiş bulunmaktayım bir sonraki yazıda görüşmek dileğiyle Esen kalın.

Mehmet Salih Deveci

Oracle Veritabanı Yöneticisi

//

//

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s