Chinaunix首页 | 论坛 | 博客
  • 博客访问: 897248
  • 博文数量: 101
  • 博客积分: 2256
  • 博客等级: 大尉
  • 技术积分: 1481
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-19 17:52
文章存档

2017年(1)

2013年(2)

2012年(25)

2011年(73)

分类: 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> --完成!


阅读(2761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~