暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle(十六)手工管理的备份恢复(实验)Ⅲ

280
//
Oracle 11g
//


Oracle备份恢复


太久没更技术文章了,听说你们想我了hahah

今天小陈给你们show上8个实验,瑟瑟发抖ing



实验一:控制文件备份及其恢复

Step1:连接实例,启动数据库

[oracle@oracle ~]$ sqlplus as sysdba


Step2:备份控制文件

SQL> alter database backup controlfile to '/u01/tt.ctl';


Step3:查看控制文件路径并且删除控制文件

SQL> show parameter control;

SQL> !rm -rf u01/app/oracle/oradata/db01/control01.ctl

SQL> !rm -rf u01/app/oracle/fast_recovery_area/db01/control02.ctl


Step4:重启数据库并查看状态

SQL> startup force;

SQL> select status from v$instance;


Step5:复制控制文件并启动数据库到mount状态

SQL> !cp u01/tt.ctl u01/app/oracle/oradata/db01/control01.ctl

SQL> !cp u01/tt.ctl u01/app/oracle/fast_recovery_area/db01/control02.ctl

SQL> alter database mount;

此时数据库不能启动到open状态


Step6:必须使用recover恢复备份控制文件


Step7:启动数据库(清空日志)

SQL> alter database open resetlogs;



实验二:数据结构修改后丢失所有控制文件


Step1:备份控制文件

SQL> alter database backup controlfile to '/u01/con.ctl';


Step2:查看当前数据文件

SQL> select name from v$datafile;


Step3:创建数据文件

SQL> create tablespace t1 datafile '/u01/app/oracle/oradata/db01/t1.dbf' size 10m autoextend on;

SQL> create table a(id number) tablespace t1;


Step4:备份、查看控制文件路径并删除

SQL> alter database backup controlfile to '/u01/tt.ctl';

SQL> show parameter control;

SQL> !rm -rf u01/app/oracle/oradata/db01/control01.ctl

SQL> !rm -rf u01/app/oracle/fast_recovery_area/db01/control02.ctl


Step5:重启数据库

SQL> startup force;


Step6:复制控制文件并启动数据库到mount状态

SQL> !cp u01/con.ctl u01/app/oracle/oradata/db01/control01.ctl 

SQL> !cp u01/con.ctl u01/app/oracle/fast_recovery_area/db01/control02.ctl

SQL> alter database mount;


Step7:启动到open状态

SQL> alter database open resetlogs;

(此时启动不了数据库到open状态)


Step8:使用recover恢复

SQL> recover database using backup controlfile;

此时报错。


Step9:查看当前的数据文件并将重命名数据文件名


Step10:重新使用recover恢复


Step11:使用resetlog启动数据到open状态

SQL> alter database open resetlogs;



实验三:数据库修改后脱机或只读表空间


Step1:备份控制文件

SQL> alter database backup controlfile to trace as '/u01/control.sql';

SQL> alter database backup controlfile to '/u01/con1.ctl';


Step2:创建表空间并创建新表

SQL> create tablespace t2 datafile '/u01/app/oracle/oradata/db01/t2.dbf' size 20m autoextend on;

SQL> create table b(id number) tablespace t2;

SQL> insert into b values(10);

SQL> commit;

SQL> alter tablespace t2 read only


Step3:查看控制文件并删除并重启数据库

SQL> show parameter control;

SQL> !rm -rf u01/app/oracle/oradata/db01/control01.ctl

SQL> !rm -rf u01/app/oracle/fast_recovery_area/db01/control02.ctl


Step4: 运行备份控制文件脚本

SQL> @/u01/control.sql


Step5:recover恢复控制文件

此时是无法直接使用open语句直接启动到open状态的。


Step6:查看数据文件并重命名

SQL> select name from v$datafile;

SQL> alter database rename file '/u01/app/oracle/product/11.2.0/db_1/dbs/UNNAMED00006' to '/u01/app/oracle/oradata/db01/t2.dbf';


Step7:再次执行recover恢复控制文件


Step8:启动数据库

SQL> alter database open resetlogs;


Step9:查看当前数据文件信息

SQL> select name, status from v$datafile;


Step10:修改表空间为读写并验证表是否还在

SQL> alter tablespace t2 read write;

SQL> select * from b;

证明此时还在



实验四:非当前日志文件组丢失


Step1:查看当前日志情况

SQL> select * from v$log;


Step2:查看当前日志文件

SQL> select * from v$logfile;


Step3:删除非当前使用状态的其他日志文件

SQL> !rm u01/app/oracle/oradata/db01/redo02.log

SQL> !rm u01/app/oracle/oradata/db01/redo03.log


Step4:重启数据库报错

SQL> startup force;


Step5:重新启动数据库到mount状态

SQL> quit

[oracle@oracle ~]$ sqlplus as sysdba

SQL> startup mount;


Step6:清空未归档日志文件

SQL> alter database clear unarchived logfile group 2;

SQL> alter database clear unarchived logfile group 3;


Step7:启动数据库到mount状态

SQL> alter database open;


Step8:查看当前日志文件

SQL> select * from v$logfile; 

(此时都已经恢复)



实验五:非归档丢失系统表空间


Step1:查看当前数据库归档状态

SQL> select log_mode from v$database;


Step2:开启数据库到未归档状态

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database noarchivelog;

SQL> alter database open;


Step3:查看当前数据文件

SQL> select name from v$datafile;


Step4:关机并进行冷备份

SQL> shutdown immediate;

SQL>!cp  u01/app/oracle/oradata/db01/system01.dbf  /u01/app/oracle/oradata/db01/system11.dbf


Step5:在用户表空间中创建表t3,并执行日志切换

SQL> create table t3 tablespace users as select * from scott.emp;

SQL> alter system switch logfile;

SQL>

SQL>

SQL>

SQL>


Step6:删除系统表空间,并重启数据库

SQL> !rm u01/app/oracle/oradata/db01/system01.dbf

SQL> startup force;


Step7:移动备份的表空间到原位置,recover数据库

SQL> !mv u01/app/oracle/oradata/db01/system11.dbf u01/app/oracle/oradata/db01/system01.dbf


Step8:启动数据库,执行忽略检查点检查语句,重新recover数据库

SQL> alter system set "_allow_resetlogs_corruption" = true scope = spfile;

SQL> startup force;


Step9:启动数据库到open状态并且清空日志,并退出当前连接

SQL> alter database open resetlogs;

SQL> quit


Step10:重新连接实例并启动数据库并取消不执行检查点的操作

SQL> startup

SQL> alter system reset "_allow_resetlogs_corruption" scope =spfile sid ='*';


Step11:关机重启数据库生效

SQL> shutdown immediate;

SQL> startup

注意:未开启归档丢失的系统表空间是没办法恢复的。



实验六:归档丢失系统表空间


Step1:查看当前归档状态

不开归档无法执行热备份)

SQL> archive log list;


Step2:开启归档

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;


Step3:启动数据库到open状态,开启热备份,并查看当前数据文件

SQL> alter database open;

SQL> alter tablespace system begin backup;

SQL> select name from v$datafile;


Step4:备份系统表空间并且停止热备份

SQL> !cp u01/app/oracle/oradata/db01/system01.dbf u01/app/oracle/oradata/db01/system01.dbf.bak

SQL> alter tablespace system end backup;


Step5:创建表tt并且执行日志文件切换

SQL> create table tt as select * from scott.emp;

SQL> alter system switch logfile;

SQL>

SQL> /

SQL> /

SQL> /


Step6:删除系统表空间

SQL> !rm -rf /u01/app/oracle/oradata/db01/system01.dbf

SQL> startup force


Step7:重启数据库,将备份还原

SQL> startup force;

SQL> !mv /u01/app/oracle/oradata/db01/system01.dbf.bak /u01/app/oracle/oradata/db01/system01.dbf


Step8:recover数据库


Step9:验证是否已经成功

SQL> select count(*) from tt;

(开启归档后丢失的系统表空间可恢复并保留数据)



实验七:热备份user表空间


Step1:查看user表空间的存放位置。

SQL> select name from v$datafile;


Step2:将表空间设置为只读模式。

SQL> alter tablespace users read only;


Step3:热备份users表空间。

SQL> host cp /u01/app/oracle/oradata/db01/users01.dbf /u01/backup


Step4:将表空间开启到读写模式。

SQL> alter tablespace users read write;



实验八:非归档丢失数据文件


Step1:开启数据库到mount状态并关闭归档状态,并开启数据库到open状态

SQL> startup mount;

SQL> alter database noarchivelog;

SQL> alter database open;


Step2:创建t3表空间并查看当前数据文件

SQL> create tablespace t3 datafile '/u01/app/oracle/oradata/db01/t3.dbf' size 50m;

SQL> col file_name format a50

SQL> col tablespace_name format a10

SQL> select file_name,tablespace_name from dba_data_files;

SQL> select file_name,tablespace_name from dba_data_files;


Step3:备份t3表空间

SQL> alter tablespace t3 read only;

SQL> !cp /u01/app/oracle/oradata/db01/t3.dbf /u01/backup/t3.dbf.bak

SQL> alter tablespace t3 read write;


Step4:往t3表空间中添加表和数据

SQL> create table c(id number) tablespace t3;

SQL> insert into c values(100);

SQL> commit;


Step5:切换日志

SQL> alter system switch logfile;

SQL> /

SQL> /

SQL> /

SQL> /


Step6:删除t3表空间并重启数据库

SQL> !rm /u01/app/oracle/oradata/db01/t3.dbf

SQL> startup force;


Step7:还原原备份表空间,启动数据库到open状态

SQL> !mv /u01/backup/t3.dbf.bak /u01/app/oracle/oradata/db01/t3.dbf

SQL> alter database open;

此时数据库无法启动到open状态


Step8:数据文件离线

在非归档模式下使用alter database ... offline for drop语句离线数据文件。offline关键字标记该数据文件离线,不论其是否损坏,所以可以打开数据库;for drop关键字标记该数据文件随后被删除,该数据文件不能再次恢复到在线状态。(实际上,在在线日志组还未发生切换之前,还是可以恢复到在线状态的)

SQL> alter database datafile '/u01/app/oracle/oradata/db01/t3.dbf' offline drop;

SQL> alter database open;


Step9:查看当前数据文件(t3属于recover状态)


Step10:删除t3表空间和数据文件

SQL> drop tablespace t3 including contents and datafiles;



到这里,相信你对oracle备份恢复的技能肯定又扑哧扑哧的上升了一大截了吧!Fighting鸭!



今天分享就到这里啦!

小陈与你期待下一期的邂逅!



文章转载自小陈的技术博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论