1.说明
2.具体过程
1) 确认源PDB处于读写模式
以LEIPDB为源PDB来克隆。
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 LEIPDB READ WRITE NO
2) 源CDB中创建公共用户
DROP USER c##lei CASCADE;
CREATE USER c##lei IDENTIFIED BY oracle;
GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##lei CONTAINER=ALL;
GRANT CREATE PLUGGABLE DATABASE TO c##lei CONTAINER=ALL;
GRANT SYSOPER TO c##lei CONTAINER=ALL;
3) 源PDB中创建测试表
ALTER SESSION SET CONTAINER = leipdb;
CREATE TABLE cndba(id NUMBER);
INSERT INTO cndba VALUES(1);
COMMIT;
SELECT * FROM cndba;
N1
----------
1
4) 目标CDB中创建公共用户
源CDB和目标CDB中具有相同的公共用户c##lei。
DROP USER c##lei CASCADE;
CREATE USER c##lei IDENTIFIED BY oracle;
GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##lei CONTAINER=ALL;
GRANT CREATE PLUGGABLE DATABASE TO c##lei CONTAINER=ALL;
GRANT SYSOPER TO c##lei CONTAINER=ALL;
5) 目标CDB创建DBLINK
在目标CDB中创建指向源CDB的dblink,用户就用之前创建的c##lei。
配置TNS
LEICDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.179)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = lei)
)
)
创建dblink
CREATE DATABASE LINK leicdb_dblink CONNECT TO c##lei IDENTIFIED BY oracle USING 'leicdb';
验证DBLINK是否正常
SQL> select COUNT(*) from v$version@leicdb_dblink;
COUNT(*)
----------
1
6) 创建手动刷新的PDB
CREATE PLUGGABLE DATABASE leicdb_pdb FROM leipdb@leicdb_dblink
CREATE_FILE_DEST='/u01/app/oracle/oradata/'
REFRESH MODE MANUAL;
7) 刷新leicdb_pdb
刷新之前在目标PDB中插入数据
SQL> INSERT INTO cndba VALUES(2);
SQL> select * from cndba;
ID
----------
1
2
SQL> commit;
刷新PDB
ALTER SESSION SET CONTAINER = leicdb_pdb;
ALTER PLUGGABLE DATABASE REFRESH;
查看新数据是否同步过来
ALTER PLUGGABLE DATABASE leicdb_pdb OPEN READ ONLY;
ALTER SESSION SET CONTAINER = leicdb_pdb;
select * from cndba;
ID
----------
1
2
8) 源CDB创建DBLINK
在源CDB中创建指向目标CDB的dblink,用于switchover操作。
同样,也要配置TNS
LEICDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.178)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = lei)
)
)
创建dblink
CREATE DATABASE LINK leicdb2_dblink CONNECT TO c##lei IDENTIFIED BY oracle USING 'leicdb2';
验证
select COUNT(*) from v$version@leicdb2_dblink;
COUNT(*)
----------
1
9) SWITCHOVER
执行切换操作,和DG switchover很相似切换主备。那么leicdb_pdb就是源PDB,而原来的leipdb就是克隆PDB。
ALTER SESSION SET CONTAINER = leipdb;
ALTER PLUGGABLE DATABASE REFRESH MODE MANUAL FROM leicdb_pdb@leicdb2_dblink SWITCHOVER;
至此就完成了可刷新PDB的在线switchover。
更多内容,请查看官方文档:
https://docs.oracle.com/en/database/oracle/oracle-database/18/multi/administering-pdbs-with-sql-plus.html#GUID-B505C234-FAF4-4BAB-8B59-59276E0EA128
版权声明:本文为博主原创文章,未经博主允许不得转载。
PDB SWITCHOVER