Oracle参数文件详解

179 篇文章 17 订阅
本文详细解释了Oracle数据库中的参数文件类型(spfile和pfile)、位置、创建、使用顺序以及查看和修改方法。特别关注了CDB和PDB环境下的参数管理,包括PDB参数的继承和存储机制。
摘要由CSDN通过智能技术生成

1、参数文件的作用

参数文件用于存放实例所需要的初始化参数,因为多数初始化参数都具有默认值,所以参数文件实际存放了非默认的初始化参数。

2、参数文件类型

1)服务端参数文件,又称为 spfile
二进制的文件,命名规则为:spfile+sid.ora
如: spfileorcl.ora

2)静态参数文件,又称为 pfile
文本文件,命名规则为:init+sid.ora
如: Iinitorcl.ora

注意事项:
由于服务端参数文件是二进制的文件,使用vim打开看到的是乱乱的内容,此时切记不可使用:wq保存退出,否则服务端参数文件会损坏

3、参数文件的位置

SQL > show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/19.3.0/db_1/dbs/spfileorcl.ora

进入 /u01/app/oracle/product/19.3.0/db_1/dbs/路径查看当前有哪些参数文件

# cd /u01/app/oracle/product/19.3.0/db_1/dbs/
# ls
hc_mydb.dat   hc_orcl.dat  init.ora  lkORCL  orapworcl  spfileorcl.ora
hc_oradb.dat  hc_prod.dat  lkMYDB    lkPROD  orapwprod  spfileprod.ora
  • 有两个服务端参数文件(该服务器安装了两个数据库):spfileorcl.ora spfileprod.ora
  • 没有静态参数文件

4.创建参数文件

4.1 创建静态参数文件
(1)orcl数据库在默认路径下创建静态参数文件

SYS@orcl(CDB$ROOT)> create pfile from spfile;

File created.

或:

SYS@orcl(CDB$ROOT)> create pfile from memory;

File created.

执行上述命令之一后再次查看,可看到新建的静态参数文件 initorcl.ora

# cd /u01/app/oracle/product/19.3.0/db_1/dbs/
# ls
hc_mydb.dat   hc_orcl.dat  init.ora      lkMYDB  lkPROD     orapwprod       spfileprod.ora
hc_oradb.dat  hc_prod.dat  initorcl.ora  lkORCL  orapworcl  spfileorcl.ora

--查看服务端参数文件格式(二进制)
# file spfileorcl.ora
spfileorcl.ora: data

--查看静态参数文件格式(文本文件)
# file initorcl.ora
initorcl.ora: ASCII text

(2)在指定路径下创建静态参数文件

SQL> create pfile='/home/oracle/init.ora' from spfile;
或
SQL> create pfile='/home/oracle/init.ora' from memory;

4.2 创建服务端参数文件
(1)在默认路径下创建服务端参数文件

SYS@orcl(CDB$ROOT)> create spfile from pfile;

File created.

注意事项:
若当前数据库正在使用服务端参数文件,则无法在默认路径创建服务端参数文件。

SYS@orcl(CDB$ROOT)> create spfile from pfile;
create spfile from pfile
*
ERROR at line 1:
ORA-32002: cannot create SPFILE already being used by the instance

(2)在指定路径下创建服务端参数文件

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

5、参数文件使用顺序

  • 优先使用 spfile
  • 当 spfile 不存在或出错使用 pfile
  • 当 pfile 也不存在或出错,数据库不能正常启动。

6、如何判断数据库使用的是 SPFILE 还是 PFILE 呢

SYS@orcl(CDB$ROOT)> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/19.3.0/db_1/dbs/spfileorcl.ora

这里通过VALUE的值,可以知道使用的是服务器参数文件spfileorcl.ora,若VALUE值为空,说明使用的是静态参数文件。

7、参数查看

(1)方法一:使用show命令

--查看所有参数
SQL> show parameter 

--查询含有特定关键字的参数
----如查看含有undo关键字的参数
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
temp_undo_enabled                    boolean     FALSE
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS1

--查看指定参数
SQL> show parameter 参数名
----如查看参数undo_tablespace
SQL> show parameter undo_tablespace

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace                      string      UNDOTBS1

(2)方法二:查询数据字典v$parameter

--查看所有参数
SQL> select NAME,VALUE from v$parameter;

--查看含有特定关键字的参数
----如查看含有undo关键字的参数
SQL> select NAME,VALUE from v$parameter where NAME like '%undo%';

--查看指定参数
----如查看参数undo_tablespace
SQL> select NAME,VALUE from v$parameter where NAME = 'undo_tablespace';

8、参数修改

1)alter session
当前会话生效,新开的会话或重启数据库参数值不生效。
例:

SQL> alter session set sql_trace=true;

2)alter system
当前会话生效,新开的会话或重启数据库会参数值都生效。
例:

SQL> alter system set sql_trace=true;

3)ALTER SYSTEM ……… deferred
当前会话不生效,新开的会话或重启数据库会参数值生效。
例:

SQL> alter system set sort_area_size=75536 deferred;

注:当前窗口的参数值不生效,另外打开一个窗口后,参数值生效。

4)重置参数值
例:

SQL> alter system reset optimizer_mode;

5)加选项 scope=spfile|memory|both
例:

SQL> alter system set optimizer_mode=all_rows scope=spfile;
SQL> alter system set optimizer_mode=all_rows scope=memory;
SQL> alter system set optimizer_mode=all_rows scope=both;
SQL> alter system set optimizer_mode=all_rows;

注:

  • 对静态参数的修改,需要指定 scope=spfile 选项, 需要重启数据库才生效 。
  • 默认选项为both

关于参数修改的更多内容可参看文章:《Oracle 参数文件 & 参数详解》

9、CDB参数 & PDB参数

CDB 参数文件使用 12c 以前的 SPIFLE,pdb 参数文件不出现在 SPFILE 中,而是从CDB 中继承。

SYS@orcl(CDB$ROOT)> show con_name

CON_NAME
------------------------------
CDB$ROOT

SYS@orcl(CDB$ROOT)> select pdb_uid,name,value$ from PDB_SPFILE$;

no rows selected

SYS@orcl(CDB$ROOT)> show parameter open_cursors

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

SYS@orcl(CDB$ROOT)> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB                            READ WRITE NO

SYS@orcl(CDB$ROOT)> alter session set container=pdb;

Session altered.

SYS@orcl(CDB$ROOT)> show con_name

CON_NAME
------------------------------
PDB

SYS@orcl(CDB$ROOT)> show parameter open_cursors

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

如果 PDB 中有私有本地参数,则会保存在 CDB 的 PDB_SPFILE$字典表中,并以 con_id 区别。

SYS@orcl(CDB$ROOT)> alter system set open_cursors=400;

System altered.

SYS@orcl(CDB$ROOT)> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     400

SYS@orcl(CDB$ROOT)> conn / as sysdba
Connected.
SYS@orcl(CDB$ROOT)> show con_name

CON_NAME
------------------------------
CDB$ROOT
SYS@orcl(CDB$ROOT)> show parameter open_cursors

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

SYS@orcl(CDB$ROOT)> select pdb_uid,name,value$ from PDB_SPFILE$;

   PDB_UID        NAME               VALUE$
--------------------------------------------------------------------------------
1767828969   open_cursors    400

当 PDB UN-Plug 时,PDB 参数写入 PDB 的 XML 文件中:

SYS@orcl(CDB$ROOT)> alter pluggable database pdb close immediate;

Pluggable database altered.

SYS@orcl(CDB$ROOT)> alter pluggable database pdb unplug into '/home/oracle/pdb.xml';

Pluggable database altered.

# cat /home/oracle/pdb.xml

会看到PDB 修改的参数已写入 PDB 的 XML 文件中。
在这里插入图片描述
当 droppluggable database 后,pdb 和 PDB_SPFILE$信息记录会被清除。

SYS@orcl(CDB$ROOT)> drop pluggable database pdb keep datafiles;

Pluggable database dropped.

SYS@orcl(CDB$ROOT)> select pdb_uid,name,value$ from PDB_SPFILE$;

no rows selected

当PDB重新 Plug-in到CDB时会重新加载回PDB, 但是由于一些PDB参数特殊原因在plug-in时会被遗弃。这里因为没有特殊参数,所以没有丢失参数。

SYS@orcl(CDB$ROOT)> create pluggable database pdb using '/home/oracle/pdb.xml' nocopy;

Pluggable database created.

SYS@orcl(CDB$ROOT)> select pdb_uid,name,value$ from PDB_SPFILE$;

   PDB_UID        NAME               VALUE$
--------------------------------------------------------------------------------
2365777561   open_cursors    400

SYS@orcl(CDB$ROOT)> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PDB                                   MOUNTED

SYS@orcl(CDB$ROOT)> alter pluggable database pdb open;

Pluggable database altered.

SYS@orcl(CDB$ROOT)> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         4 PDB                            READ WRITE NO

删除 PDB_SPFILE$中相关记录,pdb 的参数值会自动继续继承 cdb 中参数值(重启生效)。

SYS@orcl(CDB$ROOT)> alter system set open_cursors=500;

System altered.

SYS@orcl(CDB$ROOT)> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     500
SYS@orcl(CDB$ROOT)> alter session set container=pdb;

Session altered.

SYS@orcl(CDB$ROOT)> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     400

SYS@orcl(CDB$ROOT)> shutdown immediate
Pluggable Database closed.

SYS@orcl(CDB$ROOT)> startup
Pluggable Database opened.

SYS@orcl(CDB$ROOT)> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     400


SYS@orcl(CDB$ROOT)> delete from PDB_SPFILE$;

1 row deleted.

SYS@orcl(CDB$ROOT)> alter session set container=pdb;

Session altered.

SYS@orcl(CDB$ROOT)> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     400

SYS@orcl(CDB$ROOT)> shutdown immediate
Pluggable Database closed.

SYS@orcl(CDB$ROOT)> startup
Pluggable Database opened.

SYS@orcl(CDB$ROOT)> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值