[20170302]正常关闭数据库日志丢失3.txt

[20170302]正常关闭数据库日志丢失3.txt

--//上午写了一篇[20170302]什么是fuzzy.txt ,链接 http://blog.itpub.net/267265/viewspace-2134551/
--//到最后恢复结束时fuzzy=NO,这时scn=13276966782.也就是将只有恢复到结束,oracle才会认为数据文件一致的.
--//我本来想删除日志文件看看是否能open resetlogs的,结果报错.

--//下午重新探究看看:

1.环境:
SYS@book> @ &r/ver
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

--//正常关闭数据库,做一个冷备份,然后删除日志文件.

$ rm /mnt/ramdisk/book/r*.log

2..测试:
SYS@book> startup mount
ORACLE instance started.
Total System Global Area  634732544 bytes
Fixed Size                  2255792 bytes
Variable Size             197133392 bytes
Database Buffers          427819008 bytes
Redo Buffers                7524352 bytes
Database mounted.

SYS@book> SELECT file#, CHECKPOINT_CHANGE#, CHECKPOINT_TIME,CREATION_CHANGE#  , RESETLOGS_CHANGE#,status, CHECKPOINT_COUNT,fuzzy,name,tablespace_name  FROM v$datafile_header;
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME     CREATION_CHANGE# RESETLOGS_CHANGE# STATUS  CHECKPOINT_COUNT FUZ NAME                            TABLESPACE_NAME
----- ------------------ ------------------- ---------------- ----------------- ------- ---------------- --- ------------------------------- ------------------------------
    1        13276932032 2017-03-02 14:57:02                7            925702 ONLINE               842 NO  /mnt/ramdisk/book/system01.dbf  SYSTEM
    2        13276932032 2017-03-02 14:57:02             1834            925702 ONLINE               831 NO  /mnt/ramdisk/book/sysaux01.dbf  SYSAUX
    3        13276932032 2017-03-02 14:57:02           923328            925702 ONLINE               752 NO  /mnt/ramdisk/book/undotbs01.dbf UNDOTBS1
    4        13276932032 2017-03-02 14:57:02            16143            925702 ONLINE               837 NO  /mnt/ramdisk/book/users01.dbf   USERS
    5        13276932032 2017-03-02 14:57:02           952916            925702 ONLINE               748 NO  /mnt/ramdisk/book/example01.dbf EXAMPLE
    6        13276932032 2017-03-02 14:57:02      13276257767            925702 ONLINE               216 NO  /mnt/ramdisk/book/tea01.dbf     TEA
6 rows selected.

--//FUZZY=NO.

SYS@book> @ &r/logfile
GROUP# STATUS TYPE       MEMBER                           IS_ GROUP# THREAD# SEQUENCE#       BYTES BLOCKSIZE MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
------ ------ ---------- -------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ -------------------
     1        ONLINE     /mnt/ramdisk/book/redo01.log     NO       1       1       695    52428800       512       1 YES INACTIVE     13276910949 2017-02-28 14:40:12  13276931102 2017-03-02 14:56:08
     2        ONLINE     /mnt/ramdisk/book/redo02.log     NO       2       1       696    52428800       512       1 NO  CURRENT      13276931102 2017-03-02 14:56:08 2.814750E+14
     3        ONLINE     /mnt/ramdisk/book/redo03.log     NO       3       1       694    52428800       512       1 YES INACTIVE     13276910486 2017-02-28 14:40:06  13276910949 2017-02-28 14:40:12
     4        STANDBY    /mnt/ramdisk/book/redostb01.log  NO
     5        STANDBY    /mnt/ramdisk/book/redostb02.log  NO
     6        STANDBY    /mnt/ramdisk/book/redostb03.log  NO
     7        STANDBY    /mnt/ramdisk/book/redostb04.log  NO
7 rows selected.

SYS@book> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery

--//嗯,^_^不能通过open resetlogs;,才想起来要采用alter database clear   logfile group N的方式,没有归档执行:
--//alter database clear unarchived logfile group N ;这样不用open resetlogs.

3.恢复:
--//我记忆里使用上面的方法我以前是失败的,我采用建立新的控制文件方式(resetlogs)方式建立.
--//那个时候刚刚学oracle,什么都不懂,完全是依葫芦画瓢.再次使用alter database clear   logfile group N方式.
--//说明:当前的情况 status=CURRENT,是group#=2.

SYS@book> alter database clear  logfile group 1 ;

Database altered.

SYS@book> alter database clear  logfile group 2 ;
alter database clear  logfile group 2
*
ERROR at line 1:
ORA-00350: log 2 of instance book (thread 1) needs to be archived
ORA-00312: online log 2 thread 1: '/mnt/ramdisk/book/redo02.log'
--//这个必须归档,不能这样执行.

SYS@book> alter database clear unarchived logfile group 2 ;
Database altered.

SYS@book> alter database clear  logfile group 3 ;
Database altered.

--//ok,以前为什么不行呢?我仔细看了我以前做的文档,才明白我的错误.

4.重复测试:
--//从冷备份恢复,删除redo.
SYS@book> alter database clear  logfile group 2 ;
alter database clear  logfile group 2
*
ERROR at line 1:
ORA-00350: log 2 of instance book (thread 1) needs to be archived
ORA-00312: online log 2 thread 1: '/mnt/ramdisk/book/redo02.log'

SYS@book> alter database clear  unarchived logfile group 2 ;
alter database clear  unarchived logfile group 2
*
ERROR at line 1:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/mnt/ramdisk/book/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

--//注意看提示,当时就是没有看提示,提示无法获得/mnt/ramdisk/book/redo03.log的状态.实际上如果你执行很快,一样报错.

$ cat /tmp/a.txt
alter database clear  logfile group  1 ;
alter database clear unarchived logfile group 2 ;
--//注:没有包括clear  logfile group  3 ;

SYS@book> @ /tmp/a.txt
Database altered.

alter database clear unarchived logfile group 2
*
ERROR at line 1:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/mnt/ramdisk/book/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Database altered.
--//依旧是报无法获得/mnt/ramdisk/book/redo03.log状态.
--//而这个时候你在手工执行:

SYS@book> alter database clear  unarchived logfile group 2 ;
alter database clear  unarchived logfile group 2
*
ERROR at line 1:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/mnt/ramdisk/book/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
--//一样报错.

SYS@book> @ &r/logfile

GROUP# STATUS     TYPE       MEMBER                           IS_ GROUP# THREAD# SEQUENCE#       BYTES BLOCKSIZE MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
------ ---------- ---------- -------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ -------------------
     1            ONLINE     /mnt/ramdisk/book/redo01.log     NO       1       1         0    52428800       512       1 YES UNUSED        1.3277E+10 2017-02-28 14:40:12   1.3277E+10 2017-03-02 14:56:08
     2            ONLINE     /mnt/ramdisk/book/redo02.log     NO       2       1         0    52428800       512       1 NO  CLEARING_C    1.3277E+10 2017-03-02 14:56:08   2.8147E+14
                                                                                                                             URRENT

     3            ONLINE     /mnt/ramdisk/book/redo03.log     NO       3       1         0    52428800       512       1 YES UNUSED                 0 2017-02-28 14:40:06            0 2017-02-28 14:40:12
     4            STANDBY    /mnt/ramdisk/book/redostb01.log  NO
     5            STANDBY    /mnt/ramdisk/book/redostb02.log  NO
     6            STANDBY    /mnt/ramdisk/book/redostb03.log  NO
     7            STANDBY    /mnt/ramdisk/book/redostb04.log  NO
7 rows selected.

SYS@book> alter database clear  logfile group 3 ;
Database altered.

SYS@book> alter database clear unarchived logfile group 2 ;
Database altered.

SYS@book> @ &r/logfile
GROUP# STATUS TYPE       MEMBER                          IS_ GROUP# THREAD# SEQUENCE#       BYTES BLOCKSIZE MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
------ ------ ---------- ------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ -------------------
     1        ONLINE     /mnt/ramdisk/book/redo01.log    NO       1       1       697    52428800       512       1 NO  CURRENT      13276931103 2017-03-02 15:26:41 2.814750E+14
     2        ONLINE     /mnt/ramdisk/book/redo02.log    NO       2       1         0    52428800       512       1 YES UNUSED       13276931102 2017-03-02 14:56:08  13276931103 2017-03-02 15:26:41
     3        ONLINE     /mnt/ramdisk/book/redo03.log    NO       3       1         0    52428800       512       1 YES UNUSED                 0 2017-02-28 14:40:06            0 2017-02-28 14:40:12
     4        STANDBY    /mnt/ramdisk/book/redostb01.log NO
     5        STANDBY    /mnt/ramdisk/book/redostb02.log NO
     6        STANDBY    /mnt/ramdisk/book/redostb03.log NO
     7        STANDBY    /mnt/ramdisk/book/redostb04.log NO
7 rows selected.
--//SEQUENCE#=697使用group#=1.实际上执行alter database clear  unarchived logfile group 2 ;要找一个新的redo分配seq,而不知
--//道为什么oracle一定要先/mnt/ramdisk/book/redo03.log,当然这个是开始SEQUENCE#=694最小的.
--//当时的错误就是没有认真看提示.

5.再重复测试:
--//从冷备份恢复,删除redo.
$ cat /tmp/a.txt
alter database clear  logfile group  1 ;
alter database clear unarchived logfile group 2 ;
alter database clear  logfile group  3 ;

SYS@book> @ /tmp/a.txt
Database altered.
Database altered.
Database altered.

SYS@book> @ &r/logfile
GROUP# STATUS     TYPE       MEMBER                          IS_ GROUP# THREAD# SEQUENCE#       BYTES BLOCKSIZE MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
------ ---------- ---------- ------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ -------------------
     1            ONLINE     /mnt/ramdisk/book/redo01.log    NO       1       1       697    52428800       512       1 NO  CURRENT      13276931103 2017-03-02 15:33:48 2.814750E+14
     2            ONLINE     /mnt/ramdisk/book/redo02.log    NO       2       1         0    52428800       512       1 YES UNUSED       13276931102 2017-03-02 14:56:08  13276931103 2017-03-02 15:33:48
     3            ONLINE     /mnt/ramdisk/book/redo03.log    NO       3       1         0    52428800       512       1 YES UNUSED       13276910486 2017-02-28 14:40:06  13276910949 2017-02-28 14:40:12
     4            STANDBY    /mnt/ramdisk/book/redostb01.log NO
     5            STANDBY    /mnt/ramdisk/book/redostb02.log NO
     6            STANDBY    /mnt/ramdisk/book/redostb03.log NO
     7            STANDBY    /mnt/ramdisk/book/redostb04.log NO
7 rows selected.
--//OK!!

--//我反复测试多次,只要执行时没有报如下错误.什么执行都是ok的.一旦报了这个错误必须先清除group 3,再执行alter database
--//clear unarchived logfile group 2.才会ok,当时太不注意看提示了.^_^.

alter database clear unarchived logfile group 2
*
ERROR at line 1:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/mnt/ramdisk/book/redo03.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Database altered.

5.再再重复测试:
--//从冷备份恢复,删除redo.
$ cat /tmp/a.txt
alter database clear  logfile group  3 ;
alter database clear unarchived logfile group 2 ;
alter database clear  logfile group  1 ;

SYS@book> @  /tmp/a.txt
Database altered.
Database altered.
Database altered.

SYS@book> @ &r/logfile
GROUP# STATUS     TYPE       MEMBER                          IS_ GROUP# THREAD# SEQUENCE#       BYTES BLOCKSIZE MEMBERS ARC STATUS     FIRST_CHANGE# FIRST_TIME          NEXT_CHANGE# NEXT_TIME
------ ---------- ---------- ------------------------------- --- ------ ------- --------- ----------- --------- ------- --- ---------- ------------- ------------------- ------------ -------------------
     1            ONLINE     /mnt/ramdisk/book/redo01.log    NO       1       1         0    52428800       512       1 YES UNUSED       13276910949 2017-02-28 14:40:12  13276931102 2017-03-02 14:56:08
     2            ONLINE     /mnt/ramdisk/book/redo02.log    NO       2       1         0    52428800       512       1 YES UNUSED       13276931102 2017-03-02 14:56:08  13276931103 2017-03-02 15:44:59
     3            ONLINE     /mnt/ramdisk/book/redo03.log    NO       3       1       697    52428800       512       1 NO  CURRENT      13276931103 2017-03-02 15:44:59 2.814750E+14
     4            STANDBY    /mnt/ramdisk/book/redostb01.log NO
     5            STANDBY    /mnt/ramdisk/book/redostb02.log NO
     6            STANDBY    /mnt/ramdisk/book/redostb03.log NO
     7            STANDBY    /mnt/ramdisk/book/redostb04.log NO
7 rows selected.

--//这时的SEQUENCE#=697,是GROUP#=3.
--//也就是清除顺序最好按照SEQUENCE#的顺序,从小到大(694,695,696),最后清除没有归档的在线日志.当然你也可以重新组织顺序.
--//再次说明提示要认真看.教训啊.

SYS@book> alter database open ;
Database altered.

--//ok,正常打开.

时间: 2024-09-11 16:53:47

[20170302]正常关闭数据库日志丢失3.txt的相关文章

[20160818]关闭数据库会话的dblink.txt

[20160818]关闭数据库会话的dblink.txt --昨天在跟别人聊天提到说对方的数据库出现session长时间存在事务无法提交的情况,问我什么回事. --实际上很简单,问题很有可能出在使用dblink的情况,通过测试说明问题并且学习如何关闭链接. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------

数据库日志文件丢失时的恢复步骤

恢复|数据|数据库 The information in this article applies to: - Microsoft SQL Server 7.0,2000      数据库日志文件丢失时的恢复步骤Revision History:Version Date Creator Description 1.0.0.1 2003-3-25 郑昀 草稿        Implementation Scope:本文是用于向Microsoft SQL Server维护人员描述我误删除了数据库的事

[20170302]异常恢复scn到那里3.txt

[20170302]异常恢复scn到那里3.txt --//如果oracle数据库异常关闭,打开数据库自动执行实例恢复,这个恢复scn到那里呢? --//通过例子说明:实际上http://blog.itpub.net/267265/viewspace-2134551/链接已经提到,重复测试: 1.环境: SYS@book> @ &r/ver BANNER ---------------------------------------------------------------------

[20170307]dg环境下在线日志损坏12.txt

[20170307]dg环境下在线日志损坏12.txt http://blog.itpub.net/267265/viewspace-2134665/ http://blog.itpub.net/267265/viewspace-2134481/ --//前面的链接我测试了如果日志实时传输与应用的情况下,主库的崩溃并且在线日志删除的情况下(包括主机的备用日志)情况下, --//利用备库接收日志来恢复主库的情况.做一点点总结: 1.将备用日志拷贝过来,必须执行如下命令,加入最后应用的scn号. r

oracle启动和关闭数据库方法介绍

unix关闭顺序,先关闭数据库,然后是操作系统,最后下电 只有具备sysdba和sysoper系统特权的用户才能启动和关闭数据库. 在启动数据库之前应该启动监听程序,否则就不能利用命令方式来管理数据库,包括启动和关闭数据库. 虽然数据库正常运行,但如果没有启动监听程序,客户端就不能连接到数据库,在服务器端就不能使用oem和isqlplus工具. 启动监听程序 lsnrctl start          关闭监听程序lsnrctl stop 查询监听程序状态lsnrctl status 启动数据

[20170303]dg环境下在线日志损坏8.txt

[20170303]dg环境下在线日志损坏8.txt --前面的测试,链接http://blog.itpub.net/267265/viewspace-2134481/ --前面的测试必须使用recover database using backup controlfile until change 13276911099; 才能恢复到结尾. --但是由于主备库scn相差1,在open resetlog时备库的数据文件头scn号减1,采用应用日志. --前面学习了解文件头fuzzy特性以及具体位

Microsoft SQL Server数据库日志截断

--参考 压缩日志及数据库文件大小 /*--注意事项 请按步骤进行,未进行前面的步骤,请不要做后面的步骤,否则可能损坏你的数 据库. 一般情况下不建议做第4,6两步. 第4步不安全,有可能损坏数据库或丢失数据. 第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复 . --*/ --下面的所有库名都指你要处理的数据库的库名. 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志: BACKUP LOG 库名 WITH NO_LOG 3.

SQL数据库日志已满解决方法

当前的解决方法是:把硬盘上的其他文件删除,以空出硬盘空间,将数据库的日志文件大小改成无限制,然后分离数据库,要确保分离成功,.然后把数据库日志文件删除(最好是先改名,以防万一).再附加数据库,这样会重建日志文件. 加回去之后,将数据库改成自动收缩,把日志文件改成按mb增长,增长最大设为一个固定的值,值的大小看数据处理情况,存在大指的update操作的话,应设为大一点. 在查询分析器上操作: 清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志: BACKUP L

数据库日志清理方法

  清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 截断事务日志 BACKUP LOG 数据库名 WITH NO_LOG 收缩数据库 DBCC SHRINKDATABASE(数据库名) --压缩日志及数据库文件大小 /*--特别注意 请按步骤进行,未进行前面的步骤,请不要做后面的步骤 否则可能损坏你的数据库. 一般不建议做第4,6两步 第4步不安全,有可能损坏数据库或丢失数据 第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复. --*/ --下面的