Orace19c-远程克隆PDB

1.简介
​ Oracle数据库新的版本增加新特性,即称为容器数据库,又称可插入数据库或多租户容器数据库;根数据库容器称为CDB;指的是可以容纳一个或者多个可插拔数据库的数据库,这个特性允许在CDB容器数据库中创建并且维护多个数据库,在CDB中创建的数据库被称为PDB,每个PDB在CDB中是相互独立存在的,单独使用PDB时,与普通数据库无任何区别;

​ CDB根容器数据库的主要作用就是容纳所有相关的PDB元数据,以及对所有的PDB进行管理,容器被称为CDB,容器的子数据库为PDB,每一个PDB也可以当成一个新的容器,在其里面创建子数据库。

2.操作步骤
2.1 信息检查
以下将被克隆的数据库,称为源数据库,新建的数据库称为目标数据库;

//查看数据库是否为CDB
select name,cdb,open_mode,con_id from v d a t a b a s e ; / / 查看 C D B 中的 p d b s 及状态 s h o w p d b s ; / / 查看当前容器名称 s h o w c o n n a m e ; / / 切换实例链接,切换为 C D B 时,数据库名称为 C D B database; //查看CDB中的pdbs及状态 show pdbs; //查看当前容器名称 show con_name; //切换实例链接,切换为CDB时,数据库名称为CDB database;//查看CDB中的pdbs及状态showpdbs;//查看当前容器名称showconname;//切换实例链接,切换为CDB时,数据库名称为CDBROOT
alter session set container = upsrdb(数据库名字)
//查看当前登录用户名
show user;
//链接指定的用户
conn 用户名/密码
2.2 克隆条件检查
克隆PDB就是用已经存在的数据库作为模板创建一个结构和数据(可以不复制数据)相同的PDB。复制期间如果想要保持源数据库正常运行,则源数据库必须处于归档模式且本地UNDO模式。
若CDB没有启动local UNDO模式,则源PDB必须以只读模式打开。
若CDB是本地UNDO模式,则可以以读写模式打开。

检查本地undo
select property_name, property_value
from database_properties
where property_name = ‘LOCAL_UNDO_ENABLED’;
//结果为true
PROPERTY_NAME PROPERTY_VALUE


LOCAL_UNDO_ENABLED TRUE
检查归档模式
SQL> archive log list;

Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /opt/oracle/product/19c/dbhome_1/dbs/arch
Oldest online log sequence 1360
Current log sequence 1362

//未自动归档
源与目标端兼容
//查看字符集
select * from nls_database_parameters where parameter=‘NLS_CHARACTERSET’
or parameter=‘NLS_LANGUAGE’ or parameter=‘NLS_NCHAR_CHARACTERSET’;

//查看字节顺序
SELECT d.inst_id, t.platform_id, t.platform_name, t.endian_format, d.name FROM v t r a n s p o r t a b l e p l a t f o r m t , g v transportable_platform t, gv transportableplatformt,gvdatabase
d WHERE t.platform_name = d.platform_name;
2.3更改PDB状态的方法
以下操作,如果CDB没有启动本地UNDO,需要执行。都是在CDB服务下,SYS用户下操作

//先关闭PDB数据库,使其状态为MOUNTED
alter pluggable database upsrdb(PDB名字) close immediate;

//设置为只读
alter pluggable database upsrdb(PDB名字) open read only;

//设置为读写
alter pluggable database upsrdb(PDB名字) open read write;
2.4 在源数据库CDB下创建公共的用户,并且赋予其相应的权限
该操作:应该在CDB服务下,SYS用户下执行

//创建公共用户
create user c##xb(用户名) identified by xb(密码) container=all;
//赋予权限
grant CREATE PLUGGABLE DATABASE to c##xb container=all;
grant create session,connect,resource,cdb_dba,sysoper to c##xb container=all;
grant create any table,unlimited tablespace to c##xb container=all
2.5在目标数据库CDB下创建dblink(数据链)
//创建链接
create public database link to_remote(数据库链接名) connect to c##xb(源数据库用户名) identified by xb(用户密码) using ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP地址)(PORT = 端口))
)
(CONNECT_DATA =
(SERVICE_NAME = 服务名,因为克隆数据库,这里写源CDB名称)
)
)’;

//删除链接
drop public database link to_remote(链接名字);
2.6 在目标数据库CDB下克隆远程PDB数据库
在CDB下创建PDB的条件:

CDB必须存在,且处于读写模式
当前用户必须是公告用户,并且当前的容器必须是CDB root或应用程序容器
当前用户必须有CREATE PLUGGABLED DATABASE权限
PDB名称不能与已存在PDB名称重复等
若有OMF文件托管则执行

create pluggable database upsrdb(目标PDB名称) from upsrdb(源PDB)@to_remote(创建的dblink链接)
若没有启用OMF文件托管,则需要指定FILE_NAME_CONVERT参数

查看源PDB的tempfile文件
select name from v t e m p f i l e ; 查看源 P D B 的 d a t a f i l e 文件 s e l e c t n a m e f r o m v tempfile; 查看源PDB的datafile文件 select name from v tempfile;查看源PDBdatafile文件selectnamefromvdatafile;
则执行的克隆语句为:

其中的文件名称包括tempfile与datafile两个部分文件

create pluggable database upsrdb(目标PDB名称) from upsrdb(源PDB)@to_remote(创建的dblink链接)
FILE_NAME_CONVERT=(‘源数据库文件名称’,‘目标数据库文名称’,‘源数据库文件名称’,‘目标数据库文名称’…);

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南風_入弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值