oracle 备份 裸设备,玩转裸设备的备份恢复

近期在linux下测试了数据的备份和恢复:

1、裸设备的创建:

在/etc/sysconfig/rawdevices 下添加如下:/dev/raw/raw1   /dev/sdb1 (100M)

/dev/raw/raw2   /dev/sdb2 (120M)/dev/raw/raw3   /dev/sdb3 (130M)

/dev/raw/raw4   /dev/sdb4 (150M)/dev/raw/raw5   /dev/sdc1 (200M)/dev/raw/raw6   /dev/sdc2 (230M)/dev/raw/raw7   /dev/sdc3 (250M)/dev/raw/raw8   /dev/sdc4 (320M)/dev/raw/raw9   /dev/sdd1 (100M)2、要使映射立即生效,以 root 用户身份执行以下命令:[root@dg ~]# /sbin/service rawdevices restart

Assigning devices:

/dev/raw/raw1  --&gt   /dev/sdb1

/dev/raw/raw8:  bound to major 8, minor 17

/dev/raw/raw2  --&gt   /dev/sdb2

/dev/raw/raw2:  bound to major 8, minor 18

/dev/raw/raw3  --&gt   /dev/sdb3

/dev/raw/raw3:  bound to major 8, minor 19

/dev/raw/raw4  --&gt   /dev/sdb4

/dev/raw/raw4:  bound to major 8, minor 20

/dev/raw/raw5  --&gt   /dev/sdc1

/dev/raw/raw5:  bound to major 8, minor 33

/dev/raw/raw6  --&gt   /dev/sdc2

/dev/raw/raw6:  bound to major 8, minor 34

/dev/raw/raw7  --&gt   /dev/sdc3

/dev/raw/raw7:  bound to major 8, minor 35

/dev/raw/raw8  --&gt   /dev/sdc4

/dev/raw/raw9:  bound to major 8, minor 36

/dev/raw/raw9  --&gt   /dev/sdd1

Error setting raw device (Device or resource busy)

done3、修改权限:# chown oracle:dba /dev/raw/raw[1-9]

# chmod 660 /dev/raw/raw[1-9][root@dg ~]# ls -lat /dev/raw/raw*crw-rw----  1 oracle oinstall 162, 9  9ÔÂ 13 12:19 /dev/raw/raw9

crw-rw----  1 oracle oinstall 162, 7  9ÔÂ 13 12:19 /dev/raw/raw8

crw-rw----  1 oracle oinstall 162, 6  9ÔÂ 13 12:19 /dev/raw/raw7

crw-rw----  1 oracle oinstall 162, 5  9ÔÂ 13 12:19 /dev/raw/raw6

crw-rw----  1 oracle oinstall 162, 4  9ÔÂ 13 12:19 /dev/raw/raw5

crw-rw----  1 oracle oinstall 162, 3  9ÔÂ 13 12:19 /dev/raw/raw4

crw-rw----  1 oracle oinstall 162, 2  9ÔÂ 13 12:19 /dev/raw/raw3

crw-rw----  1 oracle oinstall 162, 8  9ÔÂ 13 12:19 /dev/raw/raw2

crw-rw----  1 oracle oinstall 162, 1  9ÔÂ 13 11:44 /dev/raw/raw14、修改 /etc/udev/permissions.d/50-udev.permissions。原始设备在引导时会重新映射。默认情况下,在引导时原始设备的拥有者将更改为 root 用户。如果拥有者不是 oracle 用户,则 ASM 在访问共享分区时会出现问题。在 /etc/udev/permissions.d/50-udev.permissions 中为原始行“raw/*:root:disk:0660”添加注释,然后添加一个新行“raw/*:oracle:dba:0660”。/etc/udev/permissions.d/50-udev.permissions# raw devices

ram*:root:disk:0660

#raw/*:root:disk:0660

raw/*:oracle:dba:0660(备注:第4步非常重要,如果没有第4步,那么机器重启后:[root@dg ~]# ls -lat /dev/raw/raw*crw-rw----  1 root disk 162, 9  9ÔÂ 13 12:19 /dev/raw/raw9

crw-rw----  1 root disk 162, 7  9ÔÂ 13 12:19 /dev/raw/raw8

crw-rw----  1 root disk 162, 6  9ÔÂ 13 12:19 /dev/raw/raw7解决的办法:只有将上述裸磁盘都重新重做第三步。否则如果在裸设备建了表空间使用到裸设备文件,那么数据库一定会报错而启动不了。在dg_dbwr_5903.trc报如下错误:Instance name: dg

Redo thread mounted by this instance: 1

Oracle process number: 5

Unix process pid: 5903, image:(DBW0)*** 2008-09-13 10:05:48.436

*** SERVICE NAME:() 2008-09-13 10:05:48.412

*** SESSION ID:(167.1) 2008-09-13 10:05:48.411

ORA-01157: ????/?????? 5 - ??? DBWR ????

ORA-01110: ???? 5: '/dev/raw/raw1'

ORA-27041: ??????

Linux Error: 13: Permission denied

Additional information: 2如果修改完权限,任然启动不了数据库,那么只能借助RMAN的全备份进行恢复。做如下测试:SQL> create tablespace test datafile '/dev/raw/raw1' size 102300

2  autoextend on next 10M maxsize unlimited

3  extent management local;表空间已创建。

SQL> conn as sysdba

已连接。

SQL> @insertPL/SQL 过程已成功完成。测试一:裸设备备份的三种方法:1、采用dd命令拷贝:使用dd命令拷贝到文件系统,或者裸设备都可以;例如:拷贝到文件系统dd if=/dev/raw/raw1 f=/oracle/test.dbf拷贝到裸设备:dd if=/dev/raw/raw1 f=/dev/raw/raw22、 采用RMAN的COPYRMAN>copy datafile '/dev/raw/raw1' to '/oracle/test.dbf'恢复的时候使用:dd if=/oracle/test.dbf f=/dev/raw/raw13、采用RMAN的全备方式RMAN>backup database;测试二:数据库故障恢复的过程:SQL> startup

ORACLE 例程已经启动。Total System Global Area  432013312 bytes

Fixed Size                  1219808 bytes

Variable Size             125829920 bytes

Database Buffers          297795584 bytes

Redo Buffers                7168000 bytes

数据库装载完毕。

ORA-01122: 数据库文件 5 验证失败

ORA-01110: 数据文件 5: '/dev/raw/raw1'

ORA-01251: 读取了文件号 5 的未知文件头部版本将原有test1.dbf的数据全部拷贝到raw1中.dd [root@dg ~]# dd if=/oracle/test1.dbf f=/dev/raw/raw1

读入了 204768+0 个块

读出了 204768+0 个块SQL> startup

ORACLE 例程已经启动。Total System Global Area  432013312 bytes

Fixed Size                  1219808 bytes

Variable Size             125829920 bytes

Database Buffers          297795584 bytes

Redo Buffers                7168000 bytes

数据库装载完毕。

ORA-01113: 文件 5 需要介质恢复

ORA-01110: 数据文件 5: '/dev/raw/raw1'

SQL> recover database;

完成介质恢复。数据库能够正常启动。正常启动的DUMP文件(节选介质恢复过程):/oracle/admin/dg/udump/dg_ora_6440.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

Start recovery at thread 1 ckpt scn 555262 logseq 6 block 1080

*** 2008-09-14 09:13:03.560

Media Recovery add redo thread 1

*** 2008-09-14 09:13:03.757

Recovery of Online Redo Log: Thread 1 Group 2 Seq 6 Reading mem 0*** 2008-09-14 09:13:03.991

Recovery of Online Redo Log: Thread 1 Group 3 Seq 7 Reading mem 0Read rate (ASYNC): 4106Kb in 0.81s => 4.95 Mb/sec

Total physical reads: 5261Kb

Longest record: 11Kb, moves: 0/9716 (0%)

Change moves: 13/185 (7%), moved: 0Mb

Longest LWN: 144Kb, moves: 0/1792 (0%), moved: 0Mb

Last redo scn: 0x0000.0008dda0 (581024)分析出:数据库从最后一次CKPT点为555262,联机日志保留最近的为581024,显然数据库做的联机日志恢复,恢复到581024状态。----------------------------------------------

*** 2008-09-14 09:13:04.380

Media Recovery drop redo thread 1

File 5 (stop scn 581025) completed recovery at checkpoint scn 581025

ARCH: Connecting to console port...

Successfully allocated 2 recovery slaves

Using 543 overflow buffers per recovery slave

Thread 1 checkpoint: logseq 7, block 4191, scn 580116

cache-low rba: logseq 7, block 5270    on-disk rba: logseq 7, block 5884, scn 581025

start recovery at logseq 7, block 5270, scn 0

数据文件的介质恢复,当察看到cache最低的RbA为580116,需要恢复到581025,因此数据库会提示要介质恢复。数据库启动后的SCN:SQL> select dbms_flashback.get_system_change_number from dual;GET_SYSTEM_CHANGE_NUMBER

------------------------

580242最终数据库达到580242的状态,介质恢复完毕。测试三:SEEK和SKIP到底是否有区别:[root@dg ~]# dd if=/dev/raw/raw1 f=/dev/raw/raw2 bs=4k skip=1

读入了 25595+0 个块

输出了 25595+0 个块SQL> startup

ORACLE 例程已经启动。Total System Global Area  432013312 bytes

Fixed Size                  1219808 bytes

Variable Size             134218528 bytes

Database Buffers          289406976 bytes

Redo Buffers                7168000 bytes

数据库装载完毕。

ORA-01122: 数据库文件 5 验证失败

ORA-01110: 数据文件 5: '/dev/raw/raw1'

ORA-01251: 读取了文件号 5 的未知文件头部版本分析原因:在LIUNX下没有4K的保留块,所以直接这样拷贝肯定会将文件头跳过一个字节.[root@dg ~]# dd if=/dev/raw/raw1 f=/dev/raw/raw3 bs=4k seek=1

读入了 25596+0 个块

输出了 25596+0 个块SQL> startup

ORACLE 例程已经启动。Total System Global Area  432013312 bytes

Fixed Size                  1219808 bytes

Variable Size             134218528 bytes

Database Buffers          289406976 bytes

Redo Buffers                7168000 bytes

数据库装载完毕。

ORA-01122: 数据库文件 5 验证失败

ORA-01110: 数据文件 5: '/dev/raw/raw1'

ORA-01251: 读取了文件号 5 的未知文件头部版本拷贝出来文件的字节数没错,但是文件头跳出了一个字节,所以找不到文件头故抱错。[root@dg udump]# dd if=/dev/raw/raw10 f=/dev/raw/raw1 bs=4k

读入了 25596+0 个块

输出了 25596+0 个块SQL> startup

ORACLE 例程已经启动。Total System Global Area  432013312 bytes

Fixed Size                  1219808 bytes

Variable Size             134218528 bytes

Database Buffers          289406976 bytes

Redo Buffers                7168000 bytes

数据库装载完毕。

数据库已经打开。分析原因: 如果不考虑保留块,拷贝正常,说明在LINUX下没有保留块.针对BS=4K来讲,在AIX上保留块设置不对,报不让拷贝错误,但是在LIUNX上,可以不用考虑.结论:SEEK和SKIP果然有区别,如果有4K保留空间的话,备份裸设备的时候考虑使用SKIP;恢复的时候使用SEEK进行恢复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值