在另外一台服务器上利用备份恢复RAC数据库的过程。
这一篇描述恢复前的准备工作。
由于当前没有现成的RAC环境,只能在一台服务器上通过单实例恢复这个RAC数据库。
由于本地磁盘没有足够的空间来存放备份文件,因此数据库的备份和需要的归档备份文件都已经通过ftp到方式放到ASM磁盘组中。
虽然这个数据库是单实例数据库,但是恢复出来的数据文件和日志文件也会存放到ASM磁盘组中。
下面是恢复前的准备工作,首先设置当前的ORACLE_SID,然后从备份集中恢复初始化参数文件和控制文件:
bash-3.00$ export ORACLE_SID=tradedb1
bash-3.00$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期四 8月 6 17:40:28 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到目标数据库 (未启动)
RMAN> startup nomount
启动失败: ORA-01078: failure in processing system parameters
LRM-00109: ???????????????? '/data/oracle/product/10.2/dbs/inittradedb1.ora'
在没有参数文件的情况下启动 Oracle 实例以检索 spfile
Oracle 实例已启动
系统全局区域总计 159383552 字节
Fixed Size 2126864 字节
Variable Size 77433840 字节
Database Buffers 75497472 字节
Redo Buffers 4325376 字节
RMAN> restore spfile to '+DATA/tradedb/spfiletradedb1.ora' from '+DATA/tradedb/9iklkq9n_1_1';
启动 restore 于 06-8月 -09
使用目标数据库控制文件替代恢复目录分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=23 devtype=DISK
通道 ORA_DISK_1: 已找到的自动备份: +DATA/tradedb/9iklkq9n_1_1
MAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: restore 命令 (在 08/06/2009 17:41:51 上) 失败
ORA-19687: 在备份集内找不到 SPFILE
RMAN> restore spfile to '+DATA/tradedb/spfiletradedb1.ora' from '+DATA/tradedb/9jklkq9n_1_1';
启动 restore 于 06-8月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 已找到的自动备份: +DATA/tradedb/9jklkq9n_1_1
通道 ORA_DISK_1: 从自动备份复原 SPFILE 已完成
完成 restore 于 06-8月 -09
RMAN> restore controlfile to '+DATA/tradedb/control01.ctl' from '+DATA/tradedb/9jklkq9n_1_1';
启动 restore 于 06-8月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:04
完成 restore 于 06-8月 -09
RMAN> shutdown
Oracle 实例已关闭
RMAN> exit
恢复管理器完成。
由于不了解控制文件和SPFILE初始化参数文件到底存放在哪个备份级中,因此只能通过尝试的办法进行恢复。不过要是原数据库存在的话,可以通过rman获得这个信息,另外备份时的日志也包含了这个信息。
由于原始数据库的RAC环境,且主机内存空间比较大,而当前只是普通的单实例环境,且主机上运行了多个数据库,因此需要对初始化参数进行调整。去掉所有RAC相关的参数设置,去掉实例2和实例1设置的实例级的参数,仅保留数据库级的参数设置,并根据现有主主机的内存,调整SGA和PGA参数。
调整后的初始化参数如下:
*.audit_file_dest='/data/oracle/admin/tradedb/adump'
*.background_dump_dest='/data/oracle/admin/tradedb/bdump'
*.cluster_database=false
*.cluster_database_instances=1
*.compatible='10.2.0.1.0'
*.control_files='+DATA/tradedb/control01.ctl'
*.core_dump_dest='/data/oracle/admin/tradedb/cdump'
*.db_block_size=16384
*.db_domain='us.oracle.com'
*.db_file_multiblock_read_count=16
*.db_name='tradedb'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=tradedbXDB)'
*.global_names=TRUE
*.job_queue_processes=50
*.log_archive_dest_1='LOCATION=+DATA/tradedb/'
*.log_archive_format='%t_%s_%r.dbf'
*.log_archive_local_first=FALSE
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=5000
*.pga_aggregate_target=1098907648
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.session_max_open_files=20
*.sessions=335
*.sga_target=4395630592
*.streams_pool_size=50331648
*.undo_management='AUTO'
*.undo_retention=10800
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/data/oracle/admin/tradedb/udump'
下面建立数据库启动所需的目录:
$ mkdir -p /data/oracle/admin/tradedb
$ cd /data/oracle/admin/tradedb
$ mkdir bdump adump cdump udump
确保ASM实例中对应的目录已经创建。
下面通过sqlplus启动数据库实例:
SQL> startup mount pfile=/export/home/oracle/inittradedb1.ora
ORACLE 例程已经启动。
Total System Global Area 4395630592 bytes
Fixed Size 2134096 bytes
Variable Size 882732976 bytes
Database Buffers 3506438144 bytes
Redo Buffers 4325376 bytes
数据库装载完毕。
SQL> exit
从 Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options 断开
下面进入RMAN环境,并清除掉所有的RMAN现有设置:
bash-3.00$ rman target /
恢复管理器: Release 10.2.0.3.0 - Production on 星期五 8月 7 10:22:57 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到目标数据库: TRADEDB (DBID=4181457554, 未打开)
RMAN> show all;
RMAN 配置参数为:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/data/backup/tradedb/%U';
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT '*' FORMAT '/data/backup/tradedb/%U';
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT '*' FORMAT '/data/backup/tradedb/%U';
CONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' CONNECT '*';
CONFIGURE CHANNEL 2 DEVICE TYPE 'SBT_TAPE' CONNECT '*';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/data/oracle/product/10.2/dbs/snapcf_tradedb1.f'; # default
RMAN> configure channel device type disk clear;
旧的 RMAN 配置参数:
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/data/backup/tradedb/%U';
已成功删除旧的 RMAN 配置参数
RMAN> configure channel 1 device type sbt clear;
旧的 RMAN 配置参数:
CONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' CONNECT '*';
已成功删除旧的 RMAN 配置参数
RMAN> configure channel 2 device type sbt clear;
旧的 RMAN 配置参数:
CONFIGURE CHANNEL 2 DEVICE TYPE 'SBT_TAPE' CONNECT '*';
已成功删除旧的 RMAN 配置参数
RMAN> configure channel 1 device type disk clear;
旧的 RMAN 配置参数:
CONFIGURE CHANNEL 1 DEVICE TYPE DISK CONNECT '*' FORMAT '/data/backup/tradedb/%U';
已成功删除旧的 RMAN 配置参数
RMAN> configure channel 2 device type disk clear;
旧的 RMAN 配置参数:
CONFIGURE CHANNEL 2 DEVICE TYPE DISK CONNECT '*' FORMAT '/data/backup/tradedb/%U';
已成功删除旧的 RMAN 配置参数
RMAN> configure device type disk clear;
旧的 RMAN 配置参数:
CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
RMAN 配置参数已成功重置为默认值
RMAN> configure device type sbt clear;
旧的 RMAN 配置参数:
CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 2 BACKUP TYPE TO BACKUPSET;
RMAN 配置参数已成功重置为默认值
由于备份集的存放路径发生了变化,因此需要通过CATALOG命令,将备份集的新位置加到控制文件中:
RMAN> catalog backuppiece '+DATA/tradedb/9iklkq9n_1_1';
已列入目录的备份段
备份段 handle=+DATA/tradedb/9iklkq9n_1_1 recid=2331 stamp=694262033
RMAN> catalog backuppiece '+DATA/tradedb/9jklkq9n_1_1';
已列入目录的备份段
备份段 handle=+DATA/tradedb/9jklkq9n_1_1 recid=2332 stamp=694262049
RMAN> catalog backuppiece '+DATA/tradedb/9kklkslb_1_1';
已列入目录的备份段
备份段 handle=+DATA/tradedb/9kklkslb_1_1 recid=2333 stamp=694262061
RMAN> catalog backuppiece '+DATA/tradedb/9lklkslb_1_1';
已列入目录的备份段
备份段 handle=+DATA/tradedb/9lklkslb_1_1 recid=2334 stamp=694262072
RMAN> catalog backuppiece '+DATA/tradedb/9nklksn0_1_1';
已列入目录的备份段
备份段 handle=+DATA/tradedb/9nklksn0_1_1 recid=2335 stamp=694262082
RMAN> catalog backuppiece '+DATA/tradedb/9oklkt7p_1_1';
已列入目录的备份段
备份段 handle=+DATA/tradedb/9oklkt7p_1_1 recid=2336 stamp=694262091
由于源数据库的数据文件存放在veritas管理的共享裸设备中,而当前目标数据库使用ASM磁盘组作为共享存储介质,显然二者路径是不一致的,因此需要通过SET NEWNAME FOR DATAFILE语句来设置每个数据文件的新路径。
由于数据文件太多,因此这部分脚本通过源数据库中SQL获得:
SQL> SELECT FILE_ID, FILE_NAME FROM DBA_DATA_FILES;
FILE_ID FILE_NAME
---------- ------------------------------------------------------------
1 /dev/vx/rdsk/datadg/tradedb_system_1_4g
2 /dev/vx/rdsk/datadg/tradedb_undotbs1_1_4g
3 /dev/vx/rdsk/datadg/tradedb_undotbs1_2_4g
4 /dev/vx/rdsk/datadg/tradedb_undotbs1_3_4g
5 /dev/vx/rdsk/datadg/tradedb_undotbs1_4_4g
6 /dev/vx/rdsk/datadg/tradedb_undotbs1_5_4g
7 /dev/vx/rdsk/datadg/tradedb_sysaux_1_1g
8 /dev/vx/rdsk/datadg/tradedb_undotbs2_1_4g
9 /dev/vx/rdsk/datadg/tradedb_undotbs2_2_4g
10 /dev/vx/rdsk/datadg/tradedb_undotbs2_3_4g
11 /dev/vx/rdsk/datadg/tradedb_undotbs2_4_4g
12 /dev/vx/rdsk/datadg/tradedb_undotbs2_5_4g
13 /dev/vx/rdsk/datadg/tradedb_users_1_200m
14 /dev/vx/rdsk/datadg/tradedb_ndmain_1_4g
15 /dev/vx/rdsk/datadg/tradedb_ndmain_2_4g
16 /dev/vx/rdsk/datadg/tradedb_ndmain_3_4g
17 /dev/vx/rdsk/datadg/tradedb_anhui_1
18 /dev/vx/rdsk/datadg/tradedb_anhui_2
19 /dev/vx/rdsk/datadg/tradedb_anhui_3
20 /dev/vx/rdsk/datadg/tradedb_anhui_4
21 /dev/vx/rdsk/datadg/tradedb_zhejiang_1_4g
22 /dev/vx/rdsk/datadg/tradedb_zhejiang_2_4g
23 /dev/vx/rdsk/datadg/tradedb_zhejiang_3_4g
24 /dev/vx/rdsk/datadg/tradedb_zhejiang_4_4g
25 /dev/vx/rdsk/datadg/tradedb_zhejiang_5_4g
26 /dev/vx/rdsk/datadg/tradedb_zhejiang_6_4g
27 /dev/vx/rdsk/datadg/tradedb_zhejiang_7_4g
28 /dev/vx/rdsk/datadg/tradedb_zhejiang_8_4g
29 /dev/vx/rdsk/datadg/tradedb_zhejiang_9_4g
30 /dev/vx/rdsk/datadg/tradedb_zhejiang_10_4g
31 /dev/vx/rdsk/datadg/tradedb_zhejiang_11_4g
32 /dev/vx/rdsk/datadg/tradedb_zhejiang_12_4g
33 /dev/vx/rdsk/datadg/tradedb_zhejiang_13_4g
34 /dev/vx/rdsk/datadg/tradedb_zhejiang_14_4g
35 /dev/vx/rdsk/datadg/tradedb_zhejiang_15_4g
36 /dev/vx/rdsk/datadg/tradedb_zhejiang_16_4g
37 /dev/vx/rdsk/datadg/tradedb_zhejiang_17_4g
38 /dev/vx/rdsk/datadg/tradedb_zhejiang_18_4g
39 /dev/vx/rdsk/datadg/tradedb_sysaux_2_1g
40 /dev/vx/rdsk/datadg/tradedb_gpo_1_4g
41 /dev/vx/rdsk/datadg/tradedb_gpo_2_4g
42 /dev/vx/rdsk/datadg/tradedb_gpo_3_4g
43 /dev/vx/rdsk/datadg/tradedb_gpo_4_4g
44 /dev/vx/rdsk/datadg/tradedb_zhejiang_19_4g
45 /dev/vx/rdsk/datadg/tradedb_zhejiang_20_4g
46 /dev/vx/rdsk/datadg/tradedb_beijing_1_4g
47 /dev/vx/rdsk/datadg/tradedb_beijing_2_4g
48 /dev/vx/rdsk/datadg/tradedb_beijing_3_4g
49 /dev/vx/rdsk/datadg/tradedb_beijing_4_4g
50 /dev/vx/rdsk/datadg/tradedb_beijing_5_4g
51 /dev/vx/rdsk/datadg/tradedb_beijing_6_4g
52 /dev/vx/rdsk/datadg/tradedb_beijing_7_4g
53 /dev/vx/rdsk/datadg/tradedb_beijing_8_4g
54 /dev/vx/rdsk/datadg/tradedb_beijing_9_4g
55 /dev/vx/rdsk/datadg/tradedb_beijing_10_4g
56 /dev/vx/rdsk/datadg/tradedb_beijing_11_4g
57 /dev/vx/rdsk/datadg/tradedb_beijing_12_4g
58 /dev/vx/rdsk/datadg/tradedb_beijing_13_4g
59 /dev/vx/rdsk/datadg/tradedb_beijing_14_4g
60 /dev/vx/rdsk/datadg/tradedb_beijing_15_4g
已选择60行。
SQL> SELECT 'SET NEWNAME FOR DATAFILE ' || FILE_ID || ' TO ''+DATA/tradedb/'
2 || SUBSTR(FILE_NAME, 21) || ''';'
3 FROM DBA_DATA_FILES;
'SETNEWNAMEFORDATAFILE'||FILE_ID||'TO''+DATA/TRADEDB/'||SUBSTR(FILE_NAME,21)||''';'
--------------------------------------------------------------------------------------
SET NEWNAME FOR DATAFILE 1 TO '+DATA/tradedb/tradedb_system_1_4g';
SET NEWNAME FOR DATAFILE 2 TO '+DATA/tradedb/tradedb_undotbs1_1_4g';
SET NEWNAME FOR DATAFILE 3 TO '+DATA/tradedb/tradedb_undotbs1_2_4g';
SET NEWNAME FOR DATAFILE 4 TO '+DATA/tradedb/tradedb_undotbs1_3_4g';
SET NEWNAME FOR DATAFILE 5 TO '+DATA/tradedb/tradedb_undotbs1_4_4g';
SET NEWNAME FOR DATAFILE 6 TO '+DATA/tradedb/tradedb_undotbs1_5_4g';
SET NEWNAME FOR DATAFILE 7 TO '+DATA/tradedb/tradedb_sysaux_1_1g';
SET NEWNAME FOR DATAFILE 8 TO '+DATA/tradedb/tradedb_undotbs2_1_4g';
SET NEWNAME FOR DATAFILE 9 TO '+DATA/tradedb/tradedb_undotbs2_2_4g';
SET NEWNAME FOR DATAFILE 10 TO '+DATA/tradedb/tradedb_undotbs2_3_4g';
SET NEWNAME FOR DATAFILE 11 TO '+DATA/tradedb/tradedb_undotbs2_4_4g';
SET NEWNAME FOR DATAFILE 12 TO '+DATA/tradedb/tradedb_undotbs2_5_4g';
SET NEWNAME FOR DATAFILE 13 TO '+DATA/tradedb/tradedb_users_1_200m';
SET NEWNAME FOR DATAFILE 14 TO '+DATA/tradedb/tradedb_ndmain_1_4g';
SET NEWNAME FOR DATAFILE 15 TO '+DATA/tradedb/tradedb_ndmain_2_4g';
SET NEWNAME FOR DATAFILE 16 TO '+DATA/tradedb/tradedb_ndmain_3_4g';
SET NEWNAME FOR DATAFILE 17 TO '+DATA/tradedb/tradedb_anhui_1';
SET NEWNAME FOR DATAFILE 18 TO '+DATA/tradedb/tradedb_anhui_2';
SET NEWNAME FOR DATAFILE 19 TO '+DATA/tradedb/tradedb_anhui_3';
SET NEWNAME FOR DATAFILE 20 TO '+DATA/tradedb/tradedb_anhui_4';
SET NEWNAME FOR DATAFILE 21 TO '+DATA/tradedb/tradedb_zhejiang_1_4g';
SET NEWNAME FOR DATAFILE 22 TO '+DATA/tradedb/tradedb_zhejiang_2_4g';
SET NEWNAME FOR DATAFILE 23 TO '+DATA/tradedb/tradedb_zhejiang_3_4g';
SET NEWNAME FOR DATAFILE 24 TO '+DATA/tradedb/tradedb_zhejiang_4_4g';
SET NEWNAME FOR DATAFILE 25 TO '+DATA/tradedb/tradedb_zhejiang_5_4g';
SET NEWNAME FOR DATAFILE 26 TO '+DATA/tradedb/tradedb_zhejiang_6_4g';
SET NEWNAME FOR DATAFILE 27 TO '+DATA/tradedb/tradedb_zhejiang_7_4g';
SET NEWNAME FOR DATAFILE 28 TO '+DATA/tradedb/tradedb_zhejiang_8_4g';
SET NEWNAME FOR DATAFILE 29 TO '+DATA/tradedb/tradedb_zhejiang_9_4g';
SET NEWNAME FOR DATAFILE 30 TO '+DATA/tradedb/tradedb_zhejiang_10_4g';
SET NEWNAME FOR DATAFILE 31 TO '+DATA/tradedb/tradedb_zhejiang_11_4g';
SET NEWNAME FOR DATAFILE 32 TO '+DATA/tradedb/tradedb_zhejiang_12_4g';
SET NEWNAME FOR DATAFILE 33 TO '+DATA/tradedb/tradedb_zhejiang_13_4g';
SET NEWNAME FOR DATAFILE 34 TO '+DATA/tradedb/tradedb_zhejiang_14_4g';
SET NEWNAME FOR DATAFILE 35 TO '+DATA/tradedb/tradedb_zhejiang_15_4g';
SET NEWNAME FOR DATAFILE 36 TO '+DATA/tradedb/tradedb_zhejiang_16_4g';
SET NEWNAME FOR DATAFILE 37 TO '+DATA/tradedb/tradedb_zhejiang_17_4g';
SET NEWNAME FOR DATAFILE 38 TO '+DATA/tradedb/tradedb_zhejiang_18_4g';
SET NEWNAME FOR DATAFILE 39 TO '+DATA/tradedb/tradedb_sysaux_2_1g';
SET NEWNAME FOR DATAFILE 40 TO '+DATA/tradedb/tradedb_gpo_1_4g';
SET NEWNAME FOR DATAFILE 41 TO '+DATA/tradedb/tradedb_gpo_2_4g';
SET NEWNAME FOR DATAFILE 42 TO '+DATA/tradedb/tradedb_gpo_3_4g';
SET NEWNAME FOR DATAFILE 43 TO '+DATA/tradedb/tradedb_gpo_4_4g';
SET NEWNAME FOR DATAFILE 44 TO '+DATA/tradedb/tradedb_zhejiang_19_4g';
SET NEWNAME FOR DATAFILE 45 TO '+DATA/tradedb/tradedb_zhejiang_20_4g';
SET NEWNAME FOR DATAFILE 46 TO '+DATA/tradedb/tradedb_beijing_1_4g';
SET NEWNAME FOR DATAFILE 47 TO '+DATA/tradedb/tradedb_beijing_2_4g';
SET NEWNAME FOR DATAFILE 48 TO '+DATA/tradedb/tradedb_beijing_3_4g';
SET NEWNAME FOR DATAFILE 49 TO '+DATA/tradedb/tradedb_beijing_4_4g';
SET NEWNAME FOR DATAFILE 50 TO '+DATA/tradedb/tradedb_beijing_5_4g';
SET NEWNAME FOR DATAFILE 51 TO '+DATA/tradedb/tradedb_beijing_6_4g';
SET NEWNAME FOR DATAFILE 52 TO '+DATA/tradedb/tradedb_beijing_7_4g';
SET NEWNAME FOR DATAFILE 53 TO '+DATA/tradedb/tradedb_beijing_8_4g';
SET NEWNAME FOR DATAFILE 54 TO '+DATA/tradedb/tradedb_beijing_9_4g';
SET NEWNAME FOR DATAFILE 55 TO '+DATA/tradedb/tradedb_beijing_10_4g';
SET NEWNAME FOR DATAFILE 56 TO '+DATA/tradedb/tradedb_beijing_11_4g';
SET NEWNAME FOR DATAFILE 57 TO '+DATA/tradedb/tradedb_beijing_12_4g';
SET NEWNAME FOR DATAFILE 58 TO '+DATA/tradedb/tradedb_beijing_13_4g';
SET NEWNAME FOR DATAFILE 59 TO '+DATA/tradedb/tradedb_beijing_14_4g';
SET NEWNAME FOR DATAFILE 60 TO '+DATA/tradedb/tradedb_beijing_15_4g';
已选择60行。
到目前为止,所有的准备工作已经完成,下面可以开始数据库的恢复过程了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-627221/ ,如需转载,请注明出处,否则将追究法律责任。