DATAGUARD之五:CDB/PDB环境下的dataguard的不同之处

一,CDB环境创建物理备库

多租户架构的CDB的DG的创建过程跟普通的数据库是一样的,只不过有些地方需要注意一下:

1,当你执行SWITCHOVER或者FAILOVER操作的时候,会对整个CDB进行转换。如果你在备库使用了ENABLED_PDBS_ON_STANDBY,那么需要注意的是,可能不是每一个PDB都同时存在于主库和备库。

ENABLED_PDBS_ON_STANDBY
这个参数指定了哪些PDB会同步到备库中,该参数只在备库生效
如果没有指定的话,默认值为*,也就是每一个主库的PDB都会同步到备库
注意,不同备库该参数都可以独立设置,也就是说,可能某个PDB会在备库A中,但不在备库B中
RAC中所有实例应该使用同样的值

2,数据库的角色(DATABASE_ROLE)是在CDB级别定义的,而不是每一个单独的容器

3,任何跟角色转换相关的DDL语句都应该在root容器执行,因为这些操作需要影响整个CDB。

4,CDB的物理备库的大多数SQL的语法跟非CDB的数据库是一样的,除了以下的这些语句可能有些不同:

--ALTER DATABASE RECOVER MANAGED STANDBY只能在ROOT执行

--ROLE是关于整个CDB的,不是单个PDB的,因此,以下的角色转换语句是对整个CDB生效的
ALTER DATABASE SWITCHOVER TO target_db_name;
ALTER DATABASE ACTIVE PHYSICAL STANDBY;

5,如果在备库你已经打开了root容器,ALTER PLUGGABLE DATABASE [open|close]也是支持的

6,备库不支持ALTER PLUGGABLE DATABASE RECOVER,STANDBY的RECOVER总是CDB LEVEL的

7,要管理整个多租户环境,你必须拥有CDB_DBA角色

8,ORACLE建议备库使用自己的keystore

9,   在一个多租户环境,重做日志必须传递到备库的root容器

--如何判断重做日志是被传递到root容器
--假设以下是你主库传递到备库的归档路径的配置
LOG_ARCHIVE_DEST_2='SERVICE=boston ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston'

--它会传递到备库的boston服务
--root容器的CON_ID一直都是1,所以你必须要确定boston服务的CON_ID是1
--检查tnsnames.ora里面的配置
boston = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=boston-server)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=boston.us.example.com))

--根据上面的service_name,到备库里面查询v$cdb_services
SELECT NAME, CON_ID FROM CDB_SERVICES;

二,在主库创建PDB

1,在12.1的时候,你创建PDB的时候只能够指定这个PDB在所有的备库创建和同步(ALL),或者不在任何一个备库创建(NONE)。到了12.2的时候,你可以指定某些PDB被复制到某一个物理备库,不需要指定所有的PDBs都被复制。可以使用ENABLED_PDBS_ON_STANDBY初始化参数,或者在使用CREATE PLUGGABLE DATABASE的时候添加STANDBYS条件。那些没有在备库ENABLED的PDB,可以保持disable状态,或者等到所有要求的文件在备库CDB可用的时候再ENABLE。

2,ENABLED_PDBS_ON_STANDBY只在备库起作用,主库也可以设置,不过会被忽略,但可以在切换后生效。如果该参数没有设置,则表示所有。

3,在创建新的PDB的时候,如果你想指定它在哪些备库生效,可以使用STANDBYS子句:

create pluggable database … STANDBYS={('cdb_name', 'cdb_name', ...) | NONE | ALL [EXCEPT ('cdb_name', 'cdb_name', ...)]}

--第一个选项的cdb_name是物理备库的DB_UNIQUE_NAME,表示哪些备库要启用
--NONE表示把正在创建的PDB从所有备库中排除,PDB的数据文件会处于OFFLINE状态,并且在所有备库标记为unnamed。在这之后新创建的备库CDB必须禁止该PDB的恢复,将其从PDB中显式排除。在这之后仍然可以把它从新启用
--默认为ALL,包含在所有备库CDB中
--EXCEPT,表示在排除之外的所有备库中启用

小括号和单引号是必须的。

4,通过从其他PDB或者种子PDB进行本地clone的方式创建PDB,要把属于源PDB的数据文件拷贝到备库中。(对于ORACLE ADG来说这一步不是必须的,当PDB在备库被创建的时候,会自动拷贝数据文件)。通过远程复制的方式,从其他CDB拷贝PDB到主库,根据MOS 2049127.1进行操作

5,从XML文件来创建PDB,要把XML相关的数据文件拷贝到备库。如果你的备库是以ADG的方式open read-only,那么把插入到主库的同样的PDBs的数据文件拷贝到备库。为了最小化备库管理恢复以及会话的中断,你应该在主库插入之前,把数据文件拷贝到备库。确保拷贝到正确的路径,以防managed standby recover发现不了。

--如果数据文件放在标准的操作系统的文件系统中,那么在备库的路径则依托于DB_FILE_NAME_CONVERT参数
--如果数据文件放在ASM中,那么使用ASMCMD命令把文件拷贝到以下路径:
<db_create_file_dest>/<db_unique_name>/<GUID>/datafile

--GUID参数是PDB的全局唯一识别码,一旦被授予了就不会再改变。可以在主库查询v$containers来获取这一值:
SELECT GUID FROM V$CONTAINERS WHERE CON_ID=3--GUID
--D98C12257A951FC4E043B623F00A7AF5

--假设ASM group是+DATAFILE,db_unique_name是BOSTON,则路径是:
+DATAFILE/BOSTON/D98C12257A951FC4E043B623F00A7AF5/datafile

路径名字必须和主库创建的PDB一致,除非备库中配置了DB_FILE_NAME_CONVERT参数

 

posted @ 2019-11-23 14:55  Ryan_Wo  阅读(2412)  评论(0)    收藏  举报