多租户:在Oracle12.2中 从Non-CDB迁移到PDB,从PDB迁移另一个CDB中

1、从PDB或者Non-CDB迁移到另一个CDB的PDB准备

从PDB或者Non-CDB迁移到CDB容器数据库中PDB,由于PDB和Non-CDB迁移到CDB的步骤几乎相同,PDB和Non-CDB迁移非常相似,共同进行处理。
准备:
CDB1:目标pdb数据库的容器数据库
db12c: 需要迁移的Non-CDB
CDB3: 需要迁移pbd的容器数据库

2、在Oracle DB12C克隆远程PDB或者Non-CDB
--注:local代表目的或者目标CDB端,remote代表PBD或者Non-CDB 的源端。
**--2.1克隆的步骤**
/*
1、在目标端跟容器中,必须拥有CREATE PLUGGABLE DATABASE的权限。
2、源端数据库 (PDB or non-CDB)必须开启read-only模式。
3、目标端数据库须有一个database link链接源端数据库,如果是PBD,database link使用普通用户指向源端CDB或者PDB用目标端或普通用户
4、源数据库的database link用户必须拥有CREATE PLUGGABLE DATABASE权限。
5、目标数据库和源数据库必须拥有相同的安装选项和字符集;
6、克隆前必须配置TDE;
7、目标端CDB中必须存在源端的默认表空间。如果不存在,新的PDB只能用restricted 模式打开。
8、克隆Non-CDB时,源端和目标端的数据库必须使用12.1.0.2以上版本。
*/

2.2 克隆Remote PDB
--1.设置环境

export ORAENV_ASK=NO
export ORACLE_SID=cdb3
. oraenv
export ORAENV_ASK=YES
sqlplus / as sysdba

--2.在remote端创建用户,用于db_link

alter session set container=pdb5;
create user remote_clone_user identified by remote_clone_user;
grant create session,create pluggable database to remote_clone_user;

--3.在remote端的PDB中打开read only模式

conn / as sysdba
alter pluggable database pdb5 close;
alter pluggable database pdb5 open read only;
exit;

--4.在local端的“tnsnames.ora”中添加本地链接名称,供db_link使用

PDB5 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.81)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = pdb5)
    )
  )

--5.连接local端开始克隆

export ORAENV_ASK=NO
export ORACLE_SID=cdb1
. oraenv
export ORAENV_ASK=YES
sqlplus / as sysdba

--6.在local端创建数据库连接

drop database link clone_link;
create database link clone_link connect to remote_clone_user identified by remote_clone_user using 'pdb5';

--测试连接

desc [email protected]_link;

--7.在local端数据库创建新的PDB

create pluggable database pdb5new from [email protected]_link;

--8、查看新的PDB和其状态

select name,open_mode from v$pdbS where name='PDB5NEW';

--9、以read-write模式打开PDB

alter pluggable database pdb5new open;
select name,open_mode from v$pdbs where name ='PDB5NEW';

**--2.3 克隆Non-CDB**
--1.设置环境

export ORAENV_ASK=NO
export ORACLE_SID=db12c
. oraenv
export ORAENV_ASK=YES
sqlplus / as sysdba

--2.在remote端创建用户,用于db_link

create user remote_clone_user identified by remote_clone_user;
grant create session,create pluggable database to remote_clone_user;

--3.在remote端的PDB中打开read only模式

shutdown immediate;
startup mount;
alter database read only;
exit;

--4.在local端的“tnsnames.ora”中添加本地链接名称,供db_link使用

DB12C =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.93)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PDF)
    )
  )

--5.连接local端开始克隆

export ORAENV_ASK=NO
export ORACLE_SID=cdb1
. oraenv
export ORAENV_ASK=YES
sqlplus / as sysdba

--6.在local端创建数据库连接

drop database link clone_link;
create database link clone_link connect to remote_clone_user identified by remote_clone_user using 'db12c';

--测试连接

desc [email protected]_link;

--7.在local端数据库创建新的PDB

create pluggable database db12cpdb from [email protected]_link;

--8.查看新的PDB和其状态

select name,open_mode from v$pdbS where name='DB12CPDB';

--9.运行以下脚本清除non-CDB到PDB信息

alter session set container=db12cpdb;
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

--10.以read-write模式打开PDB

ALTER PLUGGABLE DATABASE db12cpdb OPEN;
select name,open_mode from v$pdbs where name ='DB12CPDB';

**--2.4 将non-cdb数据库迁移到位PDB**

--1.关闭non-cdb并以read-only模式打开

export ORACLE_SID=db12c
sqlplus / as sysdba
shutdown immediate;
startup open read only;

--2.使用dbms_pbd.describe过程创建xml文件

begin
  dbms_pdb.describe(
        pdb_descr_file =>'/tmp/db12c.xml');
end;

--3.关闭non-cdb数据库

exprot ORACLE_SID=db12c
sqlplus / as sysdba
shutdown immediate;

--4.使用non-cdb的描述文件在CDB中创建PDB

export ORACLE_SID=cdb1
sqlplus / as sysdba
craete pluggable database pdb6 using '/tmp/db12c.xml'
copy
file_name_convert =('/u01/app/oracle/oradata/db12c/', '/u01/app/oracle/oradata/cdb1/pdb6/');

--5.切换到pdb6,运行如下脚本

alter session set container = pdb6;
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

--6.启动PDB,检查open_mode

alter session set container =pdb6;
alter pluggable database open ;
select name,open_mode from v$pdbs;

**--2.5 数据迁移**
--方案一:使用 data dump (expdp/impdp)
--使用 data dump (expdp/impdp)从non-cdb迁移到新创建的PDB数据库中。如果non-cdb是11.2.0.3以上的版本以下的版本,expdp使用"FULL=Y TRANSPORTABLE=ALWAYS VERSION=12"参数。如果在不同的平台进行转换需要使用RMAN的convert命令,或者DBMS_FILE_TRANSFER包。

--方案二:使用Goldengate
--使用Goldengate的replicate将数据从non-cdb传输到pdb上。

**--2.6 补丁考虑**
--如果源端和目标端的补丁基本不一样,需要从PDB的PDB_PLUG_IN_VIOLATIONS试图中查看,并且使用datapatch工具在目标端进行扫描,并实施相关补丁。

原文地址:http://blog.51cto.com/peenboo/2083425

时间: 2024-10-19 03:43:45

多租户:在Oracle12.2中 从Non-CDB迁移到PDB,从PDB迁移另一个CDB中的相关文章

找出给定的一个字符串中最大的不重复子串,不重复子串即一个子串中不出现两个相同的字符

思路一:先找出一个字符串中所有子串,再找出所有子串中最长的那一个:思路二:每次找出的子串长度都比上一次的子串长,则最后的子串即是最长子串的长度数.我选择的是第二种方法. public class FindSubstringMaxlengthNoduplicate { public static void main(String[] args) { String s = "adcdghcwioizhfksjdyuiodfhjskhgkhgeisdcjdkh"; ArrayList<

java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

1 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.File; 6 import java.io.FileInputStream; 7 import java.io.FileNotFoundException; 8 import java.io.FileOutputStream; 9 import java.io.IOException; 10 import java.io.

一个表中的某字段中所有的数据,复制到另一个表中

项目要求,织梦被黑了,又不太会修复织梦的漏洞.决定换一个自己开发的后台吧!问题来了,织梦中的文章数据要全部拿出来,导入到新的后台中. 因为,现有后台的数据表跟织梦的表的结构完全不一样,再加上织梦用于保存文章是用了,dede_addonarticle,dede_archives,这两个表.现在是要将两个表中有用的字段的数据 复制到一个新的表中的一个字段内. 第一步,同步他们的主键,dede_addonarticle的主键是aid,dede_archives的主键是id 1,一张写好了结构的,没有数

最近一个项目中关于NGUI部分的总结

最近一个项目中关于NGUI部分的总结           在自己最近的一个项目中,软件的界面部分使用了NGUI来进行制作.在制作过程中,遇到了一些问题,也获取了一些经验,总结下来,作为日后的积累. 1.NGUI图集的使用. 此次是第一个自己正儿八经的制作完整图集的项目,感受颇深.在使用NGUI制作界面时,图集的选用是一个关键,因为它直接关系到了drawcall的数量.最好就是自始至终都只使用同一个图集中的元素,这样的话,在界面制作上drawcall的消耗就只会受到Panel的划分以及字体与图集的

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简

求一个矩阵中最大的2*2矩阵(元素和最大)的和

编程题在线编程题30分2/2最大子矩阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem Description:求一个矩阵中最大的2*2矩阵(元素和最大)的和.如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3和为17输入m*n的矩阵输出该m*n矩阵的最大2*2子矩阵(元素和最大)的和 样例输入 1 2 0 3 4 ; 2 3 4 5 1 

算法积累(字符串转换驼峰,判断一个字符串中那个字母出现次数最多,并且出现了几次)

因为算法比较烂,所以想做一下这方面的积累. 尽量能够每天学习一个新算法吧.(不过估计很悬) 好吧,今天第一个是字符串转换驼峰 直接上代码 var str = 'toupper-case'; var arr = str.split('-'); //toupper,case for (var i = 1; i < arr.length; i++) { //把除了第一个数组后面的数组的第一个值设置为大写然后大写字母和去掉第一个字符的剩下的字符进行拼合 arr[i] = arr[i].charAt(0)

求一个字符串中连续出现次数最多的子串

解题思路 例如字符串"abababc",最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复子串为abab.两个题目的解法有些类似,都用到了后缀数组这个数据结构.求一个字符串中连续出现的次数最多的子串,首先生成后缀数组例如上面的字符串为: abababc bababc ababc babc abc bc c 可以看出第一个后缀数组和第三个后缀数组的起始都为ab,第5个后缀数组也为ab.可以看出规律来,一个字符串s,如果第一次出现

算法题:找出一个数组中相加值最大的连续序列元素

package arithmetic; /** * @author SHI * 求一个数组中相加值最大的连续序列元素 */ public class MaxSequence { public static void main(String[] args) { int[] a=new int[]{-2,9,-3,4,-6,7,-6,4}; findBigSequence(a); } /** * 思想: (1)计算出该数组的所有元素和,假设该值为最大 * (2)从数组下标1到a.length-1依次