Как изменить spfile

Oracle uses parameter initialization files to store information about initialization parameters used when an Oracle instance starts. Oracle reads the parameter file to obtain information about how the Oracle instance should be sized and configured upon startup. The parameter file can be either a plain text file, commonly referred to as a PFILE, or it can be a binary parameter file, commonly referred to as an SPFILE. The default location that Oracle searches to find the PFILE and SPFILE parameter files is $ORACLE_HOME/dbs on Unix systems and %ORACLE_HOME%/database on Windows systems.

SPFILE: The Server Parameter File

Beginning with Oracle9i, Oracle introduced the concept of the server parameter file. This file, known as SPFILE , differs from the standard INIT.ORA file in a number of ways:

  • It is a binary file, rather than a text-based file.
  • It is stored on the server, rather than on a client machine.
  • It can maintain changes to parameter values over the shutdown and startup of an instance.

This last point is the important part of SPFILE. If your database is running under Oracle9i, any changes you make to configuration parameters via the ALTER SYSTEM statement will be saved as part of the permanent configuration file. That means that if you change any of your database parameter values for tuning purposes, you won’t also have to change one or more INIT.ORA files so that the new values will persist. You also have the option of making dynamic changes to parameters without making them a part of the SPFILE.

How to Modify the Content of an SPFILE File

In order to modify the spfile in oracle database, do one of the following:

1. Use the ALTER SYSTEM command to modify the SPFILE currently in use

1. To determine if an spfile is being used:

SQL> select value from v$parameter where name='spfile'

2. To modify the contents of the spfile:

SQL> alter system set undo_management=auto scope=spfile;
System altered.

This sets undo_management to auto.

SQL> alter system set resource_manager_plan='' scope=spfile; 
System altered.

This sets the resource_manager_plan parameter to null.

NOTE: Parameters starting with an underscore must be enclosed with “” (double quotes) to prevent an ORA-00911: invalid character

2. Use the export method.

1. Export the SPFILE to a PFILE. The resulting PFILE will be an editable ASCII file. Examples:

SQL> create pfile [= 'pfile_name' ] from spfile [= 'spfile_name'];
SQL> create pfile from spfile;

The PFILE is created in directory $ORACLE_HOME/dbs and named init[SID].ora.

SQL> create pfile = '/testcasesADC/137483.1/initV1023U.ora' from spfile;

The PFILE is created as ‘/testcasesADC/137483.1/initV1023U.ora’

SQL> create pfile = '/testcasesADC/137483.1/initV1023U_test.ora' from spfile = '/usupport/64bit/app/oracle/product/10.2.0.3/dbs/spfileV1023U.ora';

The PFILE is created as ‘/testcasesADC/137483.1/initV1023U_test.ora’ and the location of the spfile was explicit.

2. Modify the PFILE parameter value with a text editor and save the file:

undo_management=auto
resource_manager_plan=''

3. Recreate the SPFILE from the modified PFILE:

– If the instance is down:

SQL> create spfile='/usupport/64bit/app/oracle/product/10.2.0.3/dbs/spfileV1023U.ora' from pfile='/testcasesADC/137483.1/initV1023U_test.ora';

– If the instance is up and you try to recreate the spfile the database was started with a naming conflicts occurs. You will recieve error ORA-32002.

SQL> create spfile='/usupport/64bit/app/oracle/product/10.2.0.3/dbs/spfileV1023U.ora' from pfile='/testcasesADC/137483.1/initV1023U_test.ora';

ERROR at line 1:
ORA-32002: cannot create SPFILE already being used by the instance

To overcome this error specify a different file name and then rename the spfile once the instance is shutdown:

SQL> create spfile='/usupport/64bit/app/oracle/product/10.2.0.3/dbs/spfileV1023U_new.ora' from pfile='/testcasesADC/137483.1/initV1023U_test.ora';

ALTER SYSTEM SET SPFILE

Before reading, you have to know that there’s no ALTER SYSTEM SET SPFILE statement in Oracle, because we can never write the location of SPFILE into current SPFILE. It makes no sense. All we can do is to change SPFILE physical location for the database.

In this post, I will talk about how to change SPFILE location in a single-instance database and in a RAC database.

  1. Change SPFILE Location of a Single-Instance Database
  2. Change SPFILE Location of a RAC Database

A. Change SPFILE Location of a Single-Instance Database

Generally, we don’t change SPFILE location of a single-instance database, because it should be found in the default location, $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora any time for starting up the instance without any explicit indication.

SQL> startup

Which means, the database will find an appropriate SPFILE or PFILE in the default location to startup the instance.

Of course, anything is possible if you were asked to do so. One of my client plans to manage all SPFILE in one location, and consulted me on this matter. Although it sounds unreasonable, I introduce some approaches in this post to make it real.

Here are the steps to change SPFILE location:

  1. Backup Original SPFILE
  2. Create SPFILE in New Location
  3. Point to New SPFILE in PFILE

1. Backup Original SPFILE

In case you damage SPFILE during the operation, you should keep a backup of the original SPFILE.

[oracle@test ~]$ cd $ORACLE_HOME/dbs
[oracle@test dbs]$ ll
total 24
-rw-rw----. 1 oracle oinstall 1544 Feb 18 14:20 hc_ora12c1.dat
-rw-r--r--. 1 oracle oinstall 2992 Feb  3  2012 init.ora
-rw-r-----. 1 oracle oinstall   24 Apr 18  2017 lkORA12C
-rw-r-----. 1 oracle oinstall 7680 Apr 18  2017 orapwora12c1
-rw-r-----. 1 oracle oinstall 3584 Feb 18 14:21 spfileora12c1.ora
[oracle@test dbs]$ cp -p ./spfile$ORACLE_SID.ora ./spfile$ORACLE_SID.ora.bak

2. Create SPFILE in New Location

There’re several choices that can create a new SPFILE.

Create SPFILE from PFILE

You can always create a new SPFILE to the new location from the current one, no matter whether the instance is running or not, as long as you specified its location.

SQL> create pfile from spfile;

File created.

SQL> create spfile='/spfiles/ORA12C1/spfile@.ora' from pfile;

File created.

Please note that, the @ sign in the statement stands for $ORACLE_SID. We usually use some symbols or signs as shorthands to represent some variables in Oracle.

Create SPFILE from MEMORY

Alternatively, if your instance is running, you can also create SPFILE directly from memory. The feature is only for 11g or later.

SQL> create spfile='/spfiles/ORA12C1/spfile@.ora' from memory;

File created.
SQL> shutdown immediate;
...

Please note that, if you’re in a cluster database (RAC), don’t create PFILE or SPFILE from memory, because it will give a pfile with only current instance parameters.

Restore SPFILE from Backup

We can also use Recovery Manager (RMAN) to have a copy of current SPFILE.

RMAN> backup spfile;
...
RMAN> restore spfile to '/spfiles/ORA12C1/spfile@.ora';
...

RMAN will pick the latest backup of SPFILE to restore, no matter the backup is from AUTOBACKUP or a manual backup.

Move SPFILE to New Location

Of course, you can also move the physical file to the new location because the original SPFILE is no longer usable for later steps.

[oracle@test dbs]$ mv ./spfile$ORACLE_SID.ora /spfiles/ORA12C1/

It’d better to move it offline.

Since the only file we need is PFILE, please remove the original SPFILE if any.

3. Point to New SPFILE

Can we just specify the location of SPFILE when we startup a database? No, we can’t. There’s no STARTUP SPFILE option. That’s why we’re going to talk about how to point to the new location of SPFILE in this section.

Two tricks to point to the new SPFILE.

Breadcrumbs in PFILE

The first method, we point the new location of SPFILE in PFILE.

[oracle@test dbs]$ vi init$ORACLE_SID.ora
spfile='/spfiles/ORA12C1/spfile@.ora'
[oracle@test dbs]$ sqlplus / as sysdba
...
SQL> startup
...
SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /spfiles/ORA12C1/spfileora12c1
                                                 .ora

Since the default SPFILE is missing, the database will turn to the default PFILE to startup the database. Once PFILE is used, it will redirect the database to the new SPFILE. This approach is based on the order of locating the initialization parameter file by examining file names in a specific order.

By the way, if your SPFILE is corrupted or missing for some reason, there’re still several ways to restore SPFILE.

Use a Symbolic Link

The second way to play a trick is to make a symbolic link for the new SPFILE.

[oracle@test dbs]$ ln -s /spfiles/ORA12C1/spfile$ORACLE_SID.ora spfile$ORACLE_SID.ora
[oracle@test dbs]$ ll spfile$ORACLE_SID.ora
lrwxrwxrwx. 1 oracle oinstall 34 Feb 20 13:53 spfileora12c1.ora -> /spfiles/ORA12C1/spfileora12c1.ora
[oracle@test dbs]$ sqlplus / as sysdba
...
SQL> startup
...
SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/12.1.0
                                                 .2/db_1/dbs/spfileora12c1.ora

As we can see, both SPFILE locations between two methods are different.

By the way, is it possible to see a blank or empty value returned by SHOW PARAMETER SPFILE?

B. Change SPFILE Location of a RAC Database

Usually, we put SPFILE in Automatic Storage Management (ASM), a shared storage for RAC databases to access. More specifically, we put it in one of disk groups based on ASM.

There’re several ways to change SPFILE location of a RAC database.

  1. Symbolic Link
  2. Recovery Manager (RMAN)
  3. Parameter File (PFILE)

1. Use a Symbolic Link

Using Symbolic Link in ASMCMD to change SPFILE location does not move the actual file, we just do a trick to make it look like changed. For more details, you may refer to: How Srvctl Modify Database SPFILE.

2. Use Recovery Manager (RMAN)

First of all, we created a new directory for the new home of SPFILE if necessary.

[grid@primary01 ~]$ asmcmd mkdir +DATA/TESTCDB

Check SPFILE location in configuration.

[oracle@primary01 ~]$ srvctl status database -d testcdb
Instance TESTCDB1 is running on node primary01
Instance TESTCDB2 is running on node primary02
[oracle@primary01 ~]$ srvctl config database -d testcdb
...
Spfile: +DATA/ORCLCDB/spfile

Check SPFILE location in the instance.

SQL> conn / as sysdba
Connected.
SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/ORCLCDB/spfile

It’s +DATA/ORCLCDB/spfile, my goal is to switch SPFILE to +DATA/TESTCDB/spfile.

Backup current SPFILE.

RMAN> backup spfile;
...

Then we restore it to the destination we want.

RMAN> restore spfile to '+DATA/TESTCDB/spfile';
...

Let’s check the actual file in the disk group.

[grid@primary01 ~]$ asmcmd ls -l +DATA/TESTCDB/spfile
Type           Redund  Striped  Time             Sys  Name
PARAMETERFILE  UNPROT  COARSE   DEC 30 13:00:00  N    spfile => +DATA/TESTCDB/PARAMETERFILE/spfile.303.1060523781

Next, we configure the new SPFILE into the database.

[oracle@primary01 ~]$ srvctl modify database -d testcdb -spfile +DATA/TESTCDB/spfile
[oracle@primary01 ~]$ srvctl config database -d testcdb
...
Spfile: +DATA/TESTCDB/spfile

Perform a restart to make it work.

[oracle@primary01 ~]$ srvctl stop database -d testcdb
[oracle@primary01 ~]$ srvctl start database -d testcdb

Check SPFILE location again in the instance.

SQL> conn / as sysdba
Connected.
SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/TESTCDB/spfile

As you can see, using RMAN to have a copy at a different directory is pretty easy.

3. Use Parameter File (PFILE)

Let’s see current SPFILE first.

[oracle@primary01 ~]$ srvctl config database -d orclcdb
...
Spfile: +DATA/ORCLCDB/PARAMETERFILE/spfile.275.1053776653
...
[oracle@primary01 ~]$ srvctl status database -d orclcdb
Instance ORCLCDB1 is running on node primary01
Instance ORCLCDB2 is running on node primary02
[oracle@primary01 ~]$ sqlplus / as sysdba
...
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ WRITE

Create a PFILE for later use.

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/ORCLCDB/PARAMETERFILE/sp
                                                 file.275.1053776653
SQL> create pfile='/home/oracle/pfile' from spfile;

File created.

SQL> exit

Stop the database.

[oracle@primary01 ~]$ srvctl stop database -d orclcdb
[oracle@primary01 ~]$ srvctl status database -d orclcdb
Instance ORCLCDB1 is not running on node primary01
Instance ORCLCDB2 is not running on node primary02

Then disable the database from the cluster.

[oracle@primary01 ~]$ srvctl disable database -d orclcdb

We startup the database to NOMOUNT with the PFILE.

[oracle@primary01 ~]$ sqlplus / as sysdba
...
SQL> startup nomount pfile='/home/oracle/pfile';
ORACLE instance started.
...

Create a new SPFILE for the database from PFILE, then we close the database.

SQL> create spfile='+DATA/ORCLCDB/spfile' from pfile='/home/oracle/pfile';

File created.

SQL> shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.
SQL> exit

Change SPFILE location by modifying the attribute in SRVCTL.

[oracle@primary01 ~]$ srvctl modify database -d orclcdb -spfile '+DATA/ORCLCDB/spfile'

Let’s check the current location of SPFILE.

[oracle@primary01 ~]$ srvctl config database -d orclcdb
...
Spfile: +DATA/ORCLCDB/spfile
...

We get the database back to the cluster.

[oracle@primary01 ~]$ srvctl enable database -d orclcdb

Optionally, you can point the location of SPFILE in PFILE on both nodes.

[oracle@primary01 ~]$ vi $ORACLE_HOME/dbs/init$ORACLE_SID.ora
spfile='+DATA/ORCLCDB/spfile'
[oracle@primary02 ~]$ vi $ORACLE_HOME/dbs/init$ORACLE_SID.ora
spfile='+DATA/ORCLCDB/spfile'

We can startup the database with the new SPFILE now.

[oracle@primary01 ~]$ srvctl start database -d orclcdb
[oracle@primary01 ~]$ srvctl status database -d orclcdb
Instance ORCLCDB1 is running on node primary01
Instance ORCLCDB2 is running on node primary02

Check the SPFILE location.

SQL> show parameter spfile;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/ORCLCDB/spfile

As you can see, the procedure to change the location of a SPFILE in a RAC database is a little complicated than in a single-instance database.

If you found no effects on changing new SPFILE, maybe you did it in the wrong way. Please check how to make SPFILE back to work for more clues.

После запуска экземпляра Oracle, его характеристики определяются набором параметров, указанных в инициализационном файле параметров. Эти параметры инициализации могут задаваться как в PFILE-е, так и в SPFILE-е. SPFILE используется, начиная с версии Oracle 9i. Все предыдущие релизы Oracle используют только PFILE-ы.

Преимущества SPFILE-ов над PFILE-ами:

  • RMAN может сделать резервную копию SPFILE-а (PFILE можно сохранить только вручную).
  • Сокращаются возможные ошибки администратора. SPFILE управляется сервером. Параметры проверяются перед их применением.
  • Исчезают некоторые проблемы конфигурирования (например, вам не надо иметь локальный PFILE для запуска экземпляра Oracle с удаленной машины).
  • Легко найти – хранится в определенной директории.

Какая разница между PFILE-ом и SPFILE-ом:

PFILE – статичный, пользовательский текстовый файл, который редактируется стандартными текстовыми редакторами (например, “блокнот” или “vi”). Обычно этот файл находится на сервере, однако, для запуска Oracle с удаленной машины необходимо иметь локальную копию. АБД (Администраторы Баз Данных) обычно ссылаются на этот файл: INIT.ORA.

SPFILE (Server Parameter File), с другой стороны, постоянно находящийся на сервере бинарный файл, который может быть изменен только с помощью команды “ALTER SYSTEM SET”. Это значит, что больше нет необходимости хранить локальную копию файла параметров для запуска экземпляра с удаленной машины. Редактирование SPFILE-а вручную повредит его, после чего он станет неработоспособным.

Как я могу узнать, что моя база данных использует PFILE или SPFILE:

Выполните следующий запрос, чтобы увидеть какой файл параметров был использован:

SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
FROM sys.v_$parameter WHERE name = 'spfile';

Кроме того, вы можете воспользоваться представлением V$SPPARAMETER чтобы проверить, используете ли вы PFILE или нет: если столбец “value” имеет значение NULL для всех параметров, значит, вы используете PFILE.

Просмотр установок параметров:

Вы можете просмотреть значения параметров с помощью следующих методов (независимо от того, где они установлены – в PFILE или в SPFILE):

  • Команда “SHOW PARAMETERS” в SQL*Plus (напр., SHOW PARAMETERS timed_statistics)
  • Представление V$PARAMETER – содержит все текущие значения параметров
  • Представление V$PARAMETER2 – тоже содержит все текущие значения, но значения многозначных параметров разнесены в разные столбцы
  • Представление V$SPPARAMETER – содержит значения файла параметров, управляемого сервером (SPFILE)

Запуск экземпляра посредством PFILE или SPFILE:

Oracle ищет подходящий файл параметров в следующем порядке:

  • Пытается использовать файл spfile${ORACLE_SID}.ora в директории $ORACLE_HOME/dbs (Unix) или ORACLE_HOME/database (Windows)
  • Пытается использовать файл spfile.ora в директории $ORACLE_HOME/dbs (Unix) или ORACLE_HOME/database (Windows)
  • Пытается использовать файл init${ORACLE_SID}.ora в директории $ORACLE_HOME/dbs (Unix) or ORACLE_HOME/database (Windows)

Вы можете переопределить местонахождение PFILE, заданное по-умолчанию, указав параметр PFILE в команде запуска экземпляра:

SQL> STARTUP PFILE='/oradata/spfileORCL.ora'

Заметьте, что эквивалентной команды “STARTUP SPFILE=” нет. Вы можете указать на желаемый SPFILE только прописав параметр ‘SPFILE=’ в файле PFILE. Например:

SPFILE=/path/to/spfile

Изменение значений параметров в файле SPFILE:

PFILE можно отредактировать в любом простейшем текстовом редакторе, поскольку он имеет текстовый формат. SPFILE – это бинарный файл. Для изменения значений параметров в файле SPFILE используют команды “ALTER SYSTEM SET” и “ALTER SYSTEM RESET”. Вот примеры:

SQL> ALTER SYSTEM SET open_cursors=300 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET timed_statistics=TRUE
COMMENT='Changed by Frank on 1 June 2003'
SCOPE=BOTH
SID='*';

Здесь опция SCOPE может принимать значения SPFILE, MEMORY или BOTH:

  • MEMORY: Новое значение параметра будет присвоено только текущему экземпляру. По-умолчанию используется именно эта опция, если при запуске (STARTUP) был использован PFILE.
  • SPFILE: изменить SPFILE, значение параметра будет применено при следующем запуске экземпляра.
  • BOTH: значение параметра будет изменено как в текущем экземпляре, так и в файле SPFILE. Эта опция используется по-умолчанию, если при запуске (STARTUP) был использован SPFILE. Опция COMMENT (необязательная) позволяет сохранить некий пользовательский комментарий.

Опция SID (необязательная, только при использовании RAC) указывает на экземпляр, для которого будет применено изменение соответствующего параметра (По-умолчанию * : для всех экземпляров).

Для задания значений многозначных параметров используйте следующий синтаксис:

SQL> ALTER SYSTEM SET utl_file_dir='/tmp/','/oradata','/home/' SCOPE=SPFILE;

Для задания недокументированных инициализационных параметров (по просьбе службы технической поддержки Oracle), используйте следующий синтаксис:

SQL> ALTER SYSTEM SET "_allow_read_only_corruption"=TRUE SCOPE=SPFILE;

Для того, чтобы удалить какой-либо параметр из файла SPFILE, используйте одну из следующих команд:

SQL> ALTER SYSTEM RESET timed_statistics SCOPE=SPFILE SID=‘*’;
SQL> ALTER SYSTEM SET timed_statistics = '' SCOPE=SPFILE;

Конвертирование файлов PFILE и SPFILE:

Вы можете легко перейти от использования файла PFILE к файлу SPFILE (и наоборот). Выполните одну из следующих команд пользователем, имеющим привелегию SYSDBA или SYSOPER:

SQL> CREATE PFILE FROM SPFILE;
SQL> CREATE SPFILE FROM PFILE;

Также, вы можете указать свой путь для PFILE или SPFILE (или для обоих файлов). Взгляните на пример:

SQL> CREATE SPFILE='/oradata/spfileORCL.ora' from PFILE='/oradata/initORCL.ora';

Существует альтернативная процедура для изменения значений файла SPFILE, используя вышеуказанный метод:

  • Экспортируйте SPFILE командой: CREATE PFILE=‘pfilename’ FROM SPFILE = ‘spfilename’;
  • Отредактируйте полученный PFILE в текстовом редакторе
  • Перезапустите экземпляр базы данных с опцией PFILE: STARTUP PFILE=filename
  • Пересоздайте SPFILE: CREATE SPFILE=‘spfilename’ FROM PFILE=‘pfilename’;
  • При следующем запуске экземпляра используйте команду STARTUP без опции PFILE, тогда будет использован новый SPFILE.

Резервное копирование файла параметров:

RMAN (Oracle’s Recovery Manager) сохраняет SPFILE вместе с управляющим файлом при установке “CONFIGURE CONTROLFILE AUTOBACKUP” в ON (по-умолчанию – OFF). PFILE не может быть скопирован с использованием RMAN. Вот пример:

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

Для восстановления файла SPFILE используйте такую команду:

RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

Источник: oranet.ru (Russian oracle network)

В процессе начальной настройки параметров Oracle возникает путаница между PFILE и SPFILE. Все дело в том, что у них одинаковое предназначение и надо четко понимать какой вид конфигурационного файла использует ваш Oracle.

Хочу рассказать о преимуществах и недостатках SPFILE и PFILE. И показать как конвертировать один вид конфигурационного файла в другой и переключаться с SPFILE на PFILE и обратно.

Инициализационные файлы параметров: PFILE-ы против SPFILE-ов

После запуска экземпляра Oracle, его характеристики определяются набором параметров, указанных в инициализационном файле параметров. Эти параметры инициализации могут задаваться как в PFILE-е, так и в SPFILE-е. SPFILE используется, начиная с версии Oracle 9i. Все предыдущие релизы Oracle используют только PFILE-ы.

Преимущества SPFILE-ов над PFILE-ами:

  • RMAN может сделать резервную копию SPFILE-а (PFILE можно сохранить только вручную).
  • Сокращаются возможные ошибки администратора. SPFILE управляется сервером. Параметры проверяются перед их применением.
  • Исчезают некоторые проблемы конфигурирования (например, вам не надо иметь локальный PFILE для запуска экземпляра Oracle с удаленной машины).
  • Легко найти — хранится в определенной директории.


Какая разница между PFILE-ом и SPFILE-ом:

PFILE — статичный, пользовательский текстовый файл, который редактируется стандартными текстовыми редакторами (например, «блокнот» или «vi»). Обычно этот файл находится на сервере, однако, для запуска Oracle с удаленной машины необходимо иметь локальную копию. АБД (Администраторы Баз Данных) обычно ссылаются на этот файл: INIT.ORA.

SPFILE (Server Parameter File), с другой стороны, постоянно находящийся на сервере бинарный файл, который может быть изменен только с помощью команды «ALTER SYSTEM SET». Это значит, что больше нет необходимости хранить локальную копию файла параметров для запуска экземпляра с удаленной машины. Редактирование SPFILE-а вручную повредит его, после чего он станет неработоспособным.


Как я могу узнать, что моя база данных использует PFILE или SPFILE:

Выполните следующий запрос, чтобы увидеть какой файл параметров был использован:

   SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type" 
          FROM sys.v_$parameter WHERE name = 'spfile';

Кроме того, вы можете воспользоваться представлением V$SPPARAMETER чтобы проверить, используете ли вы PFILE или нет: если столбец «value» имеет значение NULL для всех параметров, значит, вы используете PFILE.


Просмотр установок параметров:

Вы можете просмотреть значения параметров с помощью следующих методов (независимо от того, где они установлены — в PFILE или в SPFILE):

  • Команда «SHOW PARAMETERS» в SQL*Plus (напр., SHOW PARAMETERS timed_statistics)
  • Представление V$PARAMETER — содержит все текущие значения параметров
  • Представление V$PARAMETER2 — тоже содержит все текущие значения, но значения многозначных параметров разнесены в разные столбцы
  • Представление V$SPPARAMETER — содержит значения файла параметров, управляемого сервером (SPFILE)


Запуск экземпляра посредством PFILE или SPFILE:

Oracle ищет подходящий файл параметров в следующем порядке:

  • Пытается использовать файл spfile${ORACLE_SID}.ora в директории $ORACLE_HOME/dbs (Unix) или ORACLE_HOME/database (Windows)
  • Пытается использовать файл spfile.ora в директории $ORACLE_HOME/dbs (Unix) или ORACLE_HOME/database (Windows)
  • Пытается использовать файл init${ORACLE_SID}.ora в директории $ORACLE_HOME/dbs (Unix) or ORACLE_HOME/database (Windows)

Вы можете переопределить местонахождение PFILE, заданное по-умолчанию, указав параметр PFILE в команде запуска экземпляра:

SQL> STARTUP PFILE=’/oradata/spfileORCL.ora’


Заметьте, что эквивалентной команды «STARTUP SPFILE=» нет. Вы можете указать на желаемый SPFILE только прописав параметр ‘SPFILE=’ в файле PFILE. Например:

SPFILE=/path/to/spfile


Изменение значений параметров в файле SPFILE:

PFILE можно отредактировать в любом простейшем текстовом редакторе, поскольку он имеет текстовый формат. SPFILE — это бинарный файл. Для изменения значений параметров в файле SPFILE используют команды «ALTER SYSTEM SET» и «ALTER SYSTEM RESET». Вот примеры:

SQL> ALTER SYSTEM SET open_cursors=300 SCOPE=SPFILE;

SQL> ALTER SYSTEM SET timed_statistics=TRUE
 COMMENT='Changed by Frank on 1 June 2003'
 SCOPE=BOTH
  SID='*';

Здесь опция SCOPE может принимать значения SPFILE, MEMORY или BOTH:

  • MEMORY: Новое значение параметра будет присвоено только текущему экземпляру. По-умолчанию используется именно эта опция, если при запуске (STARTUP) был использован PFILE.
  • SPFILE: изменить SPFILE, значение параметра будет применено при следующем запуске экземпляра.
  • BOTH: значение параметра будет изменено как в текущем экземпляре, так и в файле SPFILE. Эта опция используется по-умолчанию, если при запуске (STARTUP) был использован SPFILE. Опция COMMENT (необязательная) позволяет сохранить некий пользовательский комментарий.

Опция SID (необязательная, только при использовании RAC) указывает на экземпляр, для которого будет применено изменение соответствующего параметра (По-умолчанию * : для всех экземпляров).

Для задания значений многозначных параметров используйте следующий синтаксис:

SQL> ALTER SYSTEM SET utl_file_dir=’/tmp/’,’/oradata’,’/home/’ SCOPE=SPFILE;



Для задания недокументированных инициализационных параметров (по просьбе службы технической поддержки Oracle), используйте следующий синтаксис:

SQL> ALTER SYSTEM SET «_allow_read_only_corruption»=TRUE SCOPE=SPFILE;

Для того, чтобы удалить какой-либо параметр из файла SPFILE, используйте одну из следующих команд:

SQL> ALTER SYSTEM RESET timed_statistics SCOPE=SPFILE SID=‘*’;
SQL> ALTER SYSTEM SET timed_statistics = » SCOPE=SPFILE;


Конвертирование файлов PFILE и SPFILE:

Вы можете легко перейти от использования файла PFILE к файлу SPFILE (и наоборот). Выполните одну из следующих команд пользователем, имеющим привелегию SYSDBA или SYSOPER:


SQL> CREATE PFILE FROM SPFILE;
SQL> CREATE SPFILE FROM PFILE;



Также, вы можете указать свой путь для PFILE или SPFILE (или для обоих файлов). Взгляните на пример:

SQL> CREATE SPFILE=’/oradata/spfileORCL.ora’ from PFILE=’/oradata/initORCL.ora’;

Существует альтернативная процедура для изменения значений файла SPFILE, используя вышеуказанный метод:

  • Экспортируйте SPFILE командой: CREATE PFILE=‘pfilename’ FROM SPFILE = ‘spfilename’;
  • Отредактируйте полученный PFILE в текстовом редакторе
  • Перезапустите экземпляр базы данных с опцией PFILE: STARTUP PFILE=filename
  • Пересоздайте SPFILE: CREATE SPFILE=‘spfilename’ FROM PFILE=‘pfilename’;
  • При следующем запуске экземпляра используйте команду STARTUP без опции PFILE, тогда будет использован новый SPFILE.


Резервное копирование файла параметров:

RMAN (Oracle’s Recovery Manager) сохраняет SPFILE вместе с управляющим файлом при установке «CONFIGURE CONTROLFILE AUTOBACKUP» в ON (по-умолчанию — OFF). PFILE не может быть скопирован с использованием RMAN. Вот пример:

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

Для восстановления файла SPFILE используйте такую команду:

RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

Перевод статьи: Злыгостев А.А.

От себя хочу добавить, что лучше на всякий случай подстраховаться и после внесения настроек конвертировать настройки в другой вид файла. И я бы не сказал, что SPFILE однозначно лучше PFILE. В PFILE куда проще внести изменения, особенно в критических ситуациях, когда базу требуется срочно запустить на более слабом сервере.

Итак, у нас есть установленная БД и мы готовы изучать как же управлять экземпляром БД и как он работает с БД. Изучение программы в настроенной учебной среде даёт определенные преимущества, самое главное из которых, это в процессе изчучения и экспериментов вы неизбежно столкнётесь с ошибками и решение этих ошибок – самый лучший способ изучения. Вы всегда можете удалить и заново установить систему если в резульате каких-либо образом система перестанет работать и у вас не получится восстановить работоспособность, но даже это даст вам определённый опыт использования OUI.

БД и экзмепляр управляются набором инилизационных параметров. Их достаточно большое количество, однако наиболее важных всего тридцать три. Эти параметры регулируют такие значения как объём выделяемой памяти при запуске экземпляра, местоположение файлов данных и файлов логов, файла контроля и его копий, а также название БД. Значения по умолчанию не будут использоваться на реальных системах, но для тестовой среды подходят. Многие DBA немного боятся изменять эти параметры, однако в этом нет ничего страшного, лишь имзенения некоторыч параметры сложно отменить. Если вы поменяли какое-то значение в процессе попытки оптимизировать производительность и БД стала вести себя хуже – просто отмените изменения. Все эти параметры хранятся в инилизационном файле без которого экземляр не запустится.

Мы рассмотрим этапы запуска и остановки экземпляра БД, подключение БД и несмотря на то что эти шаги достаточно просты, необходимо понимать как эти этапы происходят в системе, как работает механизм для предотвращения сбоев и как фоновые процессы работают с БД.

Значимость файлов системных журналов и файлов трассировки (alert log и trace files) нельзя недооценивать, они очень важны для поиска причин возникновения проболем и Oracle изобрели удобный способ найти нужные файлы – значения хранятся в инилизационных параметрах. Системные журналы пожалуй самые важные файлы для DBA, так как в них хранятся данные о всех киритческих системных событиях, таких как запуск, остановка, возникновение ошибки и т.п. Файлы трассировки обычно используются фоновыми и серверными процессами и, как и  в системные журналы, содержат информацию о происходящих и произошедших событиях.

Также мы рассмотрим словарь данных и представления производительности. Эти объекты можно просмотреть с помощью SQL запросов и они содержат важную информацию о текущем состоянии системы. Данные в представлениях производительности недоступны после остановки экземпляра – они содержат информацию только о текущей активности БД и помогают системе и DBA понимать что происходит в системе в текущий момент. Использование и понимание этих объектов БД сильно облегчит процесс понимания что происходит со всей БД.

Экземпляр настраивается инилизационными параметрами используемыми при старте (запуске фоновых процессов и создании структур в памяти). Многие, но не все, параметры могут быть изменены после старта. Параметры используемые при создании экземпляра могут быть получены из файла параметров (который может быть статическим pfile или динамическим spfile) или использовать значения по умолчанию. У всех параметров кроме DB_NAME есть значение по умолчанию. Всего примерно триста параметров могут быть установлены DBA. На самом деле есть ещё примерно полторы тысячки параметров, но они обычно устанавливаются системой и изменяются только после консультации с поддержкой Oracle.

Настраиваемые триста параметров в свою очередь  делятся на базовые (basic) и продвинутые (advanced). Основной принцип разделения таков, что практически все БД будут хорошо работать со значениями по умолчанию для продвинутых параметров. Всего около тридцати трёх параметров являются базовыми. Таким образом установка значений для параметров не такая уж ужасная задача, однако эта задача очень важная.

Содержание

  • 1 Статические и динамические параметры. Инициализационный файл параметров
  • 2 Базовые параметры
  • 3 Изменение параметров

Статические и динамические параметры. Инициализационный файл параметров

Для просмотра параметров и их значений можно выполнить запрос к представлению V$PARAMETER

SELECT NAME,VALUE FROM V$PARAMETER ORDER BY NAME;

Запрос который может вернуть немного другой результат

SELECT NAME,VALUE FROM V$SPPARAMETER ORDER BY NAME;

Разница между запросами в представлениях, откуда выбираются параметры и из значения: V$PARAMETER отображает значения, установленные для запущенного экземпляра БД, а V$SPPARAMETER содержит значения которые хранятся в spfile на диске. Обычно, параметры одинаковые, но не всегда. Некоторые параметры могут быть измененые в процессе работы экземпляра БД. Другие же, называемые статическими параметрами, устанавливаются только в момент запуска экземпляра БД. Изменение нестатических параметров приведёт к немедленному эффекту на работающем экземпляре и также может быть записано в spfile. Если это будет сделано, то при следующей остановке/запуске экземпляра будет использовано новое значение. Если не записывать изменения в файл – то изменения будут действовать только до перезапуска экземпляра.  Статические параметры могут быть измененые только записью в spfile и изменения будут применены при перезапуске экземпляра. Если существует разница между результатами выполнения двух  запросов, то скорее всего либо DBA тестирует какие-либо изменения и ещё не применил их, либо были изменения в статических параметрах, но экземплярд не был перезапущен.

Остальные столбцы в представлениях V$PARAMETER и V$SPPARAMETER не требуют пояснений.

Эти представления так же можно просмотреть используя Database Controle. На домашней странице выберите вкладку Server и нажмите ссылку Initialization Parameters. В отрывшемся окне – рисунок 3-1 доступно две вкладки: Current отображает значения работающего экземпляра, т.е. значения из представления V$PARAMETER. Вкладка SPFile  содержит информацию записанную в spfile и доступную в представлении V$SPPARAMETER.

Динамическим параметрам можно установить новое значение в этом же окне. Для изменеия статических параметров необходимо выбрать вкладку SPFile. Также можно изменить параметры используя команду ALTER SYSTEM. Примеры выполнения этой команды показаны на рисунке 3-2. Вначале просмотрим текущее значение параметра DB_CREATE_FILE_DEST – оно одинаковое для запущенного экземпляра и spfile. Затем установим значения параметров используя ключевое слово SCOPE (BOTH – значение по умолчанию при использовании SPFILE, MEMORY – значение по умолчанию при использовании PFILE).

11

12

Oracle ищет подходящий файл параметров в следующем порядке

  • Пытается использовать файл spfile${ORACLE_SID}.ora в директории $ORACLE_HOME/dbs (Unix) или ORACLE_HOME/database (Windows)
  • Пытается использовать файл spfile.ora в директории $ORACLE_HOME/dbs (Unix) или ORACLE_HOME/database (Windows)
  • Пытается использовать файл init${ORACLE_SID}.ora в директории $ORACLE_HOME/dbs (Unix) or ORACLE_HOME/database (Windows)

Вы можете переопределить местонахождение PFILE заданное по умолчанию указав параметр PFILE в команде запуске экземпляра

STARTUP PFILE=’/oradata/spfileORCL.ora’

Параметра SPFILE у команды STARTUP нет. Можно указать на желаемый SPFILE только прописав параметр SPFILE в файле PFILE.

PFILE можно конвертировать в SPFILE вызвав команду CREATE SPFILE[=’filename’] FROM PFILE[=’pfilename’] (параметры в квадратных скобках опциональны и значение по умолчанию формируется из переменных ORALCE_HOME и SID). Также можно выполнить обратное преобразование вызвыв команду CREATE PFILE FROM SPFILE.

Команды CREATE PFILE и CREATE SPFILE могут быть выполнены в любое время, даже без работающего экземпляра

Базовые параметры

Параметры экземпляра выделенные как базовые – это такие параметры значения которых необходимо обдумывать для любой БД. В некоторых случаях значения по умолчанию подойдут – но всегда необходимо осознанно указывать значения базовых параметров вашей БД. Базовые параметры и их значения можно посмотреть выполнив запрос

select name,value from v$parameter where isbasic=’TRUE’ order by name;

Также можно выполнить запрос сразу к двум представлениям

select p.name pfilename,p.value pfilevalue,s.name,s.value from v$spparameter s join v$parameter p on s.name=p.name where p.isbasic=’TRUE’ order by name;

Список базовых параметров и их описание представлены в таблице 3-1

13

14

Изменение параметров

Статические параметры могут быть изменены только командой ALTER SYSTEM с аргументом SCOPE=SPFILE. Эта команда изменяет SPFILE. Статические параметры изменяют экземпляр БД только после перезапуска. К примеру статическим параметром является LOG_BUFFER. Если вы хотите измение его значение то вам необходимо выполнить команду

alter system set log_buffer=6m;

Такой вызов команды приведёт к ошибке

15

Для успешной обработки команды необходимо добавить аргумент SCOPE=SPFILE. Команда будет выполнена успешно, однако для применения изменений экземпляр БД необходимо перезапустить.

Параметры применяются ко всей БД либо к конкретной сессии, либо и для сессий и для БД. Примером параметра который указывается для БД, но может также дополнительно настраивается для сессий является OPTIMIZER_MODE.  Значение этого параметра влияет на то, как Oracle будет выполнять запросы. Доступные значения ALL_ROWS и FIRST_ROWS. При выборе ALL_ROWS оптимизатор генерирует план выполнения запроса таким образом, чтобы закончить выполнение как можно быстрее, тогда как FIRST_ROWS создает такой план запроса, который вернёт часть результата как можно быстрее, тогда как запрос полностью будет выполняться гораздо дольшее время. Таким образом если ваша БД обычно используется для долгих DSS (Decision Support System) запросов, но некоторые пользователи используют БД для интерактивной работы то значение для системы может быть установлено ALL_ROWS а для сессий определенных пользователей FIRST_ROWS. Это достигается путем выполнения запросов

alter system set optimizer_mode=all_rows;

alter session set optimizer_mode=first_rows;

Существует всего несколько параметров которые указываются только для сессии. Главным примером является NLS_DATE_FORMAT. Этот параметр, который управляет форматом отображения даты и время, указывается в файле параметров, но не может быть изменен командой ALTER SYSTEM. Т.е. он является статическим, так как влияет на работу экзмепляра, но он может быть настроен на уровне сессии командой

alter session set nls_date_format=’dd-mm-yy hh24:mi:ss’;

Этот запрос установит формат даты/время для текущей сессии, но не затронет другие сессии.

Introduction

This article will describe how to modify your Oracle spfile configuration file in Oracle 9i. It assumes that you are currently running your database using your spfile and not your pfile.

Creating a Pfile from your Spfile

First, if you want, copy your file in <oracle_home>/dbs/init<sid>.ora (where <sid> is your oracle instance name) which will be overwritten by this process. Then log into your oracle database as sysdba. Usually from a privileged operating system account you can do this like this:

[oracle@mynode oracle]$ sqlplus /nolog


SQL> connect / as sysdba;
Connected.

Once connected, it's time to create a pfile, which you can edit with a text editor, from your current spfile. You can do this like this:

SQL> CREATE pfile FROM spfile;

File created.

SQL> quit;

Modifying Your Pfile

This created a pfile called init<sid>.ora in <oracle_home>/dbs/, which in my case was called initORCL.ora. Now you can edit your init<sid>.ora file with a plain text editor like VI or Notepad. Once you’re done editing the pfile, it’s recommended that you start the database with the pfile to make sure it works and that the syntax is correct before making a spfile from it:

[oracle@mynode oracle]$ sqlplus /nolog

SQL> connect / as sysdba;
Connected.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.


SQL> startup pfile=initORCL.ora;
ORACLE instance started.

Total System Global Area  404194808 bytes
Fixed Size                   742904 bytes
Variable Size             201326592 bytes
Database Buffers          201326592 bytes
Redo Buffers                 798720 bytes
Database mounted.
Database opened.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

Creating Your New Spfile

If all went well, then your database started up with the pfile. Next, we want to create the spfile from the pfile. Leaving your sqlplus session open you can create the new spfile, shutdown the database, and then bring it back up without the pfile parameter so that it uses the spfile like so:

SQL> connect / as sysdba;
Connected.


SQL> CREATE spfile FROM pfile;

File created.



SQL> startup;
ORACLE instance started.

Total System Global Area  404194808 bytes
Fixed Size                   742904 bytes
Variable Size             201326592 bytes
Database Buffers          201326592 bytes
Redo Buffers                 798720 bytes
Database mounted.
Database opened.

SQL>

Your oracle instance should now be running with your new spfile. Check out your database to make sure that the changes you made took effect.

As always, if you have trouble, please post your comments on this web page.

Понравилась статья? Поделить с друзьями:
  • Как изменить spf запись для почтового сервера
  • Как изменить spd оперативной памяти
  • Как изменить spawn rate minecraft
  • Как изменить spacing
  • Как изменить sources list ubuntu