技术开发 频道

Oracle数据库的备份与恢复方案

    【IT168 技术文档】数据库的备份和恢复是指为保护一个数据库免于数据损失或者在发生数据损失后进行数据重新创建的各种策略和步骤、方法。数据备份几乎是任何计算机系统中绝对必需的组成部分。意外断电、系统或服务器崩溃、用户失误、磁盘损坏甚至数据中心的灾难性丢失都可能造成数据库文件的破坏或丢失。而这些文件往往包含着珍贵的数据,经不得任何损失。数据库管理员必须对此有所准备。在这种情况下,备份与恢复占了举足轻重的位置。

    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

    模拟现象:

    可通过重建数据文件来恢复,前提是归档日志文件保存完整

    先将数据库设置为归档模式 

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.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
0
相关文章