本文是采用迁移的方式来实现数据库10g到11g的迁移升级。
一、环境介绍
1. 源数据库环境
操作系统版本: OEL5.8 x64
数据库版本 : 10.2.0.5 x64
数据库sid名 : orcl
Oracle 10g 10.2.0.5(64bit)安装目录如下:
数据库软件:/u01/app/oracle/product/10.2.0/db_1
数据库文件:/u01/app/oracle/oradata/orcl
归档目录:/u01/archivelog
RMAN目录:/u01/rman_bak/data
2. 目标数据库环境
操作系统版本: OEL5.8 x64
数据库版本 : 11.2.0.3 x64
数据库sid名 : orcl
Oracle 11g 11.2.0.3(64bit)安装目录如下(未创建数据库)
数据库软件:/u01/app/oracle/product/11.2.0/db_1
数据库文件:/u01/app/oracle/oradata/orcl
归档目录:/u01/archivelog
RMAN目录:/u01/rman_bak/data
Oracle 11g 11.2.0.3(64bit)安装文件
p10404530_112030_Linux-x86-64_1of7.zip
p10404530_112030_Linux-x86-64_2of7.zip
3. 升级思路
1)Oracle 10.2.0.2 以后才可以升级到11g 11.2.0.3。
2)创建Oracle 11.2.0.3数据库相关目录。
3) 在Oracle 10.2.0.5x64数据库上执行Oracle 11.2.0.3x64数据库utlu112i.sql脚本。
4)备份Oracle 10.2.0.5x64数据库,并传到11g数据库服务器上。
5)还原10g数据库到11g库上,并升级。
二、RMAN备份源10g数据库
1. 在Oracle 10g库上执行utlu112i.sql脚本
道先需要将11g $ORACLE_HOME/rdbms/admin下的utlu112i.sql脚本传到10g的$ORACLE_HOME/rdbms/admin目录下并执行。
并在10g上执行,这个脚本可以检查升级前的一些信息,必须要执行,否则在恢复时会出现错误。
SQL> @?/rdbms/admin/utlu112i.sql
#执行过程中无错误
2. 备份源数据库
说明:记录数据库DBID(DBID=1349744318),恢复时有用。
[oracle@oradb ~]$ rman target /
Recovery Manager: Release 10.2.0.5.0 - Production on 星期日 7月 28 12:34:56 2013
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: ORCL (DBID=1349744318)
RMAN>
run {
allocate channel c1 device type disk;
backup incremental level 0
format '/u01/rman_bak/data/db_full_%U.bak'
tag '2013-07-28-FULL'
database plus archivelog;
release channel c1;
}
# 备份控制文件与参数文件
RMAN> backup current controlfile format '/u01/rman_bak/data/control20130728.bak';
RMAN> backup spfile format '/u01/rman_bak/data/spfile20130728.bak';
4. 将/u01/rman_bak/data目录拷贝到11g数据库服务器上。
三、11g数据库恢复准备
1. 创建11g数据库基本目录
# su - oracle
mkdir -p /u01/app/oracle/admin/orcl/{adump,dpdump,pfile,scripts}
mkdir -p /u01/app/oracle/oradata/orcl
mkdir -p /u01/app/oracle/flash_recovery_area/ORCL
2. 创建规档日志文件
mkdir -p /u01/archivelog
3. 将rman备份数据库恢复到/u01/rman_bak/data目录下。
# su - oracle
$ cd /u01
[root@rman data]# ll
-rw-r--r-- 1 root root 7110656 07-24 22:23 control20130728.bak
-rw-r--r-- 1 root root 38029824 07-24 22:22 db_full_01ofj0gt_1_1.bak
-rw-r--r-- 1 root root 545660928 07-24 22:22 db_full_02ofj0h1_1_1.bak
-rw-r--r-- 1 root root 7168 07-24 22:22 db_full_03ofj0hs_1_1.bak
-rw-r--r-- 1 root root 98304 07-24 22:23 spfile20130728.bak
四、恢复数据库
1. nomount启动数据库
说明:由于10g实例名与11g实例名与数据库目录一致,不需要手动创建参数文件与控制文件。
# su - oracle
$ echo 'db_name=orcl' > $ORACLE_HOME/dbs/initorcl.ora
$ rman target /
恢复管理器: Release 11.2.0.3.0 - Production on 星期日 7月 28 18:52:43 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup nomount;
Oracle 实例已启动
系统全局区域总计 238034944 字节
Fixed Size 2227136 字节
Variable Size 180356160 字节
Database Buffers 50331648 字节
Redo Buffers 5120000 字节
2. 恢复参数文件
# 恢复spfile文件
RMAN> restore spfile from '/u01/rman_bak/data/spfile20130728.bak';
启动 restore 于 28-7月 -13
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 设备类型=DISK
通道 ORA_DISK_1: 正在从 AUTOBACKUP /u01/rman_bak/data/spfile20130728.bak 还原 spfile
通道 ORA_DISK_1: 从 AUTOBACKUP 还原 SPFILE 已完成
完成 restore 于 28-7月 -13
3. 恢复控制文件
说明: 通过RMAN自动备份的参数与控制文件进行恢复,这个是标准恢复方式;
另一方式是没有自动备份的情况下,通过备份集中的参数文件与控制文件进行恢复。
特点就是指定备份集。
RMAN> startup nomount force;
系统全局区域总计 597098496 字节
Fixed Size 2230672 字节
Variable Size 163579504 字节
Database Buffers 427819008 字节
Redo Buffers 3469312 字节
RMAN> restore controlfile from '/u01/rman_bak/data/control20130728.bak';
启动 restore 于 28-7月 -13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 设备类型=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:03
输出文件名=/u01/app/oracle/oradata/orcl/control01.ctl
输出文件名=/u01/app/oracle/oradata/orcl/control02.ctl
输出文件名=/u01/app/oracle/oradata/orcl/control03.ctl
完成 restore 于 28-7月 -13
RMAN>
4. 恢复数据库
RMAN> set dbid=1349744318
正在执行命令: SET DBID
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
RMAN> restore database;
启动 restore 于 28-7月 -13
启动 implicit crosscheck backup 于 28-7月 -13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=19 设备类型=DISK
已交叉检验的 10 对象
完成 implicit crosscheck backup 于 28-7月 -13
启动 implicit crosscheck copy 于 28-7月 -13
使用通道 ORA_DISK_1
完成 implicit crosscheck copy 于 28-7月 -13
搜索恢复区中的所有文件
正在编制文件目录...
没有为文件编制目录
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始还原数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
通道 ORA_DISK_1: 将数据文件 00001 还原到 /u01/app/oracle/oradata/orcl/system01.dbf
通道 ORA_DISK_1: 将数据文件 00002 还原到 /u01/app/oracle/oradata/orcl/undotbs01.dbf
通道 ORA_DISK_1: 将数据文件 00003 还原到 /u01/app/oracle/oradata/orcl/sysaux01.dbf
通道 ORA_DISK_1: 将数据文件 00004 还原到 /u01/app/oracle/oradata/orcl/users01.dbf
通道 ORA_DISK_1: 正在读取备份片段 /u01/rman_bak/data/db_full_08ofsfkc_1_1.bkp
通道 ORA_DISK_1: 段句柄 = /u01/rman_bak/data/db_full_08ofsfkc_1_1.bkp 标记 = 2013-07-28-FULL
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:42
完成 restore 于 28-7月 -13
RMAN>
RMAN> recover database;
启动 recover 于 28-7月 -13
使用通道 ORA_DISK_1
正在开始介质的恢复
通道 ORA_DISK_1: 正在开始将归档日志还原到默认目标
通道 ORA_DISK_1: 正在还原归档日志
归档日志线程=1 序列=6
通道 ORA_DISK_1: 正在读取备份片段 /u01/rman_bak/data/db_full_0aofsfls_1_1.bkp
通道 ORA_DISK_1: 段句柄 = /u01/rman_bak/data/db_full_0aofsfls_1_1.bkp 标记 = 2013-07-28-FULL
通道 ORA_DISK_1: 已还原备份片段 1
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
归档日志文件名=/u01/archivelog1_6_821963584.dbf 线程=1 序列=6
无法找到归档日志
归档日志线程=1 序列=7
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 07/28/2013 19:05:30 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 7 的归档日志以及起始 SCN 419068
说明:
也可以再次运行以下脚本进行恢复。
5. 升级模式升级数据库
1)升级模式resetlogs启动数据库
SQL> alter database open resetlogs upgrade;
数据库已更改。
2)重建temp临时表空间数据文件
SQL> alter tablespace temp add tempfile '/u01/app/oracle/oradata/orcl/temp02.dbf' size 100m reuse autoextend on next 10m;
表空间已更改
SQL>
6. upgrade模式下运行脚本:catupgrd.sql
SQL> @?/rdbms/admin/catupgrd.sql
... 大约执行了1个小时。
SQL> Rem Set errorlogging off
SQL> SET ERRORLOGGING OFF;
SQL>
SQL> REM END OF CATUPGRD.SQL
SQL>
SQL> REM bug 12337546 - Exit current sqlplus session at end of catupgrd.sql.
SQL> REM This forces user to start a new sqlplus session in order
SQL> REM to connect to the upgraded db.
SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
7. 执行utlu112s.sql脚本
这个脚本显示升级过程的一个摘要。不需要在upgrade 模式下。
SQL> @?/rdbms/admin/utlu112s.sql
Oracle Database 11.2 Post-Upgrade Status Tool 07-28-2013 20:29:35
Component Current Version Elapsed Time
Name Status Number HH:MM:SS
Oracle Server VALID 11.2.0.3.0 00:12:26
JServer JAVA Virtual Machine VALID 11.2.0.3.0 00:09:22
Oracle Workspace Manager VALID 11.2.0.3.0 00:00:33
OLAP Analytic Workspace VALID 11.2.0.3.0 00:00:36
OLAP Catalog VALID 11.2.0.3.0 00:00:49
Oracle OLAP API VALID 11.2.0.3.0 00:00:28
Oracle Enterprise Manager VALID 11.2.0.3.0 00:09:24
Oracle XDK VALID 11.2.0.3.0 00:02:02
Oracle Text VALID 11.2.0.3.0 00:00:48
Oracle XML Database VALID 11.2.0.3.0 00:04:28
Oracle Database Java Packages VALID 11.2.0.3.0 00:00:23
Oracle Multimedia VALID 11.2.0.3.0 00:03:34
Spatial VALID 11.2.0.3.0 00:04:54
Oracle Expression Filter VALID 11.2.0.3.0 00:00:11
Oracle Rules Manager VALID 11.2.0.3.0 00:00:09
Gathering Statistics
00:02:33 Total Upgrade Time: 00:52:49
PL/SQL 过程已成功完成。
SQL>
8. 编译无效对象
# 查看无效对象数量
SQL> select count(*) from dba_invalid_objects;
COUNT(*)
----------
5917
# 编译无效对象
SQL> @?/rdbms/admin/utlrp.sql
执行完成。
# 查看无效对象
SQL> select count(*) from dba_invalid_objects;
未选定行
SQL> SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
COUNT(*)
----------
0
9. 检查数据库状态
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> select comp_name,version, status from dba_registry;
COMP_NAME VERSION STATUS
---------------------------------------- ------------------------------ ----------------------
Oracle Enterprise Manager 11.2.0.3.0 VALID
OLAP Catalog 11.2.0.3.0 VALID
Spatial 11.2.0.3.0 VALID
Oracle Multimedia 11.2.0.3.0 VALID
Oracle XML Database 11.2.0.3.0 VALID
Oracle Text 11.2.0.3.0 VALID
Oracle Data Mining 11.2.0.3.0 VALID
Oracle Expression Filter 11.2.0.3.0 VALID
Oracle Rules Manager 11.2.0.3.0 VALID
Oracle Workspace Manager 11.2.0.3.0 VALID
Oracle Database Catalog Views 11.2.0.3.0 VALID
Oracle Database Packages and Types 11.2.0.3.0 VALID
JServer JAVA Virtual Machine 11.2.0.3.0 VALID
Oracle XDK 11.2.0.3.0 VALID
Oracle Database Java Packages 11.2.0.3.0 VALID
OLAP Analytic Workspace 11.2.0.3.0 VALID
Oracle OLAP API 11.2.0.3.0 VALID
17 rows selected.