本文共 6337 字,大约阅读时间需要 21 分钟。
今天尝试了一下,在Linux下删除一个数据文件,然后进行回复。
环境:数据库在Open的状态,然后rm -rf users.dbf (删除users表空间),最后找回users.dbf文件。
在回复的时候,回复的方法跟数据库的版本关系不大(因为是物理文件),只是跟操作系统有一定的关系,如:Red hat Linux , Solaris Linux 等等。
下面进行演示:
删除users表空间.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | select name from v $ datafile ; NAME -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- / u01 / app / oracle / oradata / prod / disk4 / system01 . dbf / u01 / app / oracle / oradata / prod / disk2 / undotbs01 . dbf / u01 / app / oracle / oradata / prod / disk5 / sysaux01 . dbf / u01 / app / oracle / oradata / prod / disk5 / bigtbs01 . dbf / u01 / app / oracle / oradata / prod / disk5 / indx01 . dbf / u01 / app / oracle / oradata / prod / disk2 / users01 . dbf / u01 / app / oracle / oradata / prod / disk3 / oltp01 . dbf 7 rows selected . SQL > ! rm / u01 / app / oracle / oradata / prod / disk2 / users01 . dbf |
尝试在users表空间上建立名字为abcd123的表,已经没法建立了。
1 2 3 4 5 6 7 8 9 | SQL > create table abcd123 tablespace users as select * from v $ instance ; create table abcd123 tablespace users as select * from v $ instance * ERROR at line 1 : ORA - 01116 : error in opening database file 6 ORA - 01110 : data file 6 : '/u01/app/oracle/oradata/prod/disk2/users01.dbf' ORA - 27041 : unable to open file Linux Error : 2 : No such file or directory Additional information : 3 |
通过命令,我们可以看到当前数据库实例的dbwr的PID。因为我同一台主机上有两个实例,故有2个。
一个为prod,另一个为oms。
1 2 3 | $ ps - ef | grep dbw0 | grep - v grep oracle 11872 1 0 21 : 46 ? 00 : 00 : 00 ora_dbw0_prod oracle 11951 1 0 21 : 47 ? 00 : 00 : 01 ora_dbw0_oms |
4、因为dbwr会打开所有数据文件的句柄。所以可以进入proc目录进行查找,格式为:
cd /prod/PID/fd
此处,fd为文件描述符。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [ oracle @ prod fd ] $ cd / proc / 11872 / fd [ oracle @ prod fd ] $ ls - l total 30 lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 0 -> / dev / null lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 1 -> / dev / null lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 10 -> / u01 / app / oracle / product / 10.2.0 / db_1 / rdbms / audit / ora_11859 . aud lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 11 -> / dev / zero lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 12 -> / dev / zero lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 13 -> / u01 / app / oracle / product / 10.2.0 / db_1 / rdbms / mesg / oraus . msb lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 14 -> / u01 / app / oracle / product / 10.2.0 / db_1 / dbs / hc_prod . dat lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 15 -> / u01 / app / oracle / product / 10.2.0 / db_1 / dbs / lkPROD lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 16 -> / u01 / app / oracle / oradata / prod / disk1 / control01 . ctl lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 17 -> / u01 / app / oracle / oradata / prod / disk2 / control02 . ctl lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 18 -> / u01 / app / oracle / oradata / prod / disk3 / control03 . ctl lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 19 -> / u01 / app / oracle / oradata / prod / disk4 / system01 . dbf lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 2 -> / dev / null lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 20 -> / u01 / app / oracle / oradata / prod / disk2 / undotbs01 . dbf lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 21 -> / u01 / app / oracle / oradata / prod / disk5 / sysaux01 . dbf lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 22 -> / u01 / app / oracle / oradata / prod / disk5 / bigtbs01 . dbf lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 23 -> / u01 / app / oracle / oradata / prod / disk5 / indx01 . dbf lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 24 -> / u01 / app / oracle / oradata / prod / disk2 / users01 . dbf ( deleted ) lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 25 -> / u01 / app / oracle / oradata / prod / disk3 / oltp01 . dbf lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 26 -> / u01 / app / oracle / oradata / prod / disk1 / temp01 . dbf lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 27 -> / u01 / app / oracle / oradata / prod / disk3 / lmtemp201 . dbf lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 28 -> / u01 / app / oracle / oradata / prod / disk4 / lmtemp201 . dbf lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 29 -> / u01 / app / oracle / product / 10.2.0 / db_1 / rdbms / mesg / oraus . msb lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 3 -> / dev / null lr - x -- -- -- 1 oracle dba 64 May 14 22 : 47 4 -> / dev / null l - wx -- -- -- 1 oracle dba 64 May 14 22 : 47 5 -> / u01 / app / oracle / admin / udump / prod_ora_11859 . trc l - wx -- -- -- 1 oracle dba 64 May 14 22 : 47 6 -> / u01 / app / oracle / admin / bdump / alert_prod . log lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 7 -> / u01 / app / oracle / product / 10.2.0 / db_1 / dbs / hc_prod . dat l - wx -- -- -- 1 oracle dba 64 May 14 22 : 47 8 -> / u01 / app / oracle / admin / bdump / alert_prod . log lrwx -- -- -- 1 oracle dba 64 May 14 22 : 47 9 -> / u01 / app / oracle / product / 10.2.0 / db_1 / dbs / lkinstprod ( deleted ) [ oracle @ prod fd ] $ |
我们可以清楚的看到 /u01/app/oracle/oradata/prod/disk2/users01.dbf (deleted) 的字样,表示此文件已经被删掉了。
通过cp命令,把语句柄拷贝回原来的位置。
cp 24 /u01/app/oracle/oradata/prod/disk2/users01.dbf
此处的24为其给出的编号。
执行以下SQL命令:
1 2 3 4 5 6 7 8 9 10 11 | SQL > alter database datafile 6 offline ; Database altered . SQL > recover datafile 6 ; Media recovery complete . SQL > alter database datafile 6 online ; Database altered . SQL > |
至此,回复完成!
我们重新尝试在users 表空间上建立一个table。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | SQL > create table abcd123 tablespace users as select * from v $ instance ; Table created . SQL > select * from abcd123 ; INSTANCE_NUMBER INSTANCE_NAME -- -- -- -- -- -- -- - -- -- -- -- -- -- -- -- HOST_NAME -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- VERSION STARTUP_T STATUS PAR THREAD # ARCHIVE LOG_SWITCH_WAIT -- -- -- -- -- -- -- -- - -- -- -- -- - -- -- -- -- -- -- -- - -- -- -- -- -- -- -- -- - -- -- -- -- -- -- -- - LOGINS SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST BLO -- -- -- -- -- -- - -- -- -- -- -- -- -- -- - -- -- -- -- -- -- -- -- -- -- -- -- -- - -- - 1 prod prod 10.2.0.1.0 16 - APR - 12 OPEN NO 1 STARTED ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NO SQL > |
我们可以发现,建立成功了,说明回复成功,
转载地址:http://pvhmb.baihongyu.com/