⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 备份恢复实验.txt

📁 oracle数据库备份与恢复的详细资料集合
💻 TXT
📖 第 1 页 / 共 3 页
字号:
系统 win2000 pro

备份恢复的实验 整理



用户管理的
准备工作:

做备份恢复时,把undo改小一点
SQL>CREATE UNDO TABLESPACE undo1
DATAFILE 'D:\oracle\oradata\a00215\undo01.dbf' 
SIZE 4M AUTOEXTEND ON;
SQL>ALTER SYSTEM SET UNDO_TABLESPACE=UNDO1;
SQL>DROP TABLESPACE UNDOTBS1;

1) SQL> create pfile from spfile;
2) shutdown immediate
3) 用写字板打开initSID.ora 编辑这个静态参数文件
	加三行代码
	*.log_archive_start=true
	*.log_archive_dest='D:\oracle\oradata\archive00\'
	*.log_archive_format='awu%s.arc'
   OS保存
4) SQL> create spfile from pfile;
5) SQL> startup mount
6) SQL> alter database archivelog
7) SQL> alter database open;
8) SQL> archive log list;
9)  创建scott用户,供实验用 
SQL> @D:\oracle\ora92\rdbms\admin\scott.sql  
10) SQL> shutdown immediate
11) 做一个完全的冷备份,OS下,将文件(e.g. D:\oracle\oradata\a00215\...) 复制出 (我这里是到D:\oracle\oradata\backup00\...)

完全恢复
1.1.1   lab1
描述:
数据库关闭状态,需要恢复System datafiles,Undo segment datafiles,Whole database
在这里,我们给scott用户创建一个表,然后破坏undo,恢复后,看看表中的数据还在不在

1) SQL>  conn sys/oracle as sysdba
   SQL> startup
2) SQL> create table scott.com1(n1 number);
   SQL> insert into scott.com1 values(1);
   SQL> commit;
   SQL> alter system switch logfile;
   SQL> insert into scott.com1 values(2);
   SQL> shutdown abort
3) 此时,把undo破坏
   在‘服务‘中,将OracleServiceA00215停止
    删除(OS)undo文件
4) 在‘服务‘中,将OracleServiceA00215启动
5) conn / as sysdba
startup
ORACLE 例程已经启动。
Total System Global Area  135338868 bytes
Fixed Size                   453492 bytes
Variable Size             109051904 bytes
Database Buffers           25165824 bytes
Redo Buffers                 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 9: 'D:\ORACLE\ORADATA\A00215\UNDO01.DBF'

(不发的话,可以看警告日志D:\oracle\admin\a00215\bdump\alert_a00215.log,
Sat Sep 25 14:18:18 2004
Errors in file d:\oracle\admin\a00215\bdump\a00215_dbw0_1552.trc:
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 9: 'D:\ORACLE\ORADATA\A00215\UNDO01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。)

6) 恢复:
SQL> SHUTDOWN ABORT
将备份的undo01.dbf copy回去
SQL> STARTUP MOUNT
SQL> recover database(或者recover datafile 9//或者 recover'D:\ORACLE\ORADATA\A00215\UNDO01.DBF')

SQL> select * from scott.com1;

        N1
----------
         1

1.1.2  lab2
描述
数据库打开的时候,并且恢复的时候数据库也开启,此时受损的文件不能是system或者undo文件

如下操作,都在数据库open时进行                                                                
1) SQL> create table scott.com2 (n1 number) tablespace users;                                 
   SQL> insert into scott.com2 values(1);                                                     
   SQL> commit;                                                                               
   SQL> alter system switch logfile;                                                          
                                                                                              
2) 破坏users01.dbf (users 表空间)                                                             
   我这里采取的办法是先将users 表空间offline,再造一个同名(0字节)的覆盖,也可以采取其他办法。
  
3)恢复
alter tablespace users offline immediate;

此时 select * from scott.com2;
报错:
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 7
ORA-01110: 数据文件 7: 'D:\ORACLE\ORADATA\A00215\USERS01.DBF'

OS将备份的users01.dbf copy回去

SQL> recover tablespace users
SQL> alter tablespace users online;
SQL>  select * from scott.com2;
        N1
----------
         1
         
1.1.3  lab3
描述
和实验二类似,不同之处在于数据库损坏时为关闭状态,此时受损的文件不能是system或者undo文件
1)数据库关闭时,删除users01.dbf
恢复
2)SQL> conn / as sysdba
   SQL> startup
报错
ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 7: 'D:\ORACLE\ORADATA\A00215\USERS01.DBF'

OS将备份的users01.dbf copy回去
SQL> alter tablespace users offline immediate;
SQL> alter database open
SQL> alter tablespace users online;
SQL>  select * from scott.com2;
        N1
----------
         1
         
1.1.4  lab4
没有备份的情况下,恢复一个数据文件,不能是system或者undo段

准备
SQL> create tablespace testtbs datafile 'D:\oracle\oradata\a00215\testtbs.dbf' size 1m;
SQL> alter system switch logfile;
SQL> create table scott.com4 (n1 number) tablespace testtbs;
SQL>  alter system switch logfile;
SQL> insert into scott.com4 values(1);
SQL> commit;
SQL>  alter system switch logfile;

搞坏 testtbs.dbf
  我这里采取的办法是先将testtbs 表空间offline,然后把这个重命名。


SQL> select * from scott.com4;
select * from scott.com4
                    *
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 2
ORA-01110: 数据文件 2: 'D:\ORACLE\ORADATA\A00215\TESTTBS.DBF'

恢复


再造一个文件
SQL> ALTER DATABASE CREATE DATAFILE
  2   'D:\oracle\oradata\a00215\testtbs.dbf';
  
SQL> recover tablespace testtbs
SQL> alter tablespace testtbs online;
SQL>  select * from scott.com4;

        N1
----------
         1
         
         
不完全恢复
做不完全恢复时,做实验前都要把数据库给备份一下

1.2.1 lab5
基于时间的恢复

SQL> select * from scott.emp;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
 7839 KING       PRESIDENT       1981-11-17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
 7900 JAMES      CLERK      7698 1981-12-3      950.00               30
 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10
    
The current time is 12:00 p.m. on March 9, 2002.
The EMPLOYEES table has been dropped.
The table was dropped at approximately 11:45 a.m.
Database activity is minimal because most staff are currently in a meeting.
The table must be recovered.

为了模拟这个场景,我们将数据库恢复到删除emp表之前的样子
1)
SQL> select * from scott.com1;

        N1
----------
         1
取现在的系统时间
SQL> select to_char(sysdate,'yyyy-mm-dd:hh24:mi:ss') from dual;

2004-09-25:16:10:24
2)
删除emp表

SQL> drop table scott.emp  
SQL> insert into scott.com1 values(2); 
SQL> commit;
SQL> alter system switch logfile;

在2004-09-25:16:10:24之后,又在scott.com1 中插入 数字 2

SQL> select * from scott.com1;

        N1
----------
         1
         2

恢复      
SQL> shutdown immediate

OS 中将所有的数据文件拿回来(除了control file 和redo log file)

SQL> startup mount
SQL> recover database until time '2004-09-25:16:10:24'
ORA-00279: 更改 226776 (在 09/25/2004 15:51:01 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\ORADATA\ARCHIVE00\AWU706.ARC
ORA-00280: 更改 226776 对于线程 1 是按序列 # 706 进行的


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
已应用的日志。
完成介质恢复。

数据库恢复到2004-09-25:16:10:24的样子,为了使数据文件和redo log以及control file同步,必须重新reset日志。
SQL> alter database open resetlogs;

SQL> select * from scott.emp;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
 7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
 7839 KING       PRESIDENT       1981-11-17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
 7900 JAMES      CLERK      7698 1981-12-3      950.00               30
 7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
 7934 MILLER     CLERK      7782 1982-1-23     1300.00               10
 
 emp表恢复了
 
 SQL> select * from scott.com1;

        N1
----------
         1
 
在2004-09-25:16:10:24之后,又在scott.com1 中插入的数字 2被丢失

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -