我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle 12c Non CDB 数据库切换成PDB

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle 12c Non CDB 数据库切换成PDB

数据库从10.2(11g)升级到12c或者在12c中创建的,数据库就是NON CDB,和12c 之前的版本就没有什么区别,所以一般会把12cnoncdb转为pdb进行管理。

测试步骤如下:

一:源库

1.

select name,CDB from v$database;

NAME      CDB

--------- ---

ERPDB     NO

SQL> 

SQL> set lines 150 

SQL> select * from v$version;

BANNER                                                                               CON_ID

-------------------------------------------------------------------------------- ----------

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production              0

PL/SQL Release 12.1.0.2.0 - Production                                                    0

CORE    12.1.0.2.0      Production                                                                0

TNS for Linux: Version 12.1.0.2.0 - Production                                            0

NLSRTL Version 12.1.0.2.0 - Production                                                    0

注意:在转换前先运行如下脚本

2.

@?/rdbms/admin/utluppkg.sql 

SET SERVEROUTPUT ON; 

exec dbms_preup.run_fixup_and_report('INVALID_SYS_TABLEDATA') 

exec dbms_preup.run_fixup_and_report('INVALID_USR_TABLEDATA');

如果不运行在执行noncdb_to_pdb.sql会报如下错误

SQL> SELECT rpad(u.name,128) TABLENAME, rpad(o.name,128) OWNER, 

2 rpad(c.name,128) COLNAME FROM SYS.OBJ$ o, SYS.COL$ c, SYS.COLTYPE$ t, 

3 SYS.USER$ u 

4 WHERE o.OBJ# = t.OBJ# AND c.OBJ# = t.OBJ# AND c.COL# = t.COL# 

5 AND t.INTCOL# = c.INTCOL# AND BITAND(t.FLAGS, 256) = 256 

6 AND o.OWNER# = u.USER# AND o.OWNER# NOT IN 

7 (SELECT UNIQUE (d.USER_ID) FROM SYS.DBA_USERS d, SYS.REGISTRY$ r 

8 WHERE d.USER_ID = r.SCHEMA# and r.NAMESPACE=’SERVER’); 

WHERE d.USER_ID = r.SCHEMA# and r.NAMESPACE=’SERVER’) 

ERROR at line 8: 

3.把数据库启动到只读模式

startup open read only

4.生成xml 文件

BEGIN

DBMS_PDB.DESCRIBE(pdb_descr_file => '/home/oracle/scripts/erpdbPDB.xml');

END;

/

Shut immediate

二:目标库

 1.检查兼容性

SET SERVEROUTPUT ON;

DECLARE

compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/home/oracle/scripts/erpdbPDB.xml')

WHEN TRUE THEN 'YES'

ELSE 'NO'

END;

BEGIN

DBMS_OUTPUT.PUT_LINE(compatible);

END;

/

2.检查在Convert 时会出现的错误

elect name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where name='ERPDB’;

3.创建pluggable 数据库

CREATE PLUGGABLE DATABASE  erpdb  USING '/home/oracle/scripts/erpdbPDB.xml'

     copy  

   FILE_NAME_CONVERT = ('/u01/oracle/oradata/erpdb/sys01.bdf', '/u01/app/oracle/oradata/pdbprod/erpdb/sys01.bdf',

    '/u01/oracle/oradata/erpdb/sy03.bdf', '/u01/app/oracle/oradata/pdbprod/erpdb/sys03.bdf',

    '/u01/oracle/oradata/erpdb/sy04.bdf', '/u01/app/oracle/oradata/pdbprod/erpdb/sys04.bdf',

    '/u01/oracle/oradata/erpdb/temp01.dbf','/u01/app/oracle/oradata/pdbprod/erpdb/temp01.dbf');

Pluggable database created.

4.运行脚本$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

SQL> SQL>  ALTER SESSION SET CONTAINER=erpdb;

SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql(大概在40分钟左右)

SQL> 

SQL> -- leave the PDB in the same state it was when we started

SQL> BEGIN

  2    execute immediate '&open_sql &restricted_state';

  3  EXCEPTION

  4    WHEN OTHERS THEN

  5    BEGIN

  6      IF (sqlcode <> -900) THEN

  7        RAISE;

  8      END IF;

  9    END;

 10  END;

 11  /

PL/SQL procedure successfully completed.

SQL> 

SQL> 

SQL> WHENEVER SQLERROR CONTINUE;

SQL>

show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         3 ERPDB                          MOUNTED

5.打开pdb数据库

alter pluggable database  erpdb open ;

Pluggable database altered.

SQL> SELECT name, open_mode FROM v$pdbs;

NAME                           OPEN_MODE

------------------------------ ----------

ERPDB                          READ WRITE

SQL> col cause for a20

SQL>  col name for a20

SQL> col message for a35 word_wrapped

SQL>  select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONS where name='ERPDB';

no rows selected

参考文档

How to Convert Non-CDB to PDB Database in 12c - Testcase (文档 ID 2012448.1)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle 12c Non CDB 数据库切换成PDB

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle 12C RAC CDB数据库部署

Oracle中的12C新特性-容器数据库---12.1.0.2_GI_RAC_Create_CDB_Blog一、 安装前的准备安装两个节点的 12.1.0.2 GI/RAC ,创建 CDB 数据库。1. 关闭 SELIN
2023-05-31

oracle数据库怎么切换

oracle 数据库切换步骤如下:连接到现有数据库,并检查当前数据库。使用 alter session set current_schema 命令切换数据库。再次检查以确认已成功切换数据库。如何切换 Oracle 数据库在 Oracle
oracle数据库怎么切换
2024-05-21

数据库要从 Oracle 换成 MySQL,以前报表都是存储过程写的,怎么迁移呢?

存储过程没法移植,差不多都要重新了。既然重写,还不如从根本上解决移植问题。 原来存储过程是“不得不用”,因为前端的报表工具不具备复杂计算能力,而为报表准备数据的逻辑又很复杂,用存储过程方便些。 但存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易
数据库要从 Oracle 换成 MySQL,以前报表都是存储过程写的,怎么迁移呢?
2014-05-14

oracle 数据库 中 如何将不带汉字的日期格式转换成带“年月日时分秒”格式的日期

通常我们在oracle中写日期格式化是这样的 to_date(时间,"yyyy-mm-dd") 但是,有时候也会遇到一些别样的需求,比如这样 : 让你按"xxxx年xx月xx日 xx时xx分xx秒"的格式来显示时间 对于初次接触的你,有可能写完会出现这样的情
oracle 数据库 中 如何将不带汉字的日期格式转换成带“年月日时分秒”格式的日期
2020-05-13

编程热搜

目录