Oracle 11g迁移至12c的Schema级变更咨询及安装报错解决
我来帮你梳理清楚这两个Oracle版本升级/共存场景下的Schema级问题解决方案,都是实际运维中常见的情况:
一、Oracle 11g 升级至 12c 需执行的 Schema 级变更
- 预升级兼容性检查:首先必须运行12c安装包自带的预升级脚本
utlu121i.sql,它会生成一份详细的Schema级检查报告,涵盖失效对象、权限缺失、数据类型兼容性(比如12c废弃的部分旧数据类型)等问题。执行命令:@$ORACLE_HOME/rdbms/admin/utlu121i.sql - 清理SYSTEM/SYSAUX表空间:12c对系统表空间的使用要求更严格,需要先清理11g遗留的无效对象、过期审计数据和回收站内容。可以执行:
PURGE DBA_RECYCLEBIN; EXEC DBMS_SPACE_ADMIN.CLEANUP_SEGMENTS('SYSTEM'); EXEC DBMS_SPACE_ADMIN.CLEANUP_SEGMENTS('SYSAUX'); - 调整用户权限与角色:12c对
CONNECT、RESOURCE等内置角色的权限做了大幅调整(比如CONNECT不再默认包含CREATE TABLE权限),需要重新检查并授予业务用户必要的权限;同时移除不再适用的旧角色权限。 - 重新编译失效对象:升级后大概率会出现大量无效的Schema对象(存储过程、视图、触发器等),需运行批量编译脚本
utlrp.sql:
个别对象可以单独执行@$ORACLE_HOME/rdbms/admin/utlrp.sqlALTER OBJECT <对象名> COMPILE;处理。 - 适配12c新特性(可选):如果要启用多租户、在线重定义、分区表增强等新特性,需要对现有Schema做针对性调整——比如将普通表转换为分区表,或者将用户迁移到PDB(多租户架构下)。
- 更新审计与安全策略:12c默认开启统一审计功能,需要关闭11g的旧审计设置,迁移到新的统一审计框架,同时调整Schema的审计规则以符合新规范。
二、HP-UX 11.31 Itanium 上已有11g Schema时安装12c的Schema级错误处理
这种情况属于同机器共存11g和12c导致的Schema冲突,处理步骤如下:
- 隔离旧环境变量:安装12c前,务必清理11g相关的环境变量(
ORACLE_HOME、ORACLE_SID、PATH等),确保安装过程指向全新的12c安装路径,避免与11g的Schema产生关联。 - 运行HP-UX专属预安装脚本:HP-UX平台上安装Oracle必须先执行
rootpre.sh脚本,它会处理系统层面的依赖,同时检查并修复部分Schema级的冲突。执行命令:./rootpre.sh - 手动清理冲突的公共对象:如果安装时提示PUBLIC同义词、公共角色冲突,登录11g数据库,临时删除或重命名冲突对象:
12c安装完成后,再根据业务需求恢复或调整这些对象。-- 删除冲突的公共同义词 DROP SYNONYM PUBLIC.<冲突同义词名称>; -- 重命名冲突的公共角色 ALTER ROLE <冲突角色名称> RENAME TO <临时角色名称>; - 使用独立的表空间与系统用户:安装12c时,不要复用11g的SYSTEM/SYSAUX表空间,创建全新的表空间用于12c的系统Schema;同时确保12c的SYS、SYSTEM用户是全新创建的,不与11g用户共享存储。
- 安装后修复残留冲突:如果安装完成后仍存在Schema级错误,运行
utlu121s.sql脚本做二次检查与修复,或者通过DBMS_METADATA导出11g需要保留的业务Schema,在12c中重新导入,避免直接复用旧Schema。
内容的提问来源于stack exchange,提问作者Photo Monsters




