网站首页 > 技术文章 正文
其他相关文章
- Redhat 7.x 从11.2.0.4升级到18.0.0(DBUA)
- 从11.2.0.4升级到18.0.0 non-CDB(手动)
- Linux从12c non-CDB升级到18.0.0 non-CDB(手动)
- Linux从12c non-CDB升级到18.0.0 non-CDB(手动)
说明
本节只介绍CDB升级到CDB模式,对于non-CDB模式参考前面的升级方法即可。而对于CDB升级到CDB模式,步骤没有区别。只是在已upgrade方式打开数据库时,PDB也需要以upgrade方式打开:ALTER PLUGGABLE DATABASE ALL OPEN UPGRADE。
源库准备工作
1) 数据库版本
数据库版本是12.2.0.1,支持直接升级到18c.
SQL> select * from v$version where rownum=1;
BANNER CON_ID
----------------------------------------------------------------------------------------------------- ------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0
2) 是否是CDB
为non-CDB模式
SQL> select name,cdb from v$database;
NAME CDB
--------- --------
CNDBA NO
3) 全库备份
升级前建议进行备份,以防万一。
rman "target / nocatalog"
RUN
{
ALLOCATE CHANNEL chan_name TYPE DISK;
BACKUP DATABASE FORMAT '<db_backup_directory>%U' TAG before_upgrade;
BACKUP CURRENT CONTROLFILE TO '<controlfile_backup_directory>';
}
4) 执行检查脚本
这里不再具体说明,请参考其他升级文章:从11.2.0.4升级到18.0.0 non-CDB(手动)。
5) 开启归档和闪回
查看是否开启闪回和归档
SQL> select log_mode,flashback_on from v$database;
LOG_MODE FLASHBACK_ON
------------ ------------------
ARCHIVELOG YES
没有则手动开启归档和闪回。
shutdown immediate;
startup mount;
alter database archivelog;
alter database flashback on;
6) (可选)如果是RAC,则修改CLUSTER_DATABASE为FALSE
ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;
7) 关闭数据库
shutdown immediate
目标库准备工作
- 安装数据库软件并创建CDB
这里可以不创建其他的PDB,如下通过DBCA建库:
cd /u01/app/oracle/product/18.1.0/db_1/bin
./dbca
选择创建数据库
高级模式
选择单实例
创建CDB,但是不创建PDB
启用归档和快速恢复区
用之前的监听
字符集要和源库相同
这里不配置EM
输入密码
创建数据库
创建数据库的概要信息,检查一下
创建数据库
首先将源库升级到18c
具体步骤参考上一节“12c升级到18c”即可
将non-CDB插入到CDB中
源库:
- 将数据库以read-only打开
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1560281088 bytes
Fixed Size 8621088 bytes
Variable Size 1006633952 bytes
Database Buffers 536870912 bytes
Redo Buffers 8155136 bytes
Database mounted.
SQL> alter database open read only;
Database altered.
- 创建PDB所需的XML文件
SQL> exec DBMS_PDB.DESCRIBE('/home/oracle/cndbapdb.xml');
PL/SQL procedure successfully completed.
- 关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
目标库
连接到18c的CDB中,然后通过XML文件将non-CDB插入到CDB中。
- 检测兼容性
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/home/oracle/cndbapdb.xml',
pdb_name => 'cndbapdb')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
NO --可以看到不兼容,通过视图PDB_PLUG_IN_VIOLATIONS查看具体原因
- 查看不兼容的具体原因
set linesize 150
col name for a10
col cause for a25
col time for a30
col message for a35
select type, time,name,cause,status,message from PDB_PLUG_IN_VIOLATIONS where status != 'RESOLVED' order by name, type;
- 错误信息如下
意思是数据库的相关组件版本不同,而在18c数据库中没有这些组件。
Database option XOQ mismatch: PDB installed version 18.0.0.0.0. CDB installed version NULL.
- 解决方法—源库上执行
有两种解决方法:1.将源库上的相关组件移除(18c中没有的组件)。2.重建带有这些组件的CDB(MOS 2001512.1)
Oracle推荐使用方法1,参考MOS(ID 2318035.1)
- 查看所有组件
红色部分是需要移除的组件。
CDB:
SQL> col COMP_NAME for a30
SQL> select comp_name, version, status from dba_registry;
COMP_NAME VERSION STATUS
------------------------------ ------------------------------ --------------------------------------------
Oracle Database Catalog Views 18.0.0.0.0 VALID
Oracle Database Packages and Ttpes 18.0.0.0.0 VALID
Oracle Real Application Clusters 18.0.0.0.0 OPTION OFF
Oracle XML Database 18.0.0.0.0 VALID
non-CDB:
SQL> col COMP_NAME for a30
SQL> select comp_name, version, status from dba_registry;
COMP_NAME VERSION STATUS
------------------------------ ------------------------------ --------------------------------------------
Oracle Database Catalog Views 18.0.0.0.0 VALID
Oracle Database Packages and Ttpes 18.0.0.0.0 VALID
JServer JAVA Virtual Machine 18.0.0.0.0 VALID
Oracle XDK 18.0.0.0.0 VALID
Oracle Database Java Packages 18.0.0.0.0 VALID
OLAP Analytic Workspace 18.0.0.0.0 VALID
Oracle Real Application Clusters 18.0.0.0.0 OPTION OFF
Oracle XML Database 18.0.0.0.0 VALID
Oracle Workspace Manager 18.0.0.0.0 VALID
Oracle Text 18.0.0.0.0 VALID
Oracle Multimedia 18.0.0.0.0 VALID
Spatial 18.0.0.0.0 VALID
Oracle OLAP API 18.0.0.0.0 VALID
Oracle Label Security 18.0.0.0.0 VALID
Oracle Database Vault 18.0.0.0.0 VALID
15 rows selected.
- 以移除Oracle Database Vault为例查看是否启用了DV
SQL> col PARAMETER for a20
SQL> col value for a10
SQL> select * from v$option where parameter = 'Oracle Database Vault';
PARAMETER VALUE CON_ID
---------------------------- ------------------- ----------------
Oracle Database Vault FALSE 0
- 如果启用了DB,则关闭数据库,监听,EM
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk dv_off ioracle
打开数据,并禁用DV触发器
conn / as sysdba
alter trigger dvsys.dv_before_ddl_trg disable;
alter trigger dvsys.dv_after_ddl_trg disable;
- 禁用回收站,然后移除DB组件
禁用回收站
alter system set recyclebin=off scope=spfile;
shutdown immediate
startup
执行脚本dvremov.sql
SQL> @ ?/rdbms/admin/dvremov.sql
- 如果之前启用了DV,最后还要删除相关用户和启用回收站
drop user &DV_OWNER cascade;
drop user &DV_ACCTMGR cascade;
alter system set recyclebin=on scope=spfile;
shutdown immediate
startup
- 验证DB组件是否被移除
SQL> select comp_name, version, status from dba_registry where comp_name='Oracle Database Vault';
no rows selected
当在源库上已经把所有目标CDB上没有的组件移除后,重新创建XML文件,然后再次检查兼容性即可通过。
- 创建CNDBAPDB
因为数据文件位置不变,所以使用NOCOPY并重用原来的临时文件。
SQL> CREATE PLUGGABLE DATABASE cndbapdb USING '/home/oracle/cndbapdb.xml' NOCOPY TEMPFILE REUSE;
Pluggable database created.
- 切换到PDB中执行脚本
执行脚本将non-CDB转换为PDB。
SQL> alter session set container=cndbapdb;
SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
- 备份PDB
至此就完成了non-CDB升级为CDB,最后一步就是备份数据库,这是升级所有数据库后的必须做的一步。
猜你喜欢
- 2024-11-05 吃透这份MySQL调优核心,面试可以横着走,奥利给
- 2024-11-05 软件测试员必备:面试时常问的15个MySQL数据库查询语句
- 2024-11-05 Spring-data-jpa入门 spring jpa入门
- 2024-11-05 Windows环境下19C一主二备的ABB架构的物理DG搭建
- 2024-11-05 centOS7 单机 mysql 5.7.24 主从 mysql主从命令
- 2024-11-05 颠覆你的认知!MySQL深度优化四件套:深度优化+面试集锦+思维导图
- 2024-11-05 面试官:有没用sysbench做过mysql的基准测试?
- 2024-11-05 第02期:单机部署以及从 MySQL 增量同步数据
- 2024-11-05 学习java需要什么软件 学java要下什么软件
- 2024-11-05 天猫面试官:你了解MySQL数据库设计和应用么?我人傻了
你 发表评论:
欢迎- 619℃几个Oracle空值处理函数 oracle处理null值的函数
- 612℃Oracle分析函数之Lag和Lead()使用
- 601℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 597℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 593℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 584℃【数据统计分析】详解Oracle分组函数之CUBE
- 574℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 562℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)