Bo's Oracle Station

查看: 1854|回复: 3

实验9b的案例求解

[复制链接]

11

主题

27

帖子

377

积分

版主

Rank: 7Rank: 7Rank: 7

积分
377
发表于 2014-7-15 10:35:26 | 显示全部楼层 |阅读模式
唐老师:
       好!
       之前做实验9b,因为是在ASM磁盘组上,理解不是特别清晰。所以破坏文件系统上的rcat数据库来实验9b,步骤如下:
       1.在数据库open的状态下,进/u01/app/oracle/oradata/rcat/下把user01.dbf用rm命令删掉
       2.shutdown immediate,然后再 startup,报datafile 4 的错误(因为被我删了)
       3.数据库的状态处于mount,而且我没做过rman备份
       4.这个user01.dbf是建库时就有的数据文件,不是建库后创建的
       5.然后trace出脚本,编辑它,去掉关于user01.dbf的这一行,跑一边脚本,到达mount,
       6.recover database,然后打开数据库,
       7.查一下v$datafile看到users表空间对应的数据文件处于recover,文件路径就是/u01/app/oracle/product/11.2.0/dbhome_1/dbs/MISSING00004,但实际上这个文件不存在

       请问唐老师,这个user01.dbf的文件就再也找不回来了么?
回复

使用道具 举报

75

主题

115

帖子

2772

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2772
发表于 2014-7-15 10:47:49 | 显示全部楼层
9b_当前控制文件损坏_下线user表空间完全恢复_用控制文件脚本_不需备份


文件系统模拟环境:
#!/bin/sh

###
### 1 Main Section Begin
###

# 0 Machine ID Begin

echo ""
echo "---------------------------------------------- LAB 9b ----------------------------------------------"
echo "当前控制文件损坏_下线user表空间完全恢复_用控制文件脚本_不需备份"
echo "---------------------------------------------- LAB 9b ----------------------------------------------"
echo ""
echo ""
echo "******************"
echo "你的主机信息如下:"
echo "******************"
ifconfig eth0 | head -n2 | tail -n1 | cut -f 2 -d : | cut -f 1 -d ' '
echo ""
hostname
echo ""
uname -a
echo ""
echo ""

# 0 Machine ID End
# 1 Oracle Open Test Begin

su - oracle -c "sqlplus /nolog" << EOF
conn  / as sysdba
set echo off
set feedback off
@/home/oracle/ptable.sql;
quit
EOF
echo " "

# 1 Oracle Open Test End
# 2 Create Table Begin

su - oracle -c "sqlplus /nolog" << EOF
conn  / as sysdba
set echo off
set feedback off
@/home/oracle/ctable.sql;
quit
EOF
echo ""

# 2 Create Table End
# 3 PreDelete Shutdown Yes/No Begin

su - oracle -c "rman target /" << EOF
delete noprompt backup of controlfile;
delete noprompt copy of controlfile;
EOF
echo ""

echo "***BEFORE TABLESPACE OFFLINE***"
echo "Next moment control script is going to be create ......"
echo "Display the spid number of session here: "
su - oracle -c "sqlplus /nolog" << EOF
conn / as sysdba
select spid from v\$process p , v\$session  s , v\$mystat  m  where p.addr=s.paddr and m.sid=s.sid  and rownum=1;
alter database backup controlfile to trace;
quit
EOF
echo ""


su - oracle -c "sqlplus /nolog" << EOF
conn  / as sysdba
alter tablespace users offline;
quit
EOF
echo ""

echo "***AFTER TABLESPACE OFFLINE***"
echo "Next moment control script is going to be create ......"
echo "Display the spid number of session here: "
su - oracle -c "sqlplus /nolog" << EOF
conn / as sysdba
select spid from v\$process p , v\$session  s , v\$mystat  m  where p.addr=s.paddr and m.sid=s.sid  and rownum=1;
alter database backup controlfile to trace;
quit
EOF
echo ""





# 3 PreDelete Shutdown Yes/No End
# 4 Delete Files Begin

find /u01/app/oracle/oradata -not -wholename "*rman*" -not -wholename "*emrep*" -a   -name "*.ctl"  -exec rm -f {} \;
find /u01/app/oracle/flash_recovery_area  -name "*.ctl"  -exec rm -f {} \;
#find /u01/app/oracle/flash_recovery_area  -name "*XXX*.dbf"  -exec rm -f {} \;
#find /u01/app/oracle/admin   -name "*XXX*" -exec rm -f {} \;
#find /u01/app/oracle/product/10.2.0/db_1/dbs  -name "*XXX*" -exec rm -f {} \;
echo ""
#su - oracle -c " export ORACLE_SID=+ASM;  asmcmd "<<EOF
#EOF
#echo ""

# 4 Delete Files End
# 5 AfterDelete Test Begin

su - oracle -c "sqlplus /nolog" << EOF
conn  / as sysdba
set echo off
set feedback off
@/home/oracle/ttable.sql;
quit
EOF
echo " "

# 5 AfterDelete Test End
# 6 AfterDelete Shutdown Yes/No Begin

su - oracle -c "sqlplus /nolog" << EOF
conn  / as sysdba
set echo off
set feedback off
shutdown abort
quit
EOF
echo ""

# 6 AfterDelete Shutdown Yes/No End
# 7 Get Clear Begin

rm -f /home/oracle/ptable.sql
rm -f /home/oracle/ctable.sql
rm -f /home/oracle/ttable.sql
rm -f /usr/bin/bclcustom.sh

# 7 Get Clear End

echo "THE END"

###
### 1 Main Section End
###




sql 文件: ctable.sql

--drop table hr.edu234;
--
set echo off
set feedback off
select  * from sys.tname;
create table  hr.edu234 ( a number ) tablespace users;
alter system switch logfile;
insert into hr.edu234 values(1);
alter system switch logfile;
commit;
alter system switch logfile;
insert into hr.edu234 values(2);
alter system switch logfile;
commit;
insert into hr.edu234 values(3);
alter system switch logfile;
commit;
insert into hr.edu234 values(4);
alter system switch logfile;
commit;
insert into hr.edu234 values(5);
commit;
--
set serveroutput on
exec dbms_output.put_line(' ');
exec dbms_output.put_line('************************** ');
exec dbms_output.put_line('Table successfully created.');
exec dbms_output.put_line('************************** ');
exec dbms_output.put_line(' ');
~                                 



环境模拟得有偏差,是下线不是删除

回复 支持 反对

使用道具 举报

11

主题

27

帖子

377

积分

版主

Rank: 7Rank: 7Rank: 7

积分
377
 楼主| 发表于 2014-7-15 10:50:15 | 显示全部楼层
admin 发表于 2014-7-15 10:47
9b_当前控制文件损坏_下线user表空间完全恢复_用控制文件脚本_不需备份

我知道,事后我发现例子是下线,我把这个文件rm了,那么这个文件就找不回来了是么
回复 支持 反对

使用道具 举报

75

主题

115

帖子

2772

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2772
发表于 2014-7-15 10:54:32 | 显示全部楼层
有备份,吧控制文件写回来,按照1a做, 可以回来。没备份无法做。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-11-22 11:58 , Processed in 0.037436 second(s), 24 queries .

快速回复 返回顶部 返回列表