ASM上的备份集如何转移到文件系统中

本文介绍了如何在Oracle ASM中进行备份集文件的复制操作,包括使用RMAN工具和dbms_file_transfer包两种方法,并对比了它们的特点。

在itpub上,看到一个问题,有关asm上的备份集里的文件的传输的。看到有关asm的提问越来越多了,也可以感觉到asm越来越使用的普及了。
该问题在http://www.itpub.net/thread-1299334-1-1.html
其中网友提出的最后的疑问应该是很多使用asm的朋友关心的。
我备份出来的是这个样子:
    +DDGG4/full_racdb1_01ld1sbj_1
没有办法像操作系统那样在+DDGG4下面再建立子目录啊?
另外,这个本地的 +DDGG4/full_racdb1_01ld1sbj_1 ,我要copy一份到异地,怎么copy ?
第一个问题,我在以前的文件里提到过很多次了,
方法可以用asmcmd,或者是直接在asm实例里用alter diskgroup add directory来实现。
这里后面的一个问题也许更是普遍的。由于asm是介于raw devices和os之间的一种方式,我们无法用类似os里的文件管理命令来实现,不过这个在11g r2里已经解决了。这里我们下面主要是针对11g r2之前的版本的。
方法有两个。
方法一:使用rman,rman是一个非常好的工具,不仅仅是备份的作用,如果你只用rman作备份的话,有些浪费了。
通过rman里的backup backupset可以达到用户的要求。
下面是演示过程。
先准备一个backupset。
这里我备份了单个的archivelog来做演示。
RMAN> backup archivelog sequence 83294;
Starting backup at 06-MAY-10
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=83294 recid=83294 stamp=718324431
channel ORA_DISK_1: starting piece 1 at 06-MAY-10
channel ORA_DISK_1: finished piece 1 at 06-MAY-10
piece handle=+DG1/soldb/backup/0dld1gpq_1_1_718324538_20100506 tag=TAG20100506T223536 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
Finished backup at 06-MAY-10
查看该backupset
RMAN> list backup of archivelog sequence 83294;
List of Backup Sets
===================
BS Key Size Device Type Elapsed Time Completion Time
——- ———- ———– ———— —————
8 97.50K DISK 00:00:01 06-MAY-10
BP Key: 3 Status: AVAILABLE Compressed: NO Tag: TAG20100506T223536
Piece Name: +DG1/soldb/backup/0dld1gpq_1_1_718324538_20100506
List of Archived Logs in backup set 8
Thrd Seq Low SCN Low Time Next SCN Next Time
—- ——- ———- ——— ———- ———
1 83294 3111066080 06-MAY-10 3111066263 06-MAY-10
下面我们使用rman把这个在asm里的备份集做到文件系统上使用
backup backupset就可以了
如下
RMAN> backup backupset 8 format ‘/export/home/oracle/1.dbf’;
Starting backup at 06-MAY-10
using channel ORA_DISK_1
input backupset count=13 stamp=718324538 creation_time=06-MAY-10
channel ORA_DISK_1: starting piece 1 at 06-MAY-10
channel ORA_DISK_1: backup piece +DG1/soldb/backup/0dld1gpq_1_1_718324538_20100506
piece handle=/export/home/oracle/1.dbf comment=NONE
channel ORA_DISK_1: finished piece 1 at 06-MAY-10
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 06-MAY-10
下面到文件系统下查看
[oracle@solaris ~]pwd
/export/home/oracle
[oracle@solaris ~]ls -al 1.dbf
-rw-r—– 1 oracle oinstall 100352 May 6 22:40 1.dbf
可以看到backupset已经在文件系统了,这里只有100K,这是我手工archive的一个日志,拿来做实验用的,没必要写满。
除了使用rman,我们还可以使用dbms_file_transfer这个包的copy_file来实现同样的过程,下面看看这个过程
先建立directory
SQL> create directory sourcedir as ‘+DG1/soldb/backup/’;
Directory created
SQL> create directory destdir as ‘/export/home/oracle/’;/0dld1gpq_1_1_718324538_20100506
Directory created
SQL> exec dbms_file_transfer.copy_file(’sourcedir’, ‘0dld1gpq_1_1_718324538_20100506′, ‘destdir’, ‘2.dbf’);
PL/SQL procedure successfully completed
这样我们已经完成了我们的目标了。
在目录下查看查看
[oracle@solaris ~]pwd
/export/home/oracle
[oracle@solaris ~]ls -al 2.dbf
-rw-r—– 1 oracle oinstall 100352 May 6 22:45 2.dbf
这两种方法都可以达到目的,但是还是有差异的,毕竟前一种方法是用rman的,所以rman里留下了记录
List of Backup Sets
===================
BS Key Size
——- ———-
8 97.50K
List of Archived Logs in backup set 8
Thrd Seq Low SCN Low Time Next SCN Next Time
—- ——- ———- ——— ———- ———
1 83294 3111066080 06-MAY-10 3111066263 06-MAY-10
Backup Set Copy #2 of backup set 8
Device Type Elapsed Time Completion Time Compressed Tag
———– ———— ————— ———- —
DISK 00:00:01 06-MAY-10 NO TAG20100506T223536
List of Backup Pieces for backup set 8 Copy #2
BP Key Pc# Status Piece Name
——- — ———– ———-
4 1 AVAILABLE /export/home/oracle/1.dbf
Backup Set Copy #1 of backup set 8
Device Type Elapsed Time Completion Time Compressed Tag
———– ———— ————— ———- —
DISK 00:00:01 06-MAY-10 NO TAG20100506T223536
List of Backup Pieces for backup set 8 Copy #1
BP Key Pc# Status Piece Name
——- — ———– ———-
3 1 AVAILABLE +DG1/soldb/backup/0dld1gpq_1_1_718324538_20100506
这里是没有第二个方法的记录的

<think>嗯,用户想了解如何使用RMAN从特定的备份集中恢复控制文件。首先,我需要回忆一下RMAN的相关操作步骤。记得恢复控制文件通常是在控制文件丢失或损坏的情况下进行的,而且需要启动到nomount状态。用户提到的是从特定的备份集恢复,而不是自动备份,所以可能需要先找到那个备份集的信息。 首先,用户可能需要先连接到目标数据库,可能需要使用rman target /,然后启动到nomount状态,因为没有控制文件的话,数据库无法正常启动。接下来,需要确定要使用的备份集。这时候可能需要使用list backup of controlfile命令来列出所有可用的控制文件备份,找到特定的备份集记录,比如备份集密钥或者标记。 然后,使用restore controlfile from backupset命令,并指定备份集的路径或者备份片名称。比如restore controlfile from '/path/to/backupset',或者使用备份集的密钥,如restore controlfile from backupset 1234。这里需要注意的是,如果备份集在快速恢复区或者其他目录,路径可能需要正确指定。 另外,用户可能还需要在恢复后执行alter database mount命令来加载数据库,接着可能需要用recover database和alter database open resetlogs来打开数据库。不过如果是从备份中恢复控制文件,可能需要进一步的恢复操作,比如恢复数据文件和应用归档日志。 还要注意,如果配置了控制文件的自动备份,通常恢复会更简单,但用户的问题是关于从特定备份集恢复,所以可能需要手动指定。此外,如果使用catalog命令将备份集注册到控制文件中,可能更方便查找,但用户的情况可能没有使用恢复目录,所以依赖目标数据库的控制文件。 另外,参考引用中的信息,比如引用[4]提到如果没有配置自动备份,可以从backupset中提取控制文件。还有引用[3]提到使用catalog start with来将备份文件纳入控制文件,这可能是在恢复之前需要做的步骤,如果备份集的位置有变化或者控制文件没有记录的话。 需要确保用户在执行恢复操作前,数据库处于正确的状态,比如nomount,并且备份集是可访问的。另外,权限问题也要考虑,比如RMAN是否有权限读取备份集文件。 可能的错误点包括路径错误、备份集不可用、备份集密钥不正确,或者没有正确启动到nomount状态。在步骤中需要详细说明这些注意事项,帮助用户避免常见问题。 最后,生成的相关问题应该围绕恢复控制文件的其他方法、验证备份集、处理恢复后的步骤,以及没有备份的情况如何处理。这些能帮助用户进一步理解RMAN的恢复机制。</think>### 使用RMAN从指定备份集恢复控制文件步骤 #### 1. 连接数据库并进入nomount状态 ```sql rman target / startup nomount; ``` 当控制文件丢失时,数据库只能启动到`nomount`状态[^4]。 #### 2. 定位控制文件备份集 ```sql list backup of controlfile; ``` 此命令显示所有控制文件备份记录,注意观察输出中的`BS Key`(备份集编号)和`Handle`(备份片路径)字段,例如: ``` BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ ------------------- 5 Full 1.23G DISK 00:01:30 2023-10-05 12:00:00 BP Key: 5 Status: AVAILABLE Handle: /u03/backup/ctl_20231005.bkp ``` #### 3. 执行恢复操作(两种方法) **方法一:通过备份片路径恢复** ```sql restore controlfile from '/u03/backup/ctl_20231005.bkp'; ``` **方法二:通过备份集编号恢复** ```sql restore controlfile from backupset 5; -- 使用list命令查看到的BS Key ``` #### 4. 挂载数据库 ```sql alter database mount; ``` #### 5. 后续恢复(可选) ```sql recover database; alter database open resetlogs; ``` 如果存在数据文件需要同步恢复,需执行`recover database`[^3]。 ### 关键注意事项 1. 必须确认备份集的物理文件存在且可访问 2. 恢复后的控制文件可能包含旧备份信息,需通过`crosscheck`验证备份有效性 3. 建议恢复后立即进行全库备份 4. 若使用ASM存储,路径格式应为`+DGNAME/...` ### 示例完整过程 ```sql rman target / startup nomount; list backup of controlfile; -- 确认BS Key=123 restore controlfile from backupset 123; alter database mount; crosscheck backup; recover database; alter database open resetlogs; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值