基础知识单薄的同学,请逐字逐句阅读以下概念,来自于博客园AskScuti

预备知识什么是参数文件、存放位置、参数文件的分类和参数文件的命名方式、参数文件如何创建、参数文件加载顺序、参数分类、参数修改级别、参数修改scope选项。

《跟我记-AskScuti:8句话让你彻底搞定参数文件及参数》:Oracle中有很多晦涩难懂的理论,无法通过比较严谨的方式把知识点以白话呈现,以下理论知识点术语可能不够严谨,但可以帮助你理解和记忆,至少是正确的,以下8条,最好全部背下来,一遍不行,来十遍,十遍不行,来一百遍,没废话。

1. 参数文件是数据库启动过程中,第一步( 第一阶段 nomount )要加载的文件(请回顾startup启动的三个阶段:nomount 阶段:加载参数文件 / mount 阶段:加载控制文件 / open 阶段:打开数据文件和日志文件),目的就是为了根据参数文件里面定义的参数值开辟SGA和后台进程(就是实例,回顾实例包含哪两个部分?分别是什么?实例包含两个部分,分别是:SGA和一系列后台进程),并为数据库启动到第二阶段 mount 状态做好准备(因为参数文件里面定义了控制文件的路径,而控制文件里面有指定了数据文件和日志文件的路径,就为第三阶段 open 打开数据库奠定了基础)。

2. 参数文件存放的具体路径位置为(Linux):$ORACLE_HOME/dbs/目录下,完整路径(根据实际情况来):/u01/app/oracle/product/11.2.0/dbhome_1/dbs/

3. 参数文件分为两大类:静态参数文件、动态参数文件;静态参数文件,我们称之为PFILE、动态参数文件我们称之为SPFILE(Server Parameter File);静态参数文件PFILE的命名方式为 init<SID>.ora(比如 initPROD1.ora)、动态参数文件SPFILE的命名方式为 spfile<SID>.ora(比如 spfilePROD1.ora)。注意:基础不好的同学,第3条读10遍,抄10遍,背下来,因为这条很重要!最后,我们是以11g版本及之后版本来讲解,且是单实例,所以在此,我们不去讨论 init.ora 这个静态模板参数文件,因为它对我们来说,没用。

4. 静态参数文件 init<SID>.ora 为文本文件,可以采用系统命令查看和修改,动态参数文件 spfile<SID>.ora 为二进制文件,无法通过系统命令查看和修改;他们两者可以通过对方进行互相创建,也可以通过内存memory进行创建。

例如:

通过静态参数文件pfile创建动态参数文件spfile:create spfile from pfile;

通过动态参数文件spfile创建静态参数文件pfile:create pfile from spfile;

通过内存memory创建动态参数文件spfile:create spfile from memory;

通过内存memory创建静态参数文件pfile:create pfile from memory;

5. 最后,请记好,在11g单实例中,数据库启动寻找参数文件的顺序为 :先找动态参数文件 spfile<SID>.ora,如果找不到,自动去找静态参数文件 init<SID>.ora,如果还没找到,报错!听好,没有第三条路!12c 版本中的CDB依然按照这个路子走。

由于我们本篇内容是介绍12c参数更改的影响,对于以上5条参数文件的相关证明,我将在其它博文进行介绍,之后博文链接在此处更新。

上面5条说的是参数文件,而接下来这3条,说的是参数文件里面的参数分类、参数修改级别和参数修改的SCOPE选项,同等重要。

6. 我先说一句错的,看好,这句话是错的:X静态参数文件里面存的都是静态参数,而动态参数文件里面存的是动态参数X。正确的应该是:不管是动态参数文件还是静态参数文件,里面存的内容一致,只是存储方式不同而已,换句话说,不管是什么类型的参数文件,里面存的都有动态参数和静态参数,动态参数可以在内存和spfile文件中修改,而静态参数无法在内存中修改,只能在spfile文件中修改。

7. 参数修改级别分为两类:系统级 system 和会话级 session ,可以通过动态性能视图(动态数据字典)v$parameter 的两个字段 isses_modifiable 和 issys_modifiable 来确定哪些参数可以在系统级修改,哪些参数可以在会话级修改。

8. 参数修改scope选项一共有3个:scope=both(默认值,可以不带)表示同时在内存 memory 和 spfile 文件中修改,实时生效,重启也生效;scope=spfile 表示当前内存 memory 里不修改,只在 spfile 文件中修改,必须重启才能生效;scope=memory 表示只在当前内存 memory 里修改,spfile 文件中不修改,实时生效,重启失效。

由于我们本篇内容是介绍12c参数更改的影响,对于以上3条参数的相关证明,我将在其它博文进行介绍,之后博文链接在此处更新。

9. 可记可不记,小技巧而已,对于有些同学纠结于到底哪些参数是静态参数?哪些是动态参数?没必要去记,实际工作过程中,修改某个参数,直接不带scope选项,如果报错,说明该参数为静态参数,否则为动态参数。你,反应过来了吗?如果不明白,请参考上面第6条和第8条。

目录

1. CDB级别与PDB级别共用一个SPFILE文件

  1.1 CDB级别使用的参数文件

  1.2 PDB级别使用的参数文件

2. CDB级别修改参数是否影响到PDB级别?

  2.1 CDB级别修改某参数

  2.2 PDB级别查看参数值

3. PDB级别修改参数是否影响到CDB级别?

  3.1 PDB级别修改参数

  3.2 CDB级别查看参数

4. CDB级别与PDB级别总结说明

1. CDB级别与PDB级别共用一个SPFILE文件

1.1 CDB级别使用的参数文件

SQL> show pdbs

  CON_ID   CON_NAME  OPEN MODE  RESTRICTED
---------- ------------ ---------- ----------
2     PDB$SEED READ ONLY   NO
3     PDBPROD1 READ WRITE   NO
4     HRPDB   READ WRITE   NO
5     SALESPDB READ WRITE   NO
SQL> show parameter spfile NAME TYPE VALUE
------ -------- -------------------------------------------------------
spfile string /u01/app/oracle/product/12.2.0/db_1/dbs/spfilePROD1.ora

一个CDB使用一个SPFILE动态参数文件,具体路径在$ORACLE_HOME下的dbs目录下。

1.2 PDB级别使用的参数文件

SQL> alter session set container=pdbprod1;

Session altered.

SQL> show parameter spfile
NAME   TYPE     VALUE
------ -------- -------------------------------------------------------
spfile string /u01/app/oracle/product/12.2.0/db_1/dbs/spfilePROD1.ora

可以看到,在PDB级别使用的也是一样的SPFILE,PDB级别所有数据库默认继承CDB级别的参数

2. CDB级别修改参数是否影响到PDB级别?

2.1 CDB级别修改某参数

SQL> alter session set container=cdb$root;

Session altered.

SQL> alter system set undo_retention=1000 container=all scope=both;

System altered.

注意语句中的 container=all scope=both ,这是默认值,可以不带。就是将CDB级别中的 undo_retention 参数值更改为1000,并作用于所有PDB(继承),且即时生效(Memory),重启(Spfile)也生效。

2.2 PDB级别查看参数值

SQL> alter session set container=hrpdb;

Session altered.

SQL> show parameter undo_retention

NAME           TYPE     VALUE
-------------- -------- -----
undo_retention integer 1000

切换到HRPDB数据库中,发现参数值也跟着更改了,因为是继承CDB参数值,所以,CDB级别更改参数会影响到PDB级别(什么时候不影响,在后面)。

3. PDB级别修改参数是否影响到CDB级别?

3.1 PDB级别修改参数

SQL> alter session set container=hrpdb;

Session altered.

SQL> show con_name

CON_NAME
--------
HRPDB
SQL> alter system set undo_retention=2000; System altered. SQL> show parameter undo NAME TYPE VALUE
----------------- -------- --------
temp_undo_enabled boolean TRUE
undo_management string AUTO
undo_retention integer 2000
undo_tablespace string UNDOTBS1

切换到HRPDB数据库中,单独修改参数undo保留时间为 2000 秒,再次查看。然后切回到CDB级别,查看是否会有影响。

3.2 CDB级别查看参数

SQL> alter session set container=cdb$root;

Session altered.

SQL> show parameter undo

NAME              TYPE     VALUE
----------------- -------- --------
temp_undo_enabled boolean TRUE
undo_management string AUTO
undo_retention integer 1000
undo_tablespace string UNDOTBS1

切换到CDB发现参数没有改变,依然是 1000,所以,单独修改某PDB参数,不会影响到CDB级别及其它PDB

4. CDB级别与PDB级别总结说明

请思考:目前的情况是CDB级别及其它PDB(除了HRPDB)参数值为 1000,HRPDB为2000,如果重启HRPDB,参数是否会失效?

SQL> alter pluggable database hrpdb close immediate;

Pluggable database altered.

SQL> alter pluggable database hrpdb open;

Pluggable database altered.

SQL> show pdbs

   CON_ID   CON_NAME OPEN MODE  RESTRICTED
----------  --------- ---------- ----------
2      PDB$SEED READ ONLY   NO
3      PDBPROD1 READ WRITE   NO
4      HRPDB READ WRITE   NO
5      SALESPDB READ WRITE   NO SQL> alter session set container=hrpdb; Session altered. SQL> show parameter undo NAME TYPE VALUE
----------------- -------- --------
temp_undo_enabled boolean TRUE
undo_management string AUTO
undo_retention integer 2000
undo_tablespace string UNDOTBS1

重启HRPDB后,参数没有失效(因为在3.1中修改语句没有scope选项,所以默认就是both),但PDB是继承CDB中的参数,CDB参数值为 1000,它是如何保证参数的独立特殊性?引出系统表 pdb_spfile$

需要说明的是,这个 pdb_spfile$ 系统表在CDB和PDB级别都存在,但是针对PDB所做的独立特殊性更改(scope=both 或 scope=spfile),都会写入到CDB级别的 pdb_spfile$ 系统表中(PDB级别的 pdb_spfile$ 没用),如果 scope 选项为 memory,则PDB在重启后参数失效,也不会写入 CDB 级别的 pdb_spfile$ 系统表中(和11g一样)。

SQL> alter session set container=cdb$root;

Session altered.

SQL> select pdb_uid,sid,name,comment$,value$ from pdb_spfile$; 

     PDB_UID SID NAME           COMMENT$ VALUE$
------------ --- -------------- -------- ----------
1104103499 * undo_retention 2000

通过 CDB 级别的 pdb_spfile$ 看到,保存着 PDB_UID 为 1104103499 的数据库更改的参数值,可以和 v$pdbs 动态数据字典相关联,查出具体的数据库。

SQL> select a.pdb_uid,b.name,a.sid,a.name,a.comment$,a.value$ 
from pdb_spfile$ a
left join
v$pdbs b on a.pdb_uid=b.dbid; PDB_UID NAME SID NAME COMMENT$ VALUE$
------------ ----- ---- -------------- -------- ------
1104103499 HRPDB * undo_retention 2000

也就是说,如果 pdb_spfile$ 系统表中存在着某些 PDB 独有的参数,那么 PDB 优先参照 pdb_spfile$ 的参数(不会再去继承CDB级别参数),如果将表清空,则 PDB 自动继承 CDB 级别的参数。

SQL> delete from pdb_spfile$;

1 row deleted.

SQL> commit;

Commit complete.

SQL> alter pluggable database hrpdb close immediate;

Pluggable database altered.

SQL> alter pluggable database hrpdb open;

Pluggable database altered.

SQL> alter session set container=hrpdb;

Session altered.

SQL> show parameter undo

NAME              TYPE     VALUE
----------------- -------- --------
temp_undo_enabled boolean TRUE
undo_management string AUTO
undo_retention integer 1000
undo_tablespace string UNDOTBS1

最后,PDB级别中从哪些参数可以被修改,是有规则的,要根据动态性能视图(数据字典) v$parameter 中的列 ispdb_modifiable 是否为 true 而定(列值为 true 的,才能在 PDB 级别进行特殊性修改)。

SQL> select name,ispdb_modifiable from v$parameter where name like '%undo%';

NAME              ISPDB_MODIFIABLE
----------------- ----------------
temp_undo_enabled TRUE
undo_management TRUE
undo_tablespace TRUE
undo_retention TRUE

Oracle 12c中CDB与PDB实例参数更改影响实验的更多相关文章

  1. 转 Oracle 12C 之 CDB/PDB用户的创建与对象管理

    在Oracle 12C中,账号分为两种,一种是公用账号,一种是本地账号(亦可理解为私有账号).共有账号是指在CDB下创建,并在全部PDB中生效的账号,另一种是在PDB中创建的账号. 针对这两种账号的测 ...

  2. Oracle 12c中新建pdb用户登录问题分析

    Oracle 12c新建用户登录问题分析1 用sys用户新建用户,提示公用用户名或角色名无效.原因:Oracle 12c中,在容器中建用户(或者应该称为使用者),须在用户名前加c##.默认登录连接的就 ...

  3. 转 12C 连接CDB和PDB

    来源:David Dai -- Focus on Oracle 连接到CDB 和普通实例一样的连接. 指定ORACLE_SID 以后可以使用OS认证,也可以使用密码进行连接. [oracle@Ora1 ...

  4. 浅析Oracle 12c中Data Guard新特性

    浅析Oracle 12c中Data Guard新特性   写在前面 无论是做Oracle运维的小伙伴还是老伙伴,想必对Oracle数据库的数据级灾备核心技术—Data Guard是再熟悉不过了!这项从 ...

  5. oracle 12c 中asm元数据是否有所变化

    详见原文博客链接地址: oracle 12c 中asm元数据是否有所变化

  6. Oracle 12C 新特性之 PDB热克隆(本地克隆、远端异机克隆)

    说明:版本12.2.0.1 12c r1版本中 clone 一份PDB源库需要打开在read only只读模式 , 在12c r2版本中引入了local undo mode, 源PDB在read/wr ...

  7. Oracle 12c 新特性之 PDB 级别闪回数据库

    在Oracle Database 12.1中,闪回数据库操作仅限于 CDB ,Oracle Database 12.2支持 CDB 与 PDB 数据库的闪回. PDB 的还原点种类:1. normal ...

  8. 12c debug 转 12C 连接CDB和PDB

    来源:David Dai -- Focus on Oracle 连接到CDB 12c debug 和普通实例一样的连接. 指定ORACLE_SID 以后可以使用OS认证,也可以使用密码进行连接. [o ...

  9. 在Oracle 12C中使用scott账号

    在Oracle11g中默认是有scott账号的,但在Oracle 12C中则不能直接使用. 我的机器环境: 操作系统:Windows Server 2008 R2 64位 Oracle版本:Oracl ...

随机推荐

  1. STM32之RGB灯仿真

    实验目的 点灯是练习GPIO输出的最佳实验.由于疫情期间没法返校,手头上没有现成的实验板,于是借助Proteus进行仿真.本实验点的不是普通的灯,而是RGB混色灯,实现多种颜色的显示.后期还可以加上P ...

  2. Codeforces Round 450 D 隔板法+容斥

    题意: Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers ...

  3. [Contract] Solidity 遍历 mapping 的一种方式

    思路:为需要遍历的 mapping 再准备一个 list,之后通过 for 循环遍历 list 取得 mapping 的 key. mapping (address => uint) users ...

  4. fastJson&edis

    fastJson&redis 1. fastJson 1.1 依赖 <dependency> <groupId>com.alibaba</groupId> ...

  5. idea websorm 激活码(2020-1-6 实测可用)最新

      2019年1月6日用 ZSI6IiIsImFzc2lnbmVlRW1haWwiOiIiLCJsaWNlbnNlUmVzdHJpY3Rpb24iOiIiLCJjaGVja0NvbmN1cnJlbnR ...

  6. ES6中map数据结构

    key值可以任意值或对象,value值可以是任意值或对象 let json={ name:'eternity', skill:'java' }; let map=new Map(); map.set( ...

  7. git本地创建多个分支互不干扰

    git本地创建多个分支,互不干扰. 情景:在做某个需求a时,先需要修改紧急bug b:发版时发的是远程dev的代码.   方式一(推荐): (1)本地已有分支dev,写了需求a,先commit,即将工 ...

  8. 【python基础语法】第7天作业练习题

    import keyword ''' # 第一题:简单题 1.什么是全局变量? 2.什么是局部变量? 3.函数内部如何修改全局变量(如何声明全局变量 )? 4.写出已经学过的所有python关键字,分 ...

  9. windows服务踩的坑

    最近写了一个windows服务 有一些bug最后终于解决了还是写点经验把. 第一点.版本问题,因为是小白,第一次写windows服务,选择的是.net4.6.1的目标框架,因为我的电脑是windows ...

  10. JavaSE学习笔记(14)---File类和IO流(字节流和字符流)

    JavaSE学习笔记(14)---File类和IO流(字节流和字符流) File类 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方 ...