2024年3月12日发(作者:)

玩转裸设备的备份恢复

近期在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 --> /dev/sdb1

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

/dev/raw/raw2 --> /dev/sdb2

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

/dev/raw/raw3 --> /dev/sdb3

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

/dev/raw/raw4 --> /dev/sdb4

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

/dev/raw/raw5 --> /dev/sdc1

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

/dev/raw/raw6 --> /dev/sdc2

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

/dev/raw/raw7 --> /dev/sdc3

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

/dev/raw/raw8 --> /dev/sdc4

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

/dev/raw/raw9 --> /dev/sdd1

Error setting raw device (Device or resource busy)

done

3、修改权限:

# 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/raw1

4、修改 /etc/udev/permissions.d/sions。原始设备在引导时会重新映射。默认

情况下,在引导时原始设备的拥有者将更改为 root 用户。如果拥有者不是 oracle 用户,

则 ASM 在访问共享分区时会出现问题。在 /etc/udev/permissions.d/sions 中

为原始行“raw/*:root:disk:0660”添加注释,然后添加一个新行“raw/*:oracle:dba:0660”。

/etc/udev/permissions.d/sions

# 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_报如下错误:

Instance name: dg

Redo thread mounted by this instance: 1

Oracle process number: 5

Unix process pid: 5903, image:oracle@dg(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> connsys/oracle@dgas sysdba

已连接。