全部博文(101)
分类: Oracle
2011-04-19 18:41:58
一.数据库的完全恢复方法-----在数据库处于关闭的状态下,进行开启数据库的恢复
硬件环境:我的笔记本电脑
操作系统:windows xp sp3
数据库: 10.2.0.1.0
1.1说明
*首先我的数据库里面安装了一个叫jacky的实例
*模式为归档模式
*待会我要创建一个表空间叫HFTB,里面有2个数据文件,hf01.dbf,hf02.dbf
*在里面我会创建一个基于HFTB的用户marry;
1.2环境搭建
C:/Documents and Settings/jacky>sqlplus/nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 31 21:10:33 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/you12323 as sysdba;
已连接。
SQL> --先查看一下模式
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 c:/guilog02
最早的联机日志序列 41
下一个存档日志序列 45
当前日志序列 45
SQL> --创建测试表空间;
SQL> create tablespace hftb
2 datafile
3 'd:/hftb/hf01.dbf' size 10m,
4 'd:/hftb/hf02.dbf' size 10m
5 ;
表空间已创建。
SQL> --创建一个用户marry,并在这个用户下面建一个表;
SQL> create user marry identified by marry
2 default tablespace hftb;
用户已创建。
SQL> --给用户授权;
SQL> grant dba to marry;
授权成功。
SQL> conn marry/marry;
已连接。
SQL> --建一个数据表;
SQL> create table marrydata
2 (id int,
3 name nvarchar2(15),
4 age int)
5 tablespace hftb;
表已创建。
SQL> --插入数据
SQL> insert into marrydata values(1,'jacky',26);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from marrydata;
ID NAME AGE
---------- ------------------------------ ----------
1 jacky 26
SQL>
1.3联机备份表空间hftb
SQL> --查看表空间hftb下的数据文件位置;
SQL> col file_name for a55
SQL> col tablespace_name for a20
SQL> set line 150
SQL> select file_id,file_name,tablespace_name
2 from dba_data_files;
FILE_ID FILE_NAME TABLESPACE_NA
ME
---------- ------------------------------------------------------- -------------
-------
4 E:/ORACLE/USERS01.DBF USERS
3 E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/SYSAUX01.DBF SYSAUX
2 E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/UNDOTBS01.DBF UNDOTBS1
1 E:/ORACLE/PRODUCT/10.2.0/ORADATA/JACKY/SYSTEM01.DBF SYSTEM
5 C:/JINLIAN01.DBF JINLIAN
6 C:/JINLIAN_UNDO01.DBF JINLIAN_UNDO
7 C:/JINLIAN_INDEX01.DBF JINLIAN_INDEX
8 C:/JINLIAN_UNDO001.DBF JINLIAN1_UNDO
9 D:/HFTB/HF01.DBF HFTB
10 D:/HFTB/HF02.DBF HFTB
已选择10行。
SQL> --为了谨慎,查看所以数据文件的备份状态;
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 1022422 30-3月 -11
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 1022446 30-3月 -11
5 NOT ACTIVE 0
6 NOT ACTIVE 0
7 NOT ACTIVE 0
8 NOT ACTIVE 0
9 NOT ACTIVE 0
10 NOT ACTIVE 0
已选择10行。
SQL> --所以状态都是not active,证明没有人在备份它们;
SQL> alter tablespace hftb begin backup;
表空间已更改。
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 1022422 30-3月 -11
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 1022446 30-3月 -11
5 NOT ACTIVE 0
6 NOT ACTIVE 0
7 NOT ACTIVE 0
8 NOT ACTIVE 0
9 ACTIVE 1042423 31-3月 -11
10 ACTIVE 1042423 31-3月 -11
已选择10行。
SQL> --网友们看到现在已经是active状态了。
SQL> host copy d:/hftb/*.dbf d:/hfbak331/
Microsoft Windows XP
欢迎来到Jacky的工作室!!!
今天是2011-03-31 星期四
现在已经是21:36:08.00
d:/hftb/HF01.DBF
d:/hftb/HF02.DBF
已复制 2 个文件。
SQL> alter tablespace hftb end backup;
表空间已更改。
SQL> --再次查看备份状态,确认一下;
SQL> select * from v$backup;
FILE# STATUS CHANGE# TIME
---------- ------------------ ---------- --------------
1 NOT ACTIVE 1022422 30-3月 -11
2 NOT ACTIVE 0
3 NOT ACTIVE 0
4 NOT ACTIVE 1022446 30-3月 -11
5 NOT ACTIVE 0
6 NOT ACTIVE 0
7 NOT ACTIVE 0
8 NOT ACTIVE 0
9 NOT ACTIVE 1042423 31-3月 -11
10 NOT ACTIVE 1042423 31-3月 -11
已选择10行。
SQL>--插入一条数据以作为备份后的变动;
SQL> insert into marrydata
2 values(2,'marry',25);
已创建 1 行。
SQL> commit;
提交完成。
SQL>--关闭数据库;
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
1.4下面开始人工破坏,将手动删除表空间的2个数据文件;
SQL> host del d:/hftb/*.dbf;
Microsoft Windows XP
欢迎来到Jacky的工作室!!!
今天是2011-03-31 星期四
现在已经是21:51:09.64
SQL>
1.5重要时刻到了,现在我要启动数据库,看是否可以启动;
发现报错:
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 243272580 bytes
Database Buffers 360710144 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 9: 'D:/HFTB/HF01.DBF'
SQL> --查看现在数据库是什么状态;
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> --发现已经登录不了了。
1.6解决方法步骤
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1250428 bytes
Variable Size 243272580 bytes
Database Buffers 360710144 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database datafile 9 offline;
数据库已更改。
SQL> alter database datafile 10 offline;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> --很开心,数据库打开了,呵呵,下面看下数据文件的备份状态;
SQL> select file#,status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 ONLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 ONLINE
7 ONLINE
8 ONLINE
9 OFFLINE
10 OFFLINE
已选择10行。
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR
CHANGE# TIME
---------- ------- ------- -----------------------------------------------------
------------ ---------- --------------
9 OFFLINE OFFLINE FILE NOT FOUND
0
10 OFFLINE OFFLINE FILE NOT FOUND
0
SQL> --可以发现两个数据文件都丢失了,呵呵。其实是俺删除的。
SQL> --于是俺将原来的备份复制到数据文件的目录下面;
SQL> host copy d:/hfbak331/*.dbf d:/hftb/
Microsoft Windows XP
欢迎来到Jacky的工作室!!!
今天是2011-03-31 星期四
现在已经是22:02:18.28
d:/hfbak331/HF01.DBF
d:/hfbak331/HF02.DBF
已复制 2 个文件。
SQL> --超级重要的步骤;
SQL> recover datafile 9
完成介质恢复。
SQL> recover datafile 10
完成介质恢复。
SQL> alter tablespace hftb online;
表空间已更改。
SQL> select file#,status from v$datafile;
FILE# STATUS
---------- -------
1 SYSTEM
2 ONLINE
3 ONLINE
4 ONLINE
5 ONLINE
6 ONLINE
7 ONLINE
8 ONLINE
9 ONLINE
10 ONLINE
已选择10行。
SQL> --查看数据表中是几条数据,如果是2条证明成功了,如果 是1条,证明丢失数据了
SQL> --因为我是在一条数据的时候备份的,我备份后添加了一条就是为了测试是否完全恢复。呵呵
SQL> conn marry/marry;
已连接。
SQL> select * from marrydata;
ID NAME AGE
---------- ------------------------------ ----------
1 jacky 26
2 marry 25
SQL> --我要疯了,竟然成功了,呵呵!同喜同喜!
SQL> --完成!