[2022-04-27] refresh PDB

参考资料:

 About Refreshable Clone PDBs

refresh pdb使用情况如:原PDB所在CDB的主机资源紧张,可以迁走部分PDB减轻主机压力。 或者对PDB做容灾使用等。PDB的刷新可以分两种, 手动刷新和自动刷新。

自动和手动刷新模式
您可以将克隆 PDB 配置为按设定的时间间隔自动刷新,也可以使用ALTER PLUGGABLE DATABASE REFRESH语句手动刷新它。

该REFRESH MODE子句仅在CREATE PLUGGABLE DATABASE ... FROM语句中受支持。您可以使用此子句指定以下选项之一:

指定REFRESH MODE NONE默认值以创建不可刷新的 PDB。

您可以将可刷新的克隆 PDB 更改为普通 PDB,方法是REFRESH MODE NONE在语句中包含该子句,ALTER PLUGGABLE DATABASE然后以读/写模式打开 PDB。您不能将普通 PDB 更改为可刷新的克隆 PDB。可刷新克隆 PDB 转换为普通 PDB 后,您无法将其改回可刷新克隆 PDB。

指定REFRESH MODE MANUAL创建必须手动刷新的可刷新 PDB。

指定创建一个可刷新的 PDB,该 PDB 在指定的分钟数过后自动刷新。使用自动刷新的可刷新 PDB 也可以手动刷新。 REFRESH MODE EVERY number_of_minutes MINUTES

支持三种类型的源端数据库,分别是Local PDB/PDB in a remote CDB/Non-CDB。不管是本地还是远程,都需要创建dblink。

本次测试案例使用同一个CDB,需要使用的PDB为PDB01

SQL> show  pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO
         4 PDB02                          MOUNTED
SQL> 

1、确保PDB01是read write状态

In SQL*Plus, connect to cdb1 as a user with administrator privileges, and then ensure sure that cdb1_pdb1 is open in read/write mode (sample output included):

SQL> show  pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO
         4 PDB02                          MOUNTED
SQL> 

2、创建一个common用户

Create a common user named c##u1 (replace pwd with a user-specified password):

DROP USER c##u1 CASCADE;
CREATE USER c##u1 IDENTIFIED BY pwd;
GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##u1 CONTAINER=ALL;
GRANT CREATE PLUGGABLE DATABASE TO c##u1 CONTAINER=ALL;
GRANT SYSOPER TO c##u1 CONTAINER=ALL;
SQL> CREATE USER c##u1 IDENTIFIED BY tiger;

User created.

SQL> GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##u1 CONTAINER=ALL;

Grant succeeded.

SQL> GRANT CREATE PLUGGABLE DATABASE TO c##u1 CONTAINER=ALL;
GRANT SYSOPER TO c##u1 CONTAINER=ALL;
Grant succeeded.

SQL> 

Grant succeeded.

SQL> 

3、创建PDB01容器的测试数据

Set the container to cdb1_pdb1, and then create a table t1 to use for testing (sample output included):

ALTER SESSION SET CONTAINER = cdb1_pdb1;
CREATE TABLE t1(n1 NUMBER);
INSERT INTO t1 VALUES(1);
COMMIT;
SELECT * FROM t1;

        N1
----------
         1

SQL> ALTER SESSION SET CONTAINER =PDB01;

Session altered.

SQL> create table t1(id int);

Table created.

SQL> insert into t1 values (1);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t1 
  2  ;

        ID
----------
         1

SQL> 

4、连接目标端,创建common用户,由于的源端和目标端是同一个CDB,并且在第二步已经创建common用户,这步就可以忽略

Connect to cdb2 as a user with administrator privileges, and then create the common user named c##u1 (replace pwd with a user-specified password):

CONNECT SYS@cdb2 AS SYSDBA
Enter password: *******

DROP USER c##u1 CASCADE;
CREATE USER c##u1 IDENTIFIED BY pwd;
GRANT CREATE SESSION, RESOURCE, CREATE ANY TABLE, UNLIMITED TABLESPACE TO c##u1 CONTAINER=ALL;
GRANT CREATE PLUGGABLE DATABASE TO c##u1 CONTAINER=ALL;
GRANT SYSOPER TO c##u1 CONTAINER=ALL;

5、创建到源库的DB LINK

Create a database link to cdb1.

The following command specifies user c##u1, password pwd, and service name cdb1:

CREATE DATABASE LINK cdb1_datalink CONNECT TO c##u1 IDENTIFIED BY pwd USING 'cdb1';

配置到PDB01的tns

PDB01 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oracle19cnoadg)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb01)
    )
  )

检查监听

[oracle@oracle19cnoadg ~]$ lsnrctl status

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 27-APR-2022 11:27:36

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle19cnoadg)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                27-APR-2022 11:27:11
Uptime                    0 days 0 hr. 0 min. 25 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/oracle/database/network/admin/listener.ora
Listener Log File         /oracle/app/diag/tnslsnr/oracle19cnoadg/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oracle19cnoadg)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "86b637b62fdf7a65e053f706e80a27ca" has 1 instance(s).
  Instance "prodpdb", status READY, has 1 handler(s) for this service...
Service "dd5eb78e33395714e0531f28a8c07bd2" has 1 instance(s).
  Instance "prodpdb", status READY, has 1 handler(s) for this service...
Service "dd6379106a279583e0531f28a8c06b78" has 1 instance(s).
  Instance "prodpdb", status READY, has 1 handler(s) for this service...
Service "pdb01" has 1 instance(s).
  Instance "prodpdb", status READY, has 1 handler(s) for this service...
Service "pdb02" has 1 instance(s).
  Instance "prodpdb", status READY, has 1 handler(s) for this service...
Service "prodpdb" has 1 instance(s).
  Instance "prodpdb", status READY, has 1 handler(s) for this service...
Service "prodpdbXDB" has 1 instance(s).
  Instance "prodpdb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@oracle19cnoadg ~]$ 

创建DB LINK,并测试连通性

SQL> CREATE DATABASE LINK PDB01 CONNECT TO c##u1 IDENTIFIED BY tiger using 'PDB01';

Database link created.

SQL> 
SQL> select * from dual@PDB01;

D
-
X

SQL> 

6、创建手动模式刷新PDB

Create the manually refreshable PDB named cdb1_pdb1_ref

The following statement specifies the database link cdb1_datalink and the file destination /dsk1/df:

CREATE PLUGGABLE DATABASE cdb1_pdb1_ref FROM cdb1_pdb1@cdb1_datalink 
  CREATE_FILE_DEST='/dsk1/df' 
  REFRESH MODE MANUAL;
SQL> CREATE PLUGGABLE DATABASE REFRESH_PDB FROM pdb01@PDB01 CREATE_FILE_DEST='/oracle/app/oradata/PRODPDB' REFRESH MODE MANUAL;

Pluggable database created.

SQL> 

日志:

CREATE PLUGGABLE DATABASE REFRESH_PDB FROM pdb01@PDB01 CREATE_FILE_DEST='/oracle/app/oradata/PRODPDB' REFRESH MODE MANUAL
2022-04-27T11:33:28.147208+08:00
PDB01(3): AUDSYS.AUD$UNIFIED (SQL_TEXT) - CLOB populated
2022-04-27T11:33:32.713910+08:00
REFRESH_PDB(5):Endian type of dictionary set to little
****************************************************************
Pluggable Database REFRESH_PDB with pdb id - 5 is created as UNUSABLE.
If any errors are encountered before the pdb is marked as NEW,
then the pdb must be dropped
local undo-1, localundoscn-0x0000000000000118
****************************************************************
2022-04-27T11:33:34.805604+08:00
Applying media recovery for pdb-3 from SCN 3451756 to SCN 3451805
Remote log information: count-1
thr-1, seq-33, logfile-/oracle/app/fast_recovery_area/PRODPDB/foreign_archivelog/PDB01/2022_04_27/o1_mf_1_33_2753998305_.arc, los-3413276, nxs-18446744073709551615
REFRESH_PDB(5):Media Recovery Start
2022-04-27T11:33:34.832692+08:00
REFRESH_PDB(5):Serial Media Recovery started
REFRESH_PDB(5):max_pdb is 8
2022-04-27T11:33:35.062703+08:00
REFRESH_PDB(5):Media Recovery Log /oracle/app/fast_recovery_area/PRODPDB/foreign_archivelog/PDB01/2022_04_27/o1_mf_1_33_2753998305_.arc
2022-04-27T11:33:36.287440+08:00
REFRESH_PDB(5):Incomplete Recovery applied until change 3451805 time 04/27/2022 11:33:34
2022-04-27T11:33:36.304641+08:00
REFRESH_PDB(5):Media Recovery Complete (prodpdb)
2022-04-27T11:33:36.448659+08:00
Deleted Oracle managed file /oracle/app/fast_recovery_area/PRODPDB/foreign_archivelog/PDB01/2022_04_27/o1_mf_1_33_2753998305_.arc
Completed: CREATE PLUGGABLE DATABASE REFRESH_PDB FROM pdb01@PDB01 CREATE_FILE_DEST='/oracle/app/oradata/PRODPDB' REFRESH MODE MANUAL

7、刷新PDB

Refresh cdb1_pdb1_ref:

ALTER SESSION SET CONTAINER = cdb1_pdb1_ref;
ALTER PLUGGABLE DATABASE REFRESH;
SQL> ALTER SESSION SET CONTAINER = REFRESH_PDB;

Session altered.

SQL> ALTER PLUGGABLE DATABASE REFRESH;

Pluggable database altered.

SQL> 

8、检查测试表T1的值

Query t1 to check that the refreshable clone PDB contains the correct contents (sample output included):

ALTER PLUGGABLE DATABASE OPEN READ ONLY;
SELECT * FROM t1;

        N1
----------
         1
SQL> ALTER PLUGGABLE DATABASE REFRESH_PDB open read only ;

Pluggable database altered.

SQL> ALTER SESSION SET CONTAINER = REFRESH_PDB;

Session altered.

SQL> show con_name

CON_NAME
------------------------------
REFRESH_PDB
SQL> select * from t1;

        ID
----------
         1

SQL> 

可以通过下面的方式更新刷新方式

alter pluggable database refresh_pdb refresh mode manual;
alter pluggable database refresh_pdb refresh mode every 1 hours;
alter pluggable database refresh_pdb refresh mode every 1 minutes;
alter pluggable database refresh_pdb refresh mode none;

查看PDB的刷新方式

SQL> col pdb_name for a30
SQL> select pdb_name, REFRESH_MODE,REFRESH_INTERVAL from dba_pdbs;

PDB_NAME                       REFRES REFRESH_INTERVAL
------------------------------ ------ ----------------
PDB01                          NONE
PDB$SEED                       NONE
REFRESH_PDB                    MANUAL
PDB02                          NONE

SQL> 
SQL> alter pluggable database refresh_pdb refresh mode every 1 minutes;

Pluggable database altered.

SQL> select pdb_name, REFRESH_MODE,REFRESH_INTERVAL from dba_pdbs;

PDB_NAME                       REFRES REFRESH_INTERVAL
------------------------------ ------ ----------------
PDB01                          NONE
PDB$SEED                       NONE
REFRESH_PDB                    AUTO                  1
PDB02                          NONE

SQL> 

自动刷新的时候提示如下:

2022-04-27T11:43:49.574834+08:00
REFRESH_PDB(5):alter pluggable database refresh
REFRESH_PDB(5):REFRESH_PDB(5):ERROR:PDB needs to be closed for auto refresh
REFRESH_PDB(5):Completed: alter pluggable database refresh

把PDB启动关闭,再次查看日志

REFRESH_PDB(5):alter pluggable database refresh
2022-04-27T11:46:52.850937+08:00
Applying media recovery for pdb-3 from SCN 3452320 to SCN 3452701
Remote log information: count-1
thr-1, seq-33, logfile-/oracle/app/fast_recovery_area/PRODPDB/foreign_archivelog/PDB01/2022_04_27/o1_mf_1_33_2753998305_.arc, los-3413276, nxs-18446744073709551615
REFRESH_PDB(5):Media Recovery Start
2022-04-27T11:46:52.860697+08:00
REFRESH_PDB(5):Serial Media Recovery started
REFRESH_PDB(5):max_pdb is 8
2022-04-27T11:46:52.917859+08:00
REFRESH_PDB(5):Media Recovery Log /oracle/app/fast_recovery_area/PRODPDB/foreign_archivelog/PDB01/2022_04_27/o1_mf_1_33_2753998305_.arc
2022-04-27T11:46:53.254925+08:00
REFRESH_PDB(5):Incomplete Recovery applied until change 3452701 time 04/27/2022 11:46:50
2022-04-27T11:46:53.259891+08:00
REFRESH_PDB(5):Media Recovery Complete (prodpdb)
2022-04-27T11:46:53.453766+08:00
Deleted Oracle managed file /oracle/app/fast_recovery_area/PRODPDB/foreign_archivelog/PDB01/2022_04_27/o1_mf_1_33_2753998305_.arc
REFRESH_PDB(5):Completed: alter pluggable database refresh

验证数据

SQL> alter session set container=REFRESH_PDB;

Session altered.

SQL> alter database open read only;

Database altered.

SQL> 
SQL> select * from t1;

        ID
----------
         1
         2

SQL> 

9、激活PDB为read write模式. (这步也可以和源库PDB做switchover)

SQL> alter pluggable database REFRESH_PDB close immediate instances=all;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO
         4 PDB02                          MOUNTED
         5 REFRESH_PDB                    MOUNTED
SQL>  alter pluggable database REFRESH_PDB refresh mode none;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO
         4 PDB02                          MOUNTED
         5 REFRESH_PDB                    MOUNTED
SQL> col pdb_name for a30
SQL> select pdb_name, REFRESH_MODE,REFRESH_INTERVAL from dba_pdbs;

PDB_NAME                       REFRES REFRESH_INTERVAL
------------------------------ ------ ----------------
PDB01                          NONE
PDB$SEED                       NONE
REFRESH_PDB                    NONE
PDB02                          NONE

SQL> 
SQL> alter pluggable database REFRESH_PDB open read write;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB01                          READ WRITE NO
         4 PDB02                          MOUNTED
         5 REFRESH_PDB                    READ WRITE NO
SQL> alter session set container=REFRESH_PDB;

Session altered.

SQL> select * from t1;

        ID
----------
         1
         2

SQL> 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值