FAQ of oracle 9

来源:互联网 发布:低头族数据 编辑:程序博客网 时间:2024/06/10 12:34

5       尝试使用前3中方法中最简单的

SQL>; recover database until cancel;

ORA-00279: change 550174 generated at 09/02/2005 16:00:19 needed for thread 1

ORA-00289: suggestion : /T3/ORACLE/arch/1_1.dbf

ORA-00280: change 550174 for thread 1 is in sequence #1

Specify log: {<RET>;=suggested | filename | AUTO | CANCEL}

看来不行

6       修改init.ora,加入一行

_allow_resetlogs_corruption=true

7       启动with pfile

SQL>; startup

ORACLE instance started.

Total System Global Area  320308312 bytes

Fixed Size                   730200 bytes

Variable Size             285212672 bytes

Database Buffers           33554432 bytes

Redo Buffers                 811008 bytes

Database mounted.

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

 

SQL>; host ls /T3/ORACLE/oradata/ORA9/redo*

/T3/ORACLE/oradata/ORA9/redo*: No such file or directory

SQL>; alter database open resetlogs;

Database altered.

 

SQL>; host ls /T3/ORACLE/oradata/ORA9/redo*

/T3/ORACLE/oradata/ORA9/redo01.log  /T3/ORACLE/oradata/ORA9/redo02.log  /T3/ORACLE/oradata/ORA9/redo03.log

8       检验数据

SQL>; select * from test.test;

 

       TEL

----------

         1

         2

         3

         4

 

SQL>;

看到了吧,我们前面由于执行了SHUTDOWN ABORT,这时候对数据的修改还没有保存到数据文件中,虽然执行了COMMIT,这个时候还在联机日志中,等待CKPT触发DBWR写入DATAFILE,但是这个时候执行了SHUTDOWN ABORT,redo被删除后,里面的信息也就丢了,造成数据丢失

9       备份,去掉那个参数

 

 

试验五:丢失当前日志组的成员

1SQL>; select * from v$logfile;

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         3         ONLINE

/T3/ORACLE/oradata/ORA9/redo03.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02.log

 

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01.log

 

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01a.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02a.log

 

         3         ONLINE

/T3/ORACLE/oradata/ORA9/redo03a.log

 

SQL>; select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ----------------

FIRST_CHANGE# FIRST_TIME

------------- ----------

         1          1          2  104857600          2 YES INACTIVE

       554599 02-9 -05

 

         2          1          3  104857600          2 YES INACTIVE

       554601 02-9 -05

 

         3          1          4  104857600          2 NO  CURRENT

       554603 02-9 -05

SQL>;

3       模拟插入数据

SQL>; conn test/test

Connected.

SQL>; select * from test;

 

       TEL

----------

         1

         2

         3

         4

 

SQL>; insert into test values(5);

 

1 row created.

 

SQL>; commit

  2  ;

 

Commit complete.

4        shutdown db,模拟删除一个当前日志成员

$ cd oradata/ORA9

$ ls redo03*

redo03.log   redo03a.log

$ rm redo03a.log

5       启动db,表面没有错误

SQL>; startup

ORACLE instance started.

 

Total System Global Area  353862792 bytes

Fixed Size                   730248 bytes

Variable Size             285212672 bytes

Database Buffers           67108864 bytes

Redo Buffers                 811008 bytes

Database mounted.

Database opened.

SQL>;

6       查看日至成员

SQL>; select * from v$logfile;

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         3         ONLINE

/T3/ORACLE/oradata/ORA9/redo03.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02.log

 

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01.log

 

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01a.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02a.log

 

         3 INVALID ONLINE

/T3/ORACLE/oradata/ORA9/redo03a.log

7       删除出问题的联机日志文件

SQL>; alter database drop logfile member '/T3/ORACLE/oradata/ORA9/redo03a.log';

alter database drop logfile member '/T3/ORACLE/oradata/ORA9/redo03a.log'

*

ERROR at line 1:

ORA-01609: log 3 is the current log for thread 1 - cannot drop members

ORA-00312: online log 3 thread 1: '/T3/ORACLE/oradata/ORA9/redo03.log'

ORA-00312: online log 3 thread 1: '/T3/ORACLE/oradata/ORA9/redo03a.log'

 

 

SQL>;

看来当前日志成员是不允许删除的

SQL>; alter system switch logfile;

 

System altered.

 

SQL>; select * from v$log;

 

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS

---------- ---------- ---------- ---------- ---------- --- ----------------

FIRST_CHANGE# FIRST_TIME

------------- ----------

         1          1          5  104857600          2 NO  CURRENT

       557687 02-9 -05

 

         2          1          3  104857600          2 YES INACTIVE

       554601 02-9 -05

 

         3          1          4  104857600          2 YES ACTIVE

       554603 02-9 -05

 

 

SQL>; alter database drop logfile member '/T3/ORACLE/oradata/ORA9/redo03a.log';

 

Database altered.

 

SQL>;  alter database add logfile member '/T3/ORACLE/oradata/ORA9/redo03a.log' to group 3;

 

Database altered.

SQL>; select * from v$logfile;

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         3         ONLINE

/T3/ORACLE/oradata/ORA9/redo03.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02.log

 

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01.log

 

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01a.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02a.log

 

         3 INVALID ONLINE

/T3/ORACLE/oradata/ORA9/redo03a.log

看来还得切换一下日至

SQL>; alter system switch logfile;

 

System altered.

SQL>; select * from v$logfile;

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         3         ONLINE

/T3/ORACLE/oradata/ORA9/redo03.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02.log

 

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01.log

 

 

    GROUP# STATUS  TYPE

---------- ------- -------

MEMBER

--------------------------------------------------------------------------------

         1         ONLINE

/T3/ORACLE/oradata/ORA9/redo01a.log

 

         2         ONLINE

/T3/ORACLE/oradata/ORA9/redo02a.log

 

         3         ONLINE

/T3/ORACLE/oradata/ORA9/redo03a.log

 

至此,大功告成…………….

 

结论:

只要日志组的member不是一个,出现前面的4种可能性是非常小的,即使出现了也有相应的恢复方法,所以不必惊慌;

如果memer多于1个,即使坏了其中的几个,也不会影响数据库的正常启动,启动后,再进行相应的操作即可,所以这个时候每天察看alert.log就显得非常重要了。

 

1.1.1     启停参数详细解释

 

SHUTDOWN有四个参数:NORMALTRANSACTIONALIMMEDIATEABORT。缺省不带任何参数时表示是NORMAL

SHUTDOWN NORMAL:不允许新的连接、等待会话结束、

                 等待事务结束、

                 做一个检查点并关闭数据文件。

                 启动时不需要实例恢复。

SHUTDOWN TRANSACTIONAL:不允许新的连接、不等待会话结束、

                 等待事务结束、

                 做一个检查点并关闭数据文件。

                 启动时不需要实例恢复。

SHUTDOWN IMMEDIATE:不允许新的连接、不等待会话结束、

                不等待事务结束、

                做一个检查点并关闭数据文件。

                没有结束的事务是自动rollback的。

                启动时不需要实例恢复。

SHUTDOWN ABORT:不允许新的连接、不等待会话结束、

不等待事务结束、

                不做检查点且没有关闭数据文件。

                启动时自动进行实例恢复。

 

STARTUP OPENSTARTUP缺省的参数就是OPEN,打开数据库,允许数据库的访问。当前实例的控制文件中所描述的所有文件都已经打开。

STARTUP MOUNTMOUNT数据库,仅仅给DBA进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件被打开,数据文件未打开。

STARTUP NOMOUNT:仅仅通过初始化文件,分配出SGA区,启动数据库后台进程,没有打开控制文件和数据文件。不能任何访问数据库。

STARTUP PFILE= filename:以filename为初始化文件启动数据库,不是采用缺省初始化文件。

STARTUP FORCE:中止当前数据库的运行,并开始重新正常的启动数据库。

STARTUP RESTRICT:只允许具有RESTRICTED SESSION权限的用户访问数据库。

STARTUP RECOVER:数据库启动,并开始介质恢复。