数据库管理-第101期 DG环境下创建PDB的坑(20230908)
本周在X9M上ADG环境主库上做PDB迁移的时候,出现了一个问题,备库在想要启动PDB的时候出现了无法打开的问题,在与SR深入交流之后发现了问题的原因。
1 standbys子句
创建PDB的standbys子句,指定创建PDB时是否在备库创建同一PDB的数据文件,使用方式如下:
create pluggable database xxx ... standbys= ('cdb_name1','cdb_name2',...)|none|all|all except;
standbys子句包含:
- cdb_name: 在指定的备库中创建PDB数据文件。
- none: 不在任何备库中创建PDB数据文件。
- all: 在所有备库中创建PDB数据文件,默认值。(大坑)
- all except: 排除部分备库,在其余备库中创建PDB文件。
在使用none和all except子句中,不在对应备库创建PDB文件不会影响DG整体同步状况,这种配置是控制部分PDB(比如测试PDB)无需灾备同步,备库中PDB不同步数据,仅有元数据展示,因此备库中PDB时无法被open read only的,在switchover后,这个PDB将无法新的主库(原备库)中使用,failover后有丢失对应数据的风险。
2 remote clone
就官方文档来看,一般情况下DG环境中创建PDB是无需关注该子句,因为默认为all。但是,在本周割接后发现备库对应PDB无法打开,出现了以下问题:
SQL> alter pluggable database open read only;
alter pluggable database open read only
*
ERROR at line 1:
ORA-01147: SYSTEM tablespace file xxxx is offline
SQL> select file#,status,name from v$datafile where file#=1716;
FILE# STATUS NAME
---------- ------- --------------------------------------------------------------
XXXX SYSOFF /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/UNNAMED01716
SQL> alter database datafile xxxx online;
alter database datafile xxxx online
*
ERROR at line 1:
ORA-01156: recovery or flashback in progress may need access to files
检查备库数据库日志,发现了以下问题:
Recovery created pluggable database PDB_XXXX