Oracle 的参数文件

1、参数文件的相关概念

1.1 概念

参数文件记录了 Oracle 数据库的基本参数信息,包括数据库名、控制文件所在路径等。参数文件也是 Oracle 数据库较为重要的一种文件结构。

1.2 参数文件的分类

1.2.1 spfile

spfile(Server Parameter File):服务器参数文件,文件格式为二进制格式,不能使用文本编辑器修改,可以使用 alter system 命令修改文件中的参数值,可以使用 strings 命令查看其内容。

spfile 参数文件的默认名称为:spfile.ora

文件路径为:$ORACLE_HOME/dbs。

[oracle@node1 db]$ cd $ORACLE_HOME/dbs
[oracle@node1 dbs]$ ll
总用量 116936
-rw-r----- 1 oracle oinstall 10715136 12月 23 16:06 c-1651659091-20221223-00
-rw-r----- 1 oracle oinstall 10715136 12月 23 20:36 c-1651659091-20221223-01
-rw-r----- 1 oracle oinstall 10715136 1月  12 15:24 c-1651659091-20230112-00
-rw-r----- 1 oracle oinstall 10715136 1月  12 15:37 c-1651659091-20230112-01
-rw-r----- 1 oracle oinstall 11042816 1月  12 19:05 c-1651659091-20230112-02
-rw-r----- 1 oracle oinstall 10715136 1月  12 15:56 c-1651659091-20230112-03
-rw-r----- 1 oracle oinstall 11042816 1月  12 19:12 c-1651659091-20230112-04
-rw-r----- 1 oracle oinstall 11042816 1月  13 11:37 c-1651659091-20230113-00
-rw-r----- 1 oracle oinstall 11042816 1月  13 11:52 c-1651659091-20230113-01
-rw-r----- 1 oracle oinstall 11042816 1月  30 10:49 c-1651659091-20230130-00
-rw-rw---- 1 oracle oinstall     1544 1月  31 13:27 hc_orcl.dat
-rw-r--r-- 1 oracle oinstall     3079 5月  14 2015 init.ora
-rw-r----- 1 oracle oinstall       24 1月  31 12:58 lkMYDB
-rw-r----- 1 oracle oinstall       24 1月  12 13:04 lkORCL
-rw-r----- 1 oracle oinstall     2048 12月 19 20:28 orapworcl
-rw-r----- 1 oracle oinstall 10928128 1月  30 10:49 snapcf_orcl.f
-rw-r----- 1 oracle oinstall     3584 1月  31 13:27 spfileorcl.ora

1.2.2 pfile

pfile(Initialization Parameters File): 初始化参数文件,文件格式为文本格式,可以使用文本编辑器修改其中的参数内容。

pfile 默认的名称为:init.ora

文件路径为:$ORACLE_HOME/dbs。

[oracle@node1 db]$ cd $ORACLE_HOME/dbs
[oracle@node1 dbs]$ ll
总用量 116936
-rw-r----- 1 oracle oinstall 10715136 12月 23 16:06 c-1651659091-20221223-00
-rw-r----- 1 oracle oinstall 10715136 12月 23 20:36 c-1651659091-20221223-01
-rw-r----- 1 oracle oinstall 10715136 1月  12 15:24 c-1651659091-20230112-00
-rw-r----- 1 oracle oinstall 10715136 1月  12 15:37 c-1651659091-20230112-01
-rw-r----- 1 oracle oinstall 11042816 1月  12 19:05 c-1651659091-20230112-02
-rw-r----- 1 oracle oinstall 10715136 1月  12 15:56 c-1651659091-20230112-03
-rw-r----- 1 oracle oinstall 11042816 1月  12 19:12 c-1651659091-20230112-04
-rw-r----- 1 oracle oinstall 11042816 1月  13 11:37 c-1651659091-20230113-00
-rw-r----- 1 oracle oinstall 11042816 1月  13 11:52 c-1651659091-20230113-01
-rw-r----- 1 oracle oinstall 11042816 1月  30 10:49 c-1651659091-20230130-00
-rw-rw---- 1 oracle oinstall     1544 1月  31 13:27 hc_orcl.dat
-rw-r--r-- 1 oracle oinstall     3079 5月  14 2015 init.ora
-rw-r----- 1 oracle oinstall       24 1月  31 12:58 lkMYDB
-rw-r----- 1 oracle oinstall       24 1月  12 13:04 lkORCL
-rw-r----- 1 oracle oinstall     2048 12月 19 20:28 orapworcl
-rw-r----- 1 oracle oinstall 10928128 1月  30 10:49 snapcf_orcl.f
-rw-r----- 1 oracle oinstall     3584 1月  31 13:27 spfileorcl.ora

1.3 实例启动时查找参数文件的顺序

Oracle 实例启动时查找参数文件的顺序:Oracle 首先在默认目录中查找名为 spfile<$ORACLE_SID>.ora的文件,如果没有则查找spfile.ora 文件,如果还没有,继续查找 init<$ORACLE_SID>.ora 文件。

Oracle 数据库根据 SPFILE 或 PFILE 中设置的参数来配置数据库的启动。Oracle 实例在启动时,会去读取参数文件中的配置:数据库的 startup 命令中可以指定以哪个 pfile 来启动(startup 命令只能指定 pfile,不能指定 spfile)。如果使用不带 pfile 子句的 startup 命令,Oracle 将从默认位置的 spfile 文件中读取初始化参数。

1.4 查看启动实例时所使用的参数文件

SQL> show parameter pfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /app/oracle/product/19.3.0/db/dbs/spfileorcl.ora
SQL> SELECT INST_ID,NAME,VALUE FROM GV$PARAMETER WHERE NAME LIKE '%pfile%';
   INST_ID NAME                                                                             VALUE
---------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
         1 spfile                                                                           /app/oracle/product/19.3.0/db/dbs/spfileorcl.ora

可以看出 oracle 启动实例时使用的是 spfile 参数文件

2、Oracle 参数的分类

根据参数的生效时间,Oracle 参数可以分为两类:静态参数和动态参数。

2.1 动态参数

可以在数据库运行时修改参数值并且立即生效的参数。

2.2 静态参数

内存中的当前值不能被修改,只能在参数文件中修改,且数据库必须要重启才能生效的参数。

2.3 如何区分动态参数和静态参数

Oracle 在视图 V$PARAMETER 中提供了一个列 ISSYS_MODIFIABLE,

如果该列的值为 IMMEDIATE 代表该参数为动态参数,且修改后立即生效;

如果该列的值为 DEFERRED 代表该参数为动态参数,但参数值修改后不会立即生效,只有在新连接的会话中生效;

如果该列的值为 FALSE 代表该参数为静态参数。

3、查看 Oracle 参数

查询 Oracle 参数的方法如下:

3.1 使用 show parameters 命令

该命令可以查询当前会话生效的参数。

SQL>  show parameter name;

3.2 使用 show spparameters 命令

该命令可以查询当前会话生效的 spfile 参数,参数的取值来源于spfile参数文件。

SQL> show spparameter name;

4、参数文件的创建

使用 create pfile 命令

此方法可以将 spfile 或当前内存中设置的参数保存到 pfile 文件中,pfile 文件是文本文件,可以直接打开进行查看。这种方法列出的参数都是用户设置的参数,不包括默认值参数。

4.1 将spfile参数文件中设置的参数保存到pfile文件

SQL> create pfile = '/home/oracle/aaa.ora' from spfile;
File created.

4.2 将当前内存中设置的参数保存到pfile文件

SQL> create pfile = '/home/oracle/bbb.ora' from memory;
File created.

5、参数文件相关视图的查询

5.1 查看 v$parameter 视图

v$parameter视图提供了当前会话可见的初始化参数的取值,如果要查询rac数据库的 所有实例的设置,可以查询gv$parameter 视图提供了当前会话可见的初始化参数的取值,

SQL> select name,value,issys_modifiable from v$parameter where name like 'instance%';
NAME                                                                             VALUE                                                                            ISSYS_MODIFIABLE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------------
instance_abort_delay_time                                                        0                                                                                IMMEDIATE
instance_groups                                                                                                                                                   FALSE
instance_type                                                                    RDBMS                                                                            FALSE
instance_mode                                                                    READ-WRITE                                                                       FALSE
instance_number                                                                  0                                                                                FALSE
instance_name                                                                    orcl                                                                             FALSE
6 rows selected

5.2 查看 v$system_parameter 视图

v$systemparameter 视图提供了当前实例生效的初始化参数的取值,如果要查询rac数据库的所有实例的设置,可以查询 gv$system_parameter 视图提供了当前实例生效的初始化参数的取值

SQL> select name,value,issys_modifiable from v$system_parameter where name like 'instance%';
NAME                                                                             VALUE                                                                            ISSYS_MODIFIABLE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------------
instance_abort_delay_time                                                        0                                                                                IMMEDIATE
instance_groups                                                                                                                                                   FALSE
instance_type                                                                    RDBMS                                                                            FALSE
instance_mode                                                                    READ-WRITE                                                                       FALSE
instance_number                                                                  0                                                                                FALSE
instance_name                                                                    orcl                                                                             FALSE
6 rows selected

5.3 查看 v$spparameter 视图

v$spparameter视图提供了来自spfile文件中初始化参数的取值,如果参数在spfile文件中没有设置,字段isspecified对应的值为false 。 如果要查询 rac 数据库的所有实例的设置,可以查询gv$spparameter视图

SQL> select name,value,isspecified from v$spparameter where name like 'instance%';
NAME                                                                             VALUE                                                                            ISSPECIFIED
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
instance_abort_delay_time                                                                                                                                         FALSE
instance_groups                                                                                                                                                   FALSE
instance_type                                                                                                                                                     FALSE
instance_mode                                                                                                                                                     FALSE
instance_number                                                                                                                                                   FALSE
instance_name                                                                                                                                                     FALSE
6 rows selected

5.4 查看 v$spparameter2 视图

v$spparameter2和v$spparameter 视图相似,唯一的区别在于对于包含多值的初始化参数,v$spparameter2视图会返回多条记录 。对于 rac 环境可以查询 gvspparameter2视图会返回多条记录。对于rac环境可以查询gvspparameter2 视图。

SQL> select name,value,issys_modifiable from v$parameter where name like '%files%';
NAME                                                                             VALUE                                                                            ISSYS_MODIFIABLE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------------
filesystemio_options                                                             none                                                                             FALSE
control_files                                                                    /app/oracle/oradata/ORCL/control01.ctl, /app/oracle/oradata/ORCL/control02.ctl   FALSE
db_files                                                                         200                                                                              FALSE
session_max_open_files                                                           10                                                                               FALSE

SQL> select name,value,issys_modifiable from v$parameter2 where name like '%files%';
NAME                                                                             VALUE                                                                            ISSYS_MODIFIABLE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------------
filesystemio_options                                                             none                                                                             FALSE
control_files                                                                    /app/oracle/oradata/ORCL/control01.ctl                                           FALSE
control_files                                                                    /app/oracle/oradata/ORCL/control02.ctl                                           FALSE
db_files                                                                         200                                                                              FALSE
session_max_open_files                                                           10                                                                               FALSE

5.5 查看非默认值参数

SQL> select name,value from v$parameter where isdefault <> 'TRUE';
NAME                                                                             VALUE
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
processes                                                                        1500
nls_language                                                                     SIMPLIFIED CHINESE
nls_territory                                                                    CHINA
sga_target                                                                       8002732032
control_files                                                                    /app/oracle/oradata/ORCL/control01.ctl, /app/oracle/oradata/ORCL/control02.ctl
db_block_size                                                                    8192
compatible                                                                       19.0.0
log_archive_dest_1                                                               location=/app/archive
log_archive_format                                                               orcl_%d_%S_%t_%r.dbf
undo_tablespace                                                                  UNDOTBS1
remote_login_passwordfile                                                        EXCLUSIVE
db_domain                                                                        x88.com
dispatchers                                                                      (PROTOCOL=TCP) (SERVICE=orclXDB)
audit_file_dest                                                                  /app/oracle/admin/orcl/adump
audit_trail                                                                      DB
db_name                                                                          orcl
open_cursors                                                                     300
pga_aggregate_target                                                             2667577344
diagnostic_dest                                                                  /app/oracle
19 rows selected

6、设置 Oracle 参数的值

说明:

(1)在 RAC 环境中,要修改所有实例,可以在 ALTER SYSTEM 的最后加上 SID='*',要更改某一个实例, 在命令的结尾加上 SID='实例名'

(2)ALTER SESSION:修改的参数只限于本次会话,退出会话再进入时修改失效

(3)ALTER SYSTEM:修改的参数适用于数据库实例的所有会话,数据库关闭则修改失效

(4)ALTER SYSTEM DEFERRED:修改是延迟修改,退出会话,下次进入会话时生效

(5)scope = spfile:修改只对 spfile 参数文件有效,对于动态参数和静态参数都是数据库重启时有效。

(6)scope = memory:修改只对内存有效,对于动态参数修改后立即生效,数据库重启后失效。静态参数不允许使用该选项。

(7)scope = both:修改对 spfile 参数文件和内存都生效。对于动态参数修改后立即生效,数据库重启后失效。静态参数不允许使用该选项。

初始化参数的设置方法有以下几种:

6.1 值修改内存中的值

ALTER SYSTEM/SESSION SET 参数名=参数值 SCOPE = MEMORY SID='*';

6.2 只修改 SPFILE 中的值

ALTER SYSTEM SET 参数名=参数值 SCOPE = SPFILE SID='*';

6.3 同时修改 SPFILE 和 MEMORY 中的值(也可以省略 BOTH 关键词)

ALTER SYSTEM SET 参数名=参数值 SCOPE = BOTH SID='*';

6.4 设置延迟生效

修改只对以后连接到数据库的会话生效,而对当前会话以及其它已经连接到 Oracle 的会话不会生效。

ALTER SYSTEM SET 参数名=参数值 DEFERRED SCOPE = SPFILE  SID='*';

6.5 动态参数修改举例

6.5.1 动态参数 open_cursors 在内存中的取值

SQL> show parameter open_cursor
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300

6.5.2 动态参数 open_cursors 在 spfile 参数文件中的取值

SQL> show spparameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300

6.5.3 只修改内存值

SQL> alter system set open_cursors = 250 scope = memory sid = '*';
System altered.
SQL> show parameter open_cursor
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     250
SQL> show spparameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300

6.5.4 只修改参数文件中的值

SQL> alter system set open_cursors = 350 scope = memory sid = '*';
System altered.
SQL> show parameter open_cursor
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     250
SQL> show spparameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     350

6.5.5 同时修改内存和参数文件的取值

SQL> alter system set open_cursors = 550 scope = memory sid = '*';
System altered.
SQL> show parameter open_cursor
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     550
SQL> show spparameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     550

6.6 静态参数修改举例

6.6.1 静态参数db_unique_name的取值


SQL> SELECT a.NAME,a.VALUE,a.ISSYS_MODIFIABLE FROM v$parameter a where a.NAME = 'db_unique_name';
NAME                                                                             VALUE                                                                            ISSYS_MODIFIABLE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------------
db_unique_name                                                                   orcl                                                                             FALSE

SQL> SELECT a.NAME,a.VALUE,a.ISSPECIFIED FROM v$spparameter a where a.NAME = 'db_unique_name';
NAME                                                                             VALUE                                                                            ISSPECIFIED
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
db_unique_name                                                                                                                                                    FALSE

6.6.2 静态参数的内存值不允许修改

SQL> alter system set db_unique_name = 'mydb' scope = memory sid = '*';
alter system set db_unique_name = 'mydb' scope = memory sid = '*'
ORA-02095: 无法修改指定的初始化参数

6.6.3 静态参数的内存值不允许使用 both 选项

SQL> alter system set db_unique_name = 'mydb' scope = both sid = '*';
alter system set db_unique_name = 'mydb' scope = both sid = '*'
ORA-02095: 无法修改指定的初始化参数

6.6.4 静态参数只能在 spfile 参数文件中修改,并且重启数据库才生效

SQL> alter system set db_unique_name = 'mydb' scope = spfile sid = '*';
System altered

SQL> SELECT a.NAME,a.VALUE,a.ISSYS_MODIFIABLE FROM v$parameter a where a.NAME = 'db_unique_name';
NAME                                                                             VALUE                                                                            ISSYS_MODIFIABLE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------------
db_unique_name                                                                   orcl                                                                             FALSE

SQL> SELECT a.NAME,a.VALUE,a.ISSPECIFIED FROM v$spparameter a where a.NAME = 'db_unique_name';
NAME                                                                             VALUE                                                                            ISSPECIFIED
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
db_unique_name                                                                                                                                                    FALSE

内存中的值没有发生变化

6.6.5 重启数据库(静态参数修改后必须重启数据库才能生效)

SQL> startup force
ORACLE instance started.

Total System Global Area 8002730448 bytes
Fixed Size    8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers    7860224 bytes
Database mounted.
Database opened.

SQL> SELECT a.NAME,a.VALUE,a.ISSPECIFIED FROM v$spparameter a where a.NAME = 'db_unique_name';
NAME                                                                             VALUE                                                                            ISSPECIFIED
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -----------
db_unique_name                                                                   mydb                                                                             TRUE

SQL> SELECT a.NAME,a.VALUE,a.ISSYS_MODIFIABLE FROM v$parameter a where a.NAME = 'db_unique_name';
NAME                                                                             VALUE                                                                            ISSYS_MODIFIABLE
-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------------
db_unique_name                                                                   mydb                                                                             FALSE

7、pfile 和 spfile 的互相创建

7.1 根据 spfile 创建 pfile

create pfile[='xxxxx'] from spfile[='xxxx'];

7.2 根据内存中的参数值创建 pfile

create pfile[='xxxxx'] from memory;

7.3 根据 pfile 创建 spfile

create spfile[='xxxxx'] from pfile[='xxxx'];

7.4 举例

7.4.1 根据 spfile 创建 pfile

SQL> create pfile = '/home/oracle/pfilefromspfile.ora' from spfile;
File created

7.4.2 根据 memory 创建 pfile

SQL> create pfile = '/home/oracle/pfilefrommemory.ora' from memory;
File created

7.4.3 集群根据pfile创建spfile文件

SQL> create spfile = '+data/spfileorcl1.ora' from pfile = '/home/oracle/pfile001.ora';
File created

7.4.4 单机版根据pfile创建spfile文件

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile = '/home/oracle/pfilefrommemory.ora';
ORACLE instance started.

Total System Global Area 8002730448 bytes
Fixed Size    8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers    7860224 bytes
Database mounted.
Database opened.
SQL> show parameter pfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      

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

File created.
SQL> startup force
ORACLE instance started.

Total System Global Area 8002730448 bytes
Fixed Size    8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers    7860224 bytes
Database mounted.
Database opened.
SQL> show parameter pfile;
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /app/oracle/product/19.3.0/db/dbs/spfileorcl.ora

8、使用 pfile 启动实例

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile = '/home/oracle/pfilefrommemory.ora';
ORACLE instance started.

Total System Global Area 8002730448 bytes
Fixed Size    8915408 bytes
Variable Size 1308622848 bytes
Database Buffers 6677331968 bytes
Redo Buffers    7860224 bytes
Database mounted.
Database opened.
SQL> show parameter pfile
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      

9、删除参数文件

SQL> alter system reset "background_dump_dest" scope=spfile sid='*';
System altered.
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

multis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值