45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:恢复NOARCHIVELOG模式的步骤

恢复NOARCHIVELOG模式的步骤

2016-09-03 15:13:40 来源:www.45fan.com 【

恢复NOARCHIVELOG模式的步骤

完全数据库恢复:NOARCHIVELOG 模式
 
1. 关闭数据库并禁用自动归档。启动该例程并装载数据库。将数据库设置为 NOARCHIVELOG 模式,然后打开数据库。执行 ARCHIVE LOG LIST 命令以确认状态。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
$ vi $HOME/ADMIN/PFILE/init<sid>.ora
comment out the log_archive_start parameter
$ sqlplus /nolog
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup mount pfile=$HOME/ADMIN/PFILE/init<sid>.ora
SQL> alter database noarchivelog;
sql> alter database open;
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. 关闭数据库,使用操作系统命令执行关闭的数据库的完全备份,即将文件复制到 $HOME/BACKUP/NOARCHTEST 目录中。验证副本是否完整。启动该例程,装载并打开数据库。
SQL> shutdown immediate
SQL> exit
$ cp -r $HOME/ORADATA/u* $HOME/BACKUP/NOARCHTEST
$ ls -alr $HOME/BACKUP/NOARCH/*
$ sqlplus /nolog
SQL> connect / as sysdba
SQL> startup pfile=$HOME/ADMIN/PFILE/init<sid>.ora
3. 运行 以下脚本,新建一个名为 TEST 的表,并向该表中添加行。
connect system/manager
ALTER USER hr
QUOTA UNLIMITED ON users;
CREATE TABLE TEST
(
id INTEGER,
col2VARCHAR2(20)
)TABLESPACE users;
查询该表以获取表中的行数。
SQL> SELECT count(*) FROM hr.emphist;
 
4. 以 system/manager 的身份进行连接,并执行以下脚本以获取包含 TEST 表的数据文件的名称:
SQL> select f.file_name from dba_tables t, dba_data_files f
2> where table_name = ‘TEST‘ and
3> t.tablespace_name=f.tablespace_name;
FILE_NAME
----------------------------------------------/databases/db01/ORADATA/u03/users01.dbf
5. 在 SQL*Plus 中运行以下脚本以模拟出现故障时的情况
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;
 
6. 试着重新正常启动数据库。结果怎样?
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 的数据文件。因此,数据库仍处于装载状态。由于服务器认为出现了介质故障,所以它无法找到 USERS 表空间的文件。
7.关闭数据库,使用相应的操作系统命令将当前数据库替换为最新的备份(提示:从 NOARCHTEST 目录复制到 ORADATA 目录)。
SQL> connect / as sysdba;
SQL> shutdown abort;
SQL> !cp -r $HOME/BACKUP/NOARCHTEST/u* $HOME/ORADATA
8.启动并打开数据库,以使所有用户都能使用。
SQL> connect / as sysdba;
SQL> startup pfile=$HOME/ADMIN/PFILE/init<sid>.ora
9.以 hr/hr 的身份连接到数据库,并对 TEST 表执行查询。结果怎样?为什么?
SQL> connect hr/hr;
SQL> SELECT * FROM TEST;
ORA-00942: table or view does not exist
该表不存在,因为它是在执行上次备份之后创建的。
10. 结论
脱机备份可用于还原数据库。处于 NOARCHIVELOG 模式的数据库没有可用于恢复到故障点的归档重做日志文件。因此,上次备份后的所有更改都已丢失。由此可解释为什么 TEST 表已不存在。
 

本文地址:http://www.45fan.com/a/question/71787.html
Tags: oracle 数据库 NOARCHIVELOG
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部