Oracle数据库:ARCHIVELOG 模式恢复示例

    技术2022-05-11  91

    完全数据库恢复:ARCHIVELOG 模式 1.    查询 V$DATABASE 视图以确定数据库的归档日志模式。使用 ARCHIVE LOG LIST 检查自动归档的状态。        SQL> select dbid, name, log_mode from v$database;        DBID                    NAME           LOG_MODE                       ---------          ----- ------------        1943591421           DB01             NOARCHIVELOG        1 row selected.        SQL> archive log list;        Database log mode        No Archive Mode        Automatic archival         Disabled        Archive destination        /databases/db01/ORADATA/ARCHIVE2/        Oldest online log sequence     69        Current log sequence            70   2.    关闭该例程,并配置自动归档。装载数据库并使用 ALTER DATABASE 命令将数据库设置为 ARCHIVELOG 模式。        SQL> shutdown immediate;        SQL> exit        编辑 init.ora 文件以设置 LOG_ARCHIVE_START 参数。        $ sqlplus /nolog        SQL> connect / as sysdba        SQL> startup mount pfile=$HOME/ADMIN/PFILE/init<sid>.ora        SQL> alter database archivelog;        SQL> alter database open;   3.    使用 ARCHIVE LOG LIST 命令验证更改。记下当前的日志序列号。        SQL> archive log list;        Database log mode               Archive Mode        Automatic archival                Enabled        Archive destination               /databases/db01/ORADATA/ARCHIVE2/        Oldest online log sequence            69        Next log sequence to archive 70        Current log sequence                   70   4.    执行关闭的数据库的备份。将该备份存储在 $HOME/BACKUP/UMAN 目录中。        SQL> shutdown immediate;        SQL> !cp -rp $HOME/ORADATA/u* $HOME/BACKUP/UMAN        SQL > startup pfile=$HOME/ADMIN/PFILE/init<sid>.ora   5.         运行 以下脚本,新建一个名为 TEST 的表,并向该表中添加行。 connect system/manager ALTER USER hr QUOTA UNLIMITED ON users; CREATE TABLE TEST (  id     INTEGER,  col2 VARCHAR2(20) )TABLESPACE users; 查询该表以获取表中的行数。        SQL> SELECT count(*) FROM hr.TEST;   6.       以 system/manager 的身份进行连接,运行 select file_name from dba_data_files where tablespace_name in (select tablespace_name from dba_tables where table_name = 'TEST' and OWNER = 'HR');脚本,并记下与包含 TEST 表的表空间关联的数据文件的名称。        FILE_NAME        ------------------------------------------------------        /databases/db01/ORADATA/u03/users01.dbf        1 row selected.   7.    运行脚本以模拟出现硬件故障的情况。        connect system/manager set head off set feedback off set echo off alter system switch logfile; @/LABS/moreTEST.sql SELECT count(*) FROM hr.TEST; connect system/manager alter system switch logfile; spool %CLASS_HOME%/STUDENT/LABS/breakdb.cmd select 'del /q ' || file_name from dba_data_files where tablespace_name = 'USERS'; spool off alter system switch logfile;   8.    试着正常启动数据库。结果怎样?        SQL> startup pfile=$HOME/ADMIN/PFILE/init<sid>.ora        ORACLE instance started.        Database mounted.        ORA-01157: cannot identify/lock datafile 3 - see DBWR trace file        ORA-01110: datafile 3: '/databases/db01/ORADATA/u03/users01.dbf'        Oracle 服务器无法打开编号为 3 的数据文件。因此,数据库仍旧处于 MOUNT 模式。   9.    由于 Oracle 服务器认为出现了介质故障,所以它无法找到 USERS 表空间的文件。由于归档已启用,现在可以执行完全恢复了。        从第 4 步制作的备份中还原 USERS 表空间的数据文件。        $ cp -p $HOME/BACKUP/UMAN/u03/users01.dbf    $HOME/ORADATA/u03/users01.dbf   10.   用 RECOVER DATABASE 命令恢复数据库。        SQL> recover automatic database;   11.   恢复完成后,打开数据库以便让所有用户可以使用。        SQL> alter database open;   12.   查询 DBA_TABLESPACES 视图,以查看 USERS 表空间是否联机。        SQL > select tablespace_name, status from dba_tablespaces    2 > where tablespace_name = ‘USERS’;        TABLESPACE_NAME     STATUS          ---------------     ---------        USERS               ONLINE          1 row selected.   13.   对 HR.TEST 表执行查询。结果怎样?        SQL> SELECT count(*) FROM hr.TEST;        COUNT(*)        ----------        55        1 row selected        注:breakdb.sql 脚本执行 moreTEST.sql 脚本,后者将附加的行插入到 HR.TEST 表中。   14. 以 system/manager 的身份进行连接,查询 V$LOG 视图,并记下序列号。将这些值与第 3 步中找到的值进行比较。关于完全恢复,您可以得出什么结论?        SQL> SELECT * FROM v$log;        GROUP# THREAD# SEQUENCE# BYTES   MEMBERS ARC STATUS...        ------ ------- --------- ------- ------- --- ------        1       1       77 10485760      2 YES INACTIVE                  2       1       78 10485760      2   NO CURRENT       制作数据库备份时使用的日志序列号将高于第 3 步中的序列号。在恢复过程中,已应用了归档重做日志文件,并且将数据库更新到当前时间点。    

    最新回复(0)