m6米乐安卓版下载-米乐app官网下载

【译】使用 oracle 21c 管理可刷新克隆可插拔数据库 -m6米乐安卓版下载

smiling 2022-05-28
464

原文链接:https://blog.dbi-services.com/managing-refreshable-clone-pluggable-databases-with-oracle-21c/
原文作者:by mouhamadou diaw

可刷新的克隆 pdb 是一种刷新单个 pdb 的方法,而不是像在 data guard 环境中那样刷新容器中的所有 pdb。它包括对源 pdb 进行克隆,并使用自上次应用重做日志以来累积的重做更新克隆 pdb。
在这个博客中,我做了一些关于可刷新可插拔数据库特性的测试。
我正在使用 oracle 21c 进行测试,但此功能自 oracle 12.2 以来就存在。

我在下面使用的配置

一个 oracle 21c 源 cdb:带有源可插入数据库 pdb1的 db21
一个 oracle 21c 目标 cdb:test21,它将包含 pdb1 的可刷新克隆。克隆将命名为 pdb1fres

请注意,可刷新克隆可以在同一个容器中创建。

第一步是在源cdb db21中创建一个用于数据库链接的用户

sql> create user c##clone_user identified by rootroot2016 temporary tablespace temp container=all;
 
user created.
 
sql>
 
sql> grant create session, create pluggable database, sysoper to c##clone_user container=all ;
 
grant succeeded.
sql>

在目标cdb test21中,让我们创建一个到源cdb的database link。 我们将使用用户c##克隆

sql> create database link clonesource connect to c##clone_user identified by rootroot2016 using 'db21';
 
database link created.
 
sql>
 
sql> select * from dual@clonesource;
 
d
-
x
 
sql>

现在,我们可以在数据库test21中创建pdb1的可刷新克隆pdb1fres。

首先,我们将创建一个手动可刷新克隆

sql> create pluggable database pdb1fres from pdb1@clonesource refresh mode manual;
 
pluggable database created.
 
sql>

创建后,新克隆的database是mounted状态

sql> show pdbs;
 
    con_id con_name                       open mode  restricted
---------- ------------------------------ ---------- ----------
         2 pdb$seed                       read only  no
         3 pdb1fres                       mounted
sql>

我们可以看到刷新模式

sql> select pdb_name,refresh_mode,refresh_interval,last_refresh_scn from dba_pdbs where pdb_name='pdb1fres';
 
pdb_name        refres refresh_interval last_refresh_scn
--------------- ------ ---------------- ----------------
pdb1fres        manual                          39266271
 
sql>

好了,现在让我们对pdb1做一些更改,看看如何在pdb1fres上传这些更改

sql> show con_name
 
con_name
------------------------------
pdb1
 
sql> create table test(id number);
 
table created.
 
sql> insert into test values (1);
 
1 row created.
 
sql> commit;
 
commit complete.
 
sql>

必须关闭(mounted)pdb1fres,以便对pdb1中的更改进行刷新。 由于在创建过程中使用了子句refresh manual,所以我们必须手动执行刷新

sql> show con_name
 
con_name
------------------------------
cdb$root
 
sql> alter pluggable database pdb1fres refresh;
 
pluggable database altered.
 
sql>

现在,我们以只读模式打开pdb1fres,以验证刷新

sql> alter pluggable database pdb1fres open read only;
 
sql> show pdbs;
 
    con_id con_name                       open mode  restricted
---------- ------------------------------ ---------- ----------
         2 pdb$seed                       read only  no
         3 pdb1fres                       mounted
sql> alter pluggable database pdb1fres open read only;
 
pluggable database altered.
 
sql> show pdbs;
 
    con_id con_name                       open mode  restricted
---------- ------------------------------ ---------- ----------
         2 pdb$seed                       read only  no
         3 pdb1fres                       read only  no
sql> alter session set container=pdb1fres;
 
session altered.
 
sql> select * from test;
 
        id
----------
         1
 
sql>
 
sql> alter pluggable database pdb1fres close immediate;
 
pluggable database altered.

可以看到,手动刷新工作正常。

我们可以把手动刷新模式改成自动刷新模式吗?

让我们试试看.

sql> alter pluggable database pdb1fres  refresh mode every 4 minutes;
 
pluggable database altered.
 
sql> select pdb_name,refresh_mode,refresh_interval,last_refresh_scn from dba_pdbs where pdb_name='pdb1fres';
 
pdb_name        refres refresh_interval last_refresh_scn
--------------- ------ ---------------- ----------------
pdb1fres        auto                  4         39272240
 
sql>

现在让我们再次对pdb1进行一些更改

sql> insert into test values (10);
 
1 row created.
 
sql> insert into test values (20);
 
1 row created.
 
sql> commit;
 
commit complete.
 
sql>

4分钟后,我们可以看到pdb1fres上最后一个last_refresh_scn发生了更改

sql> select pdb_name,refresh_mode,refresh_interval,last_refresh_scn from dba_pdbs where pdb_name='pdb1fres';
 
pdb_name        refres refresh_interval last_refresh_scn
--------------- ------ ---------------- ----------------
pdb1fres        auto                  4         39272403
 
sql>

让我们以只读模式打开pdb1fres,并验证是否复制了最新的更改

sql> show pdbs;
 
    con_id con_name                       open mode  restricted
---------- ------------------------------ ---------- ----------
         2 pdb$seed                       read only  no
         3 pdb1fres                       read only  no
 
sql> alter session set container=pdb1fres ;
 
session altered.
 
sql> select * from test;
 
        id
----------
         1
        10
        20
 
sql>

注意,pdb克隆只有mounted,自动刷新才会成功。 还要注意,即使配置了自动刷新,也可以执行手动刷新。
另一个问题可能是,我们是否可以以读写模式打开pdb1fres。
让我们试试看

sql> alter pluggable database pdb1fres open read write;
 
pluggable database altered.
 
sql> show pdbs;
 
    con_id con_name                       open mode  restricted
---------- ------------------------------ ---------- ----------
         2 pdb$seed                       read only  no
         3 pdb1fres                       read only  no
sql>

什么? open read write命令返回success,但数据库在只读模式下是真正的openend。
要以读写模式打开数据库,必须将刷新模式设置为none。

sql> alter pluggable database pdb1fres  refresh mode none;
alter pluggable database pdb1fres  refresh mode none
*
error at line 1:
ora-65025: pluggable database pdb1fres is not closed on all instances.
 
 
sql> alter pluggable database pdb1fres  close immediate;
 
pluggable database altered.
 
sql> alter pluggable database pdb1fres  refresh mode none;
 
pluggable database altered.
 
sql> col pdb_name for a15
sql> select pdb_name,refresh_mode,refresh_interval,last_refresh_scn from dba_pdbs where pdb_name='pdb1fres';
 
pdb_name        refres refresh_interval last_refresh_scn
--------------- ------ ---------------- ----------------
pdb1fres        none                            39272683
 
sql> alter pluggable database pdb1fres open read write;
 
pluggable database altered.
 
sql> show pdbs;
 
    con_id con_name                       open mode  restricted
---------- ------------------------------ ---------- ----------
         2 pdb$seed                       read only  no
         3 pdb1fres                       read write no
sql>

现在pdb1fres已以读写模式打开,让我们关闭它,并尝试以可刷新克隆的方式再次转换它

sql> alter pluggable database pdb1fres close immediate;
 
pluggable database altered.
 
sql> show pdbs
 
    con_id con_name                       open mode  restricted
---------- ------------------------------ ---------- ----------
         2 pdb$seed                       read only  no
         3 pdb1fres                       mounted
sql> alter pluggable database pdb1fres  refresh mode manual;
alter pluggable database pdb1fres  refresh mode manual
*
error at line 1:
ora-65261: pluggable database pdb1fres not enabled for refresh
 
sql>

无法将打开的 r/w pdb 转换回可刷新的 pdb。文档中明确指定了
您不能将普通 pdb 更改为可刷新的克隆 pdb。可刷新克隆 pdb 转换为普通 pdb 后,您无法将其改回可刷新克隆 pdb。

结论
可刷新 pdb 的一种用法是克隆可用作 pdb 级别快照的黄金主控。这些快照可用于开发人员的克隆环境。

「喜欢文章,快来给作者赞赏墨值吧」
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

网站地图