--==================================
-- 使用 RMAN 迁 移文件系 统数 据 库 到 ASM
--==================================
在 实际 的工作 过 程中,由于 ASM 磁 盘 管理的便利性,因此很多 时 候需要 将 文件系 统 的 数 据 库迁 移到 ASM ,本文演示了如何 将 文件系 统数 据 库迁 移到 ASM 实 例。
有 关 如何 创 建 ASM 实 例及 ASM 磁 盘 管理 请参 考
一、主要步 骤 ( 假定 ASM 实 例已 创 建 )
1 . 计 算目 标数 据 库 ( 文件系 统 ) 的大小
2 . 根据目 标数 据 库 的大小, 为 新 ASM 数 据 库 ( 辅 助 数 据 库 ) 准 备 可用磁 盘 空 间
3 . 为辅 助 数 据 库 配置初始化 参数 文件,密 码 文件, 创 建目 录
4 . 备份 目 标数 据 库
5 . 迁 移目 标数 据 库 到 辅 助 数 据 库
二、 实 施 迁 移
本次 迁 移在同一台主机 实现 ,因此采用不同的 ORACLE_SID
环 境: Oracle Linux 5.4 + Oracle 10 g R2
目 标数 据 库 : orcl
辅 助 数 据 库 : orclasm
1 . 计 算目 标数 据 库 ( 文件系 统 ) 的大小
SQL > show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string orcl
SQL > select * from v$version where rownum < 2 ;
BANNER
----------------------------------------------------------------
Oracle Database 10 g Enterprise Edition Release 10.2 .0.4.0 - Prod
SQL > select sum (bytes)/ 1024 / 1024 || 'MB' from dba_segments;
SUM (BYTES)/ 1024 / 1024 || 'MB'
------------------------------------------
1195.5 MB
2 . 为辅 助 数 据 库 准 备 可用空 间 ,下面 显 示 DG1 中有 3016MB 可用空 间 ,可以 满 足 迁 移的需要
ASMCMD> ls -s
Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name
512 4096 1048576 6134 6032 0 3016 0 DG1/
512 4096 1048576 2047 1997 0 1997 0 REV/
3 . 配置 辅 助 数 据 库
a. 启动 目 标数 据 库 , 并为 目 标数 据 库创 建 pfile
[oracle@oradb ~]$ echo $ORACLE_SID
orcl
[oracle@oradb ~]$ sqlplus / as sysdba
idle > startup
sys @ORCL> create pfile from spfile ;
b. 复 制目 标数 据 库 的 pfile 来 生成 辅 助 数 据 库 的 pfile 并对 其 进 行修改
[oracle@oradb dbs]$ cd $ORACLE_HOME/dbs
[oracle@oradb dbs]$ cp initorcl.ora initorclasm.ora
修改 initorclasm.ora
对 文件中所有的 orcl 使用替 换 命令替 换为 orclasm( 使用 vi 工具 :%s/orcl/orclasm/g 来 替 换 )
修改控制文件 为 1 个 ( 磁 盘 DG1 使用了 normal redundancy ) ,路 径为 '+DG1/orclasm/controlfile/' -- 使用 ASM 应 注意目 录结构 的 变 化
修改 db_recovery_file_dest 路 径为 '+REV'
修改 log_archive_dest_1 路 径为 'LOCATION=+REV/orclasm'
修改 db_create_file_dest 路 径为 '+DG1'
增加下列 参数 ( 恢 复 完 毕 后 清 除 )
*.db_file_name_convert=("orcl","orclasm")
*.log_file_name_convert=("orcl","orclasm")
下面列出 发 生 变 化的几 个 重要 参数
*.audit_file_dest= '/u01/app/oracle/admin/orclasm/adump'
*.background_dump_dest= '/u01/app/oracle/admin/orclasm/bdump'
*.control_files= '+DG1/orclasm/controlfile/control01.ctl'
*.core_dump_dest= '/u01/app/oracle/admin/orclasm/cdump'
*.db_name= 'orclasm'
*.db_recovery_file_dest= '+REV/orclasm'
*.log_archive_dest_1= 'LOCATION=+REV/orclasm'
*.user_dump_dest= '/u01/app/oracle/admin/orclasm/udump'
*.db_create_file_dest= '+DG1'
*.db_file_name_convert=("orcl","orclasm")
*.log_file_name_convert=("orcl","orclasm")
c. 根据 刚刚 修改 过 的 参数创 建目 录
[oracle@oradb ~]$ mkdir -p $ORACLE_BASE/ admin /orclasm/{a,b,c,u} dump
[oracle@oradb ~]$ ls $ORACLE_BASE/ admin /orclasm
adump bdump cdump udump
d. 创 建密 码 文件
[oracle@oradb dbs]$ orapwd file =$ORACLE_HOME/dbs/orapworclasm password =oracle entries= 8
4 . 备份 目 标数 据 库
a. 目 标数 据 库应处 于 归档 模式下
SQL > select name ,log_mode from v$database;
NAME LOG_MODE
--------- ------------
ORCL ARCHIVELOG
b. 连 接到 RMAN 并进 行 备份 ,此 处 使用了非 catalog 方式
[oracle@oradb ~]$ uniread rman target sys /oracle@orcl nocatalog
RMAN> crosscheck archivelog all ; -- 校 验归档 日志
RMAN> delete expired archivelog all ; -- 删 除 无效的 归档 日志
RMAN> report obsolete;
RMAN> delete noprompt obsolete; -- 删 除 废 弃的 备份
RMAN> show channel; -- 查 看缺省的 备份 路 径
RMAN configuration parameters are:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/u01/bk/orcl/data_%d_%U' ;
RMAN> show controlfile autobackup; -- 查 看控制文件的自 动备份启 用情 况
using target database control file instead of recovery catalog
RMAN configuration parameters are:
CONFIGURE CONTROLFILE AUTOBACKUP ON ;
RMAN> show controlfile autobackup format; -- 查 看控制文件的 备份 路 径 、格式
RMAN configuration parameters are:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/bk/orcl/auto_ctl_%d_%F' ;
RMAN> run{ -- 对 目 标数 据 库进 行 备份 ,此 备份为 0 级 增量包含了 归档 日志,控制文件 spfile 将 自 动备份
2 > allocate channel ch1 device type disk ;
3 > backup as compressed backupset
4 > incremental level 0 database format '/u01/bk/orcl/data_%d_%U'
5 > plus archivelog format '/u01/bk/orcl/bk_lg_%U'
6 > tag= 'Inc0_log' ;
7 > release channel ch1;}
5 . 迁 移目 标数 据到 ASM
a. 查 看目 标数 据 库 的 SEQUENCE , 当 前 为 10 ,便于恢 复时 指定 SEQUENCE
SQL > select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 9 52428800 1 YES ACTIVE 520445 30 -OCT- 10
2 1 10 52428800 1 NO CURRENT 520585 30 -OCT- 10
b. 查 看目 标数 据 库 的 数 据文件的相 关 信 息,后 续 需要 为 datafile 指定文件名
RMAN> report schema ;
Report of database schema
List of Permanent Datafiles
===========================
File Size (MB) Tablespace RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1 480 SYSTEM *** /u01/app/oracle/oradata/orcl/system01.dbf
2 25 UNDOTBS1 *** /u01/app/oracle/oradata/orcl/undotbs01.dbf
3 240 SYSAUX *** /u01/app/oracle/oradata/orcl/sysaux01.dbf
4 5 USERS *** /u01/app/oracle/oradata/orcl/users01.dbf
5 100 EXAMPLE *** /u01/app/oracle/oradata/orcl/example01.dbf
List of Temporary Files
=======================
File Size (MB) Tablespace Maxsize (MB) Tempfile Name
---- -------- -------------------- ----------- --------------------
1 20 TEMP 32767 /u01/app/oracle/oradata/orcl/temp01.dbf
c. 查 看 asm 实 例是否已正常提供服 务 ,以及磁 盘 的 状态并启动 新的 orclasm 实 例
SQL > show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string + ASM
SQL > select group_number, name ,state, type ,total_mb,free_mb,usable_file_mb from v$asm_diskgroup;
GROUP_NUMBER NAME STATE TYPE TOTAL_MB FREE_MB USABLE_FILE_MB
------------ ------------------------------ ----------- ------ ---------- ---------- --------------
1 DG1 MOUNTED NORMAL 6134 6032 3016
2 REV MOUNTED EXTERN 2047 1997 1997
d. 启动辅 助 数 据 库 到 nomount 状态
[oracle@oradb ~]$ export ORACLE_SID=orclasm
[oracle@oradb ~]$ sqlplus / as sysdba
idle > startup nomount
ORACLE instance started.
e. 使用 RMAN 连 接到目 标数 据 库 和 辅 助 数 据 库来 完成 迁 移
[oracle@oradb dbs]$ rman auxiliary / target sys /redhat@orcl
connected to target database : ORCL (DBID= 1263182651 )
connected to auxiliary database : ORCLASM ( not mounted)
RMAN> run {
2 > allocate auxiliary channel ach1 device type disk ;
3 > set until sequence 10 thread 1 ;
4 > set newname for datafile 1 to '+DG1' ;
5 > set newname for datafile 2 to '+DG1' ;
6 > set newname for datafile 3 to '+DG1' ;
7 > set newname for datafile 4 to '+DG1' ;
8 > set newname for datafile 5 to '+DG1' ;
9 > set newname for tempfile 1 to '+DG1' ;
10 > duplicate target database to orclasm logfile
11 > group 1 ( '+DG1' ) size 5 m reuse ,
12 > group 2 ( '+DG1' ) size 5 m reuse ;
13 > }
contents of Memory Script:
{
Alter clone database open resetlogs ;
}
executing Memory Script
database opened
Finished Duplicate Db at 30 -OCT- 10
6 . 后 续处 理
a. 查 看 数 据 库状态并关闭数 据 库
[oracle@oradb ~]$ export ORACLE_SID=orclasm
[oracle@oradb ~]$ sqlplus / as sysdba
SQL > select name ,open_mode from v$database;
NAME OPEN_MODE
--------- ----------
ORCLASM READ WRITE
SQL > shutdown immediate ;
b. 使用 vi 工具 编辑 initorclasm.ora
清 除下列 参数
*.db_file_name_convert=("orcl","orclasm")
*.log_file_name_convert=("orcl","orclasm")
c. 启动数 据 库并创 建 spfile
SQL > startup
SQL > create spfile from pfile ;
SQL > startup force ; -- 如果是生 产库 建 议 先 shutdown immediate, 然后 startup
7 . 验证迁 移 结 果
SQL > show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string orclasm
SQL > col name format a60
SQL > select name ,status from v$datafile;
NAME STATUS
------------------------------------------------------------ -------
+DG1/orclasm/ datafile /system.256.752170937 SYSTEM
+DG1/orclasm/ datafile /undotbs1.259.752170937 ONLINE
+DG1/orclasm/ datafile /sysaux.257.752170937 ONLINE
+DG1/orclasm/ datafile /users.260.752170937 ONLINE
+DG1/orclasm/ datafile /example.258.752170937 ONLINE
SQL > select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 5 5242880 2 YES INACTIVE 563716 27 -MAY- 11
2 1 6 5242880 2 NO CURRENT 583985 27 -MAY- 11
SQL > select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- -------------------------------------------------- ---
2 ONLINE +DG1/orclasm/onlinelog/group_2.263.752171103 NO
1 STALE ONLINE +DG1/orclasm/onlinelog/group_1.262.752171103 NO
1 STALE ONLINE +REV/orclasm/onlinelog/group_1.256.752171103 YES
2 ONLINE +REV/orclasm/onlinelog/group_2.257.752171105 YES
SQL > select file#,creation_change#, status, enabled ,bytes, name from v$tempfile;
FILE# CREATION_CHANGE# STATUS ENABLED BYTES NAME
---------- ---------------- ------- ---------- ---------- --------------------------------------------------
1 464714 ONLINE READ WRITE 20971520 +DG1/orclasm/ tempfile /temp.264.752171113
-- 如果在使用 duplicate 时没 有生成 tempfile 文件,可以使用下面的方式 来 手 动 添加 tempfile 文件。
alter tablespace temp add tempfile '+DG1' size 100 m autoextend off ;
-- 可以添加 归档 目 录 , 并 修改一下 归档 路 径
-- 连 接到 ASM 实 例 创 建 归档 目 录
SQL > select instance_name,status from v$instance;
INSTANCE_NAME STATUS
------------------------------ ------------
+ ASM STARTED
SQL > alter diskgroup REV add directory '+REV/orclasm/arch' ;
Diskgroup altered.
-- 在 orclasm 实 例中修改 归档 路 径
SQL > select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
orclasm OPEN
SQL > alter system set log_archive_dest_1= 'LOCATION=+REV/orclasm/arch' ;
System altered.
SQL > select name from v$archived_log where rownum < 2 order by stamp;
NAME
--------------------------------------------------
+REV/orclasm/ 1 _1_752171102.arc
三、快捷参考
有 关 性能 优 化 请参 考
共享池的 调 整 与优 化 (Shared pool Tuning)
Oracle 表 缓 存 (caching table) 的使用
有 关 ORACLE 体系 结构请参 考
Oracle 联 机重做日志文件 (ONLINE LOG FILE)
Oracle 回 滚 (ROLLBACK) 和撤 销 (UNDO)
Oracle 实 例和 Oracle 数 据 库 (Oracle 体系 结构 )
有 关闪 回特性 请参 考
Oracle 闪 回特性 (FLASHBACK DATABASE)
Oracle 闪 回特性 (FLASHBACK DROP & RECYCLEBIN)
Oracle 闪 回特性 (Flashback Query 、Flashback Table)
Oracle 闪 回特性 (Flashback Version 、Flashback Transaction)
有 关 基于用 户 管理的 备份 和 备份 恢 复 的 概 念 请参 考
Oracle 基于用 户 管理恢 复 的 处 理 ( 详细 描述了介 质 恢 复 及其 处 理 )
有 关 RMAN 的 备份 恢 复与 管理 请参 考
RMAN 备份 路 径 困惑 ( 使用 plus archivelog 时 )
有 关 ORACLE 故障 请参 考
又一例SPFILE 设 置 错误导 致 数 据 库 无法 启动
对参数 FAST_START_MTTR_TARGET = 0 的 误 解及 设 定
SPFILE 错误导 致 数 据 库 无法 启动 (ORA-01565)
有 关 ASM 请参 考
有 关 SQL/PLSQL 请参 考
SQL 基 础 --> 集合 运 算 (UNION 与 UNION ALL)
SQL 基 础 --> 层 次化 查询 (START BY ... CONNECT BY PRIOR)
SQL 基 础 --> ROLLUP 与 CUBE 运 算符 实现数 据 汇总
PL/SQL --> 异 常 处 理 (Exception)
有 关 ORACLE 其 它 特性
使用OEM,SQL*Plus,iSQL*Plus 管理Oracle 实 例
日志 记录 模式 (LOGGING 、FORCE LOGGING 、NOLOGGING)
使用外部表管理Oracle 告警日志(ALAERT_$SID.LOG)
簇表及簇表管理(Index clustered tables)
system sys ,sysoper sysdba 的 区别
ORACLE_SID 、DB_NAME 、INSTANCE_NAME 、DB_DOMIAN 、GLOBAL_NAME
Oracle 补 丁全集 (Oracle 9i 10g 11g Path)