Oracle参数文件详解

178 篇文章 16 订阅
本文详细解释了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

  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 主要配置文件介绍:profile文件,oratab 文件数据库实例初始化文件 initSID.ora,监听配置文件, sqlnet.ora 文件,tnsnames.ora 文件1.2 Oracle 主要配置文件介绍1.2.1 /etc/profile 文件 系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库 相关的环境变量就定义在/etc/profile 文件中 如下所示 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/8.1.7 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export ORACLE_SID=cams export ORACLE_TERM=vt100 export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export NLS_LANG=AMERICAN.ZHS16CGB231280 & 说明 1 配置上述环境变量要注意定义的先后顺序 如 定义 ORACLE_HOME 时 用 到 了 ORACLE_BASE 那 么 ORACLE_HOME 的 定 义 应 该 在 ORACLE_BASE之后 2 在使用中文版 CAMS 时 环境变量 NLS_LANG 的值应该设置为 AMERICAN.ZHS16CGB231280 如上所示 在使用英文版 CAMS时 可 以不设置 NLS_LANG 即去掉 export NLS_LANG=... ... 那一行 也可以 设置 NLS_LANG 的值为 AMERICAN_AMERICA.US7ASCII1.2.2 /etc/oratab 文件 /etc/oratab 文件描述目前系统中创建的数据库实例 以及是否通过 dbstart 和 dbshut 来控制该实例的启动与关闭 如下所示 忽略以#开头的注释部分 : cams:/u01/app/oracle/product/8.1.7:Y 其中 cams 为实例 ID /u01/app/oracle/product/8.1.7为 ORACLE_HOME目 录 Y表示允许使用 dbstart和 dbshut 启动和关闭该实例数据库 如果设置为 N 表示不通过 dbstart 和 dbshut 启动和关闭实例数据库 CAMS 系统要求在 安装完 ORACLE 后要求将该参数修改为 Y 以保证 ORACLE 数据库自启动 和关闭 1.2.3 数据库实例初始化文件 initSID.ora 每个数据库实例都有一个初始化 参数文件 其缺省 存放的路径为 $ORACLE_BASE/admin//pfile 其名称为 init.ora 如 cams 实 例 对 应 的 参 数 文 件 为 initcams.ora 缺 省 存 放 路 径 为 $ORACLE_BASE/admin/cams/pfile 即/u01/app/oracle/admin/cams/pfile

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值