Oracle数据库的备份与恢复方案
出处:互联网
数据库的备份和恢复是指为保护一个数据库免于数据损失或者在发生数据损失后进行数据重新创建的各种策略和步骤、方法。数据备份几乎是任何计算机系统中绝对必需的组成部分。意外断电、系统或服务器崩溃、用户失误、磁盘损坏甚至数据中心的灾难性丢失都可能造成数据库文件的破坏或丢失。而这些文件往往包含着珍贵的数据,经不得任何损失。数据库管理员必须对此有所准备。在这种情况下,备份与恢复占了举足轻重的位置。
1.1 如何启动ARCHIVELOG模式?
系统环境:
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:ORACLE
实现步骤:
1、管理器
SVRMGR> connect internal
SVRMGR> shutdown
SVRMGR> startup mount [dbname]
SVRMGR> alter database [dbname] archivelog; --起用归档模式
SVRMGR> archive log start --启动自动归档模式,重起数据库后,按init.ora配置
SVRMGR> alter database [dbname] open; --打开数据库
SVRMGR> exit
2、修改数据库初始化参数文件,定义归档模式(自动)、归档日志文件保存路径、归档日志文件命名方法
3、重新启动数据库
具体实例:
C:>svrmgrl
Oracle Server Manager Release 3.1.6.0.0 - Production
版权所有 (c) 1997,1999,Oracle Corporation。保留所有权利。
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
SVRMGR> connect internal
连接成功。
SVRMGR> shutdown
已关闭数据库。
已卸下数据库。
已关闭 ORACLE 实例。
SVRMGR> startup mount
已启动 ORACLE 实例。
系统全局区域合计有 57124108个字节
Fixed Size 70924个字节
Variable Size 40198144个字节
Database Buffers 16777216个字节
Redo Buffers 77824个字节
已装入数据库。
SVRMGR> alter database archivelog;
语句已处理。
SVRMGR> archive log start
语句已处理。
SVRMGR> alter database open;
语句已处理。
SVRMGR> alter system switch logfile; --强制系统进行日志切换,可马上观察到归档日志的产生语句已处理。
SVRMGR> exit
服务器管理程序结束。
修改数据库参数文件c:oracleadminoradbpfileinit.ora,
取消以下语句的#注释
log_archive_start = true
log_archive_dest_1 = "location=C:Oracleoradataoradbarchive"
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
关闭数据库,重新启动
查看C:Oracleoradataoradbarchive目录下,可以看到类似ORADBT001S01201.ARC的文件,说明归档成功
解释init.ora参数文件中关于归档重做日志参数项的含义:
归档模式是自动还是手工,true为自动,false为手工
log_archive_start = true
归档日志文件所保存的路径
log_archive_dest_1 = "location=C:Oracleoradataoradbarchive"
归档日志文件的命名方法
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
归档命令:
启动自动归档模式,系统重起后,将按init.ora中的参数log_archive_start的值设置归档方式
SVRMGR> archive log start
启动手工归档模式
SVRMGR> archive log stop
查看归档信息:重做日志是否归档方式、是自动归档还是手工归档、归档路径、最旧的联机日志循序号...
SVRMGR> archive log list
归档一个已满,但没有归档的联机重做日志
SVRMGR> archive log next
归档所有已满,但没有归档的联机重做日志
SVRMGR> archive log all
注意:一个事务即使不被提交,也会被写入到重做日志中
1.2 如何使用归档日志进行完全恢复?
系统环境:
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:ORACLE
模拟现象:
先将数据库设置为归档模式
SQL*Plus
--创建实验表空间
create tablespace test datafile
"c:test.ora" size 5M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
default storage (initial 128K next 1M pctincrease 0)
/
--创建实验用户
drop user test cascade;
create user test identified by test default tablespace test;
grant connect,resource to test;
conn test/test
create table a(a number);
insert into a values(1);
insert into a select * from a; --反复插入,达到10万条
commit;
拷贝test.ora为test1.ora文件
insert into a select * from a; --20万条
commit;
关闭数据库
shutdown
删除test.ora文件,把test1.ora拷贝为test.ora。
重新启动数据库
这时,可以mount上,但无法打开,因为现在使用的数据文件是旧的
只有10万条记录,与控制文件中记载的log number不一样
startup mount
需要recover database,使数据库记录重新恢复到当前的20万条
C:>svrmgrl
svrmgrl>connect internal
svrmgrl>shutdown
svrmgrl>startup mount
svrmgrl>set autorecovery on
svrmgrl>recover database;
svrmgrl>alter database open;
conn test/test
select count(*) from a; --数据又恢复到20万条
conn system/manager
--删除实验表空间
alter tablespace test offline;
drop tablespace test INCLUDING CONTENTS;
1.3 没有备份、只有归档日志,如何恢复数据文件?
系统环境:
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:ORACLE
模拟现象:
可通过重建数据文件来恢复,前提是归档日志文件保存完整
先将数据库设置为归档模式
SQL*Plus
conn system/manager
--创建实验表空间
create tablespace test datafile
"c:test.ora" size 5M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
default storage (initial 128K next 1M pctincrease 0)
/
--创建实验用户
drop user test cascade;
create user test identified by test default tablespace test;
grant connect,resource to test;
conn test/test
create table a(a number);
insert into a values(1);
insert into a select * from a; --反复插入,达到100万条
commit;
--关闭数据库
SVRMGR> connect internal
SVRMGR> alter system switch logfile; --强制归档
SVRMGR> alter system switch logfile;
SVRMGR> alter system switch logfile;
SVRMGR> shutdown
--操作系统下删除test.ora文件
--重新启动数据库
SVRMGR> connect internal
SVRMGR> startup
这时,可以mount上,但无法打开,因为数据文件test.ora不存在,
显示错误如下:
ORA-01157: ????/?????? 8 - ??? DBWR ????
ORA-01110: ???? 8: "C:TEST.ORA"
SVRMGR> connect internal
SVRMGR> startup mount
SVRMGR> alter database create datafile "c:test.ora";
SVRMGR> set autorecovery on
SVRMGR> recover datafile "c:test.ora";
SVRMGR> alter database open;
conn test/test
select count(*) from a; --数据又恢复到100万条
--删除实验表空间
conn system/manager
alter tablespace test offline;
drop tablespace test INCLUDING CONTENTS;
drop user test;
如果是非归档模式,也可以运用以上方法,
前提是:输入记录所占空间的大小不超过所有联机日志文件的大小
即:用联机日志文件来恢复
1.4 联机热备份失败后,如何打开数据库?
系统环境:
1、操作系统:Windows 2000
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:ORACLE
错误现象:
进行联机热备份时,服务器发生故障,如掉电,重新启动服务器,
启动数据库时,无法打开数据库,Oracle要求进行介质恢复,
因为表空间还处在热备份状态。
模拟现象及解决方法:
先将数据库设置为归档模式
C:>svrmgrl
svrmgrl>connect internal
svrmgrl>alter tablespace 表空间名 begin backup;
--表空间热备模式没结束就强行关闭数据库,造成错误
svrmgrl>shutdown abort
svrmgrl>startup mount
--将此表空间的数据文件在没打开数据库时置成end backup模式
svrmgrl>alter database datafile "表空间的数据文件名" end backup;
--或执行表空间介质恢复
svrmgrl>recover tablespace 表空间名;
svrmgrl>alter database open;
1.5 某个数据文件损坏,如何打开数据库?
系统环境:
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:ORACLE
错误现象:
因误操作,数据库中某一数据文件被误删,
控制面板的Oracle相关服务显示已启动,但用SQL*Plus无法连接,
显示以下错误
ORA-01033: ORACLE initialization or shutdown in progress
模拟现象:
create tablespace test datafile
"c:test.ora" size 5M
AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED
default storage (initial 128K next 1M pctincrease 0)
/
关闭所有服务stop.bat
net stop "OracleWebAssistant0"
net stop "OracleOraHome81TNSListener"
net stop "OracleServiceORADB"
shutdown
c
在操作系统中删除test.ora文件
重新启动服务start.bat
net start "OracleWebAssistant0"
net start "OracleOraHome81TNSListener"
net start "OracleServiceORADB"
服务里OracleServiceORADB显示已启动,但用SQL*Plus无法连接,
显示ORA-01033: ORACLE initialization or shutdown in progress
解决方法:
先让该数据文件脱机,就可以打开数据库
C:>svrmgrl
svrmgrl>connect internal
svrmgrl>shutdown
svrmgrl>startup mount
d
--ARCHIVELOG模式命令,文件名要大写
svrmgrl>alter database datafile "C:TEST.ORA" offline;
--NOARCHIVELOG模式命令
svrmgrl>alter database datafile "C:TEST.ORA" offline drop;
svrmgrl>alter database open;
--查询数据文件联、脱机状态
SQL> select file#,name,status from v$datafile;
SQL> drop tablespace test;
表空间已丢弃。
_allow_resetlogs_corruption=true
本文来自各大博客,版权归原作者所有!
文章信息如下:
引用源博文网址:http://maxz.itpub.net/post/17787/188561
发布日期:Tue, 08 08 2006 13:18:55
返回首页 注册成为博客
Copyright © 1990-2006
posted on 2007-05-12 20:39
★yesjoy★ 阅读(1070)
评论(0) 编辑 收藏 所属分类:
数据库备份/恢复方案