删除数据库关键数据文件后实例是否会崩溃
来源:互联网 发布:java下载64位 编辑:程序博客网 时间:2024/05/22 23:29
上次试验得出删除数据库的所有控制文件,其实实例是不会崩溃的,而且还可以提供“有所保留”的服务。
那么删除诸如system表空间或者undo表空间里的数据文件呢?这些可是所谓的关键数据文件额。
具体得试验一把,ok,以下试验我也是第一次做:
先冷备数据库文件(此处略)。
[oracle@db1 ~]$ ps -ef | grep ora_
oracle 1270 1235 1 10:01 pts/0 00:00:00 grep ora_
[oracle@db1 ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 5 10:01:18 2015
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2217952 bytes
Variable Size 595593248 bytes
Database Buffers 230686720 bytes
Redo Buffers 6606848 bytes
Database mounted.
Database opened.
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL>
启动数据库,然后使用scott用户进去dml:
SQL> conn scott/scott
Connected.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
T1 TABLE
V VIEW
6 rows selected.
SQL> insert into t1 select * from t1;
3072 rows created.
SQL>commit;
Commit complete.
SQL>
此时我们在os下手工mv掉system表空间的数据文件:
[oracle@db1 denver]$ mv system01.dbf system01.dbf.kkk
然后继续再scott里进行insert操作:
SQL> insert into t1 select * from t1;
6144 rows created.
SQL> commit;
Commit complete.
SQL> insert into t1 select * from t1;
12288 rows created.
SQL> commit;
Commit complete.
SQL>
我去,实例是没有崩溃的,scott的dml还可以继续。我们看看告警日志:
Mon Oct 05 10:10:07 2015
Checker run found 1 new persistent data failures
Mon Oct 05 10:12:02 2015
Errors in file /u01/diag/rdbms/denver/denver/trace/denver_j000_2072.trc:
ORA-12012: error on auto execute of job 4002
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/oradata/denver/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
实例首先是检查出了一个永久数据文件失败,然后接着在执行autojob的时候继续抛出了确切的错误。看看trace日志:
[oracle@db1 denver]$ more /u01/diag/rdbms/denver/denver/trace/denver_j000_2072.trc
Trace file /u01/diag/rdbms/denver/denver/trace/denver_j000_2072.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /u01/app/oracle
System name: Linux
Node name: db1
Release: 2.6.32-220.el6.x86_64
Version: #1 SMP Wed Nov 9 08:03:13 EST 2011
Machine: x86_64
Instance name: denver
Redo thread mounted by this instance: 1
Oracle process number: 24
Unix process pid: 2072, image: oracle@db1 (J000)
*** 2015-10-05 10:12:01.204
*** SESSION ID:(7.11) 2015-10-05 10:12:01.204
*** CLIENT ID:() 2015-10-05 10:12:01.204
*** SERVICE NAME:(SYS$USERS) 2015-10-05 10:12:01.204
*** MODULE NAME:() 2015-10-05 10:12:01.204
*** ACTION NAME:() 2015-10-05 10:12:01.204
DDE rules only execution for: ORA 1110
----- START Event Driven Actions Dump ----
---- END Event Driven Actions Dump ----
----- START DDE Actions Dump -----
Executing SYNC actions
----- START DDE Action: 'DB_STRUCTURE_INTEGRITY_CHECK' (Async) -----
Successfully dispatched
----- END DDE Action: 'DB_STRUCTURE_INTEGRITY_CHECK' (SUCCESS, 0 csec) -----
Executing ASYNC actions
----- END DDE Actions Dump (total 0 csec) -----
*** 2015-10-05 10:12:01.592
ORA-12012: error on auto execute of job 4002
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/oradata/denver/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
*** 2015-10-05 10:12:06.228
*** SESSION ID:(7.13) 2015-10-05 10:12:06.265
*** SERVICE NAME:(SYS$USERS) 2015-10-05 10:12:06.265
DDE: Problem Key 'ORA 1110' was flood controlled (0x1) (no incident)
ORA-01110: data file 1: '/u01/oradata/denver/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
[oracle@db1 denver]$
job是一个定时的数据库结构检查任务。很明显会检查到system表空间的数据文件丢失的问题。
其他高级操作呢?:
SQL> show user;
USER is "SYS"
SQL> alter user hr account lock;
User altered.
SQL>
也成功了,刷出一次buffer cache:
SQL> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 2024
Session ID: 191 Serial number: 3
SQL>
出错了,再看看alert日志:
Mon Oct 05 10:17:00 2015
Errors in file /u01/diag/rdbms/denver/denver/trace/denver_ckpt_1959.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/oradata/denver/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/diag/rdbms/denver/denver/trace/denver_ckpt_1959.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01116: error in opening database file 1
ORA-01110: data file 1: '/u01/oradata/denver/system01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
CKPT (ospid: 1959): terminating the instance due to error 1242
Instance terminated by CKPT, pid = 1959
额,chpt进程终止了实例。
结论很明显,system表空间的数据文件丢失,实例也不会马上就崩溃,再涉及到相关数据文件访问时,才会发生实例终止的现象。
对于关键数据文件,还有一个是重要的,那就是undo表空间的数据文件。来看看undo表空间的数据文件丢失的情况:
<上面的数据库已经恢复>
SQL> insert into t1 select * from t1;
49152 rows created.
SQL>
不提交,先把undo数据文件给干掉再提交:
[oracle@db1 denver]$ mv undotbs01.dbf undotbs01.dbf.lll
SQL> commit;
Commit complete.
SQL>
成功提交,之所以成功,是因为buffer cache里脏数据的原因,dbwn进程及其懒惰。来看看alert日志:
Mon Oct 05 10:24:40 2015
Errors in file /u01/diag/rdbms/denver/denver/trace/denver_j000_2536.trc:
ORA-12012: error on auto execute of job 3
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/oradata/denver/undotbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/diag/rdbms/denver/denver/trace/denver_j000_2536.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/oradata/denver/undotbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
ORA-12012: error on auto execute of job 3
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/oradata/denver/undotbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Mon Oct 05 10:24:41 2015
Checker run found 1 new persistent data failures
很明显,这又是一个数据库结构定时检查任务抛出的错误。再看看rollback是否成功:
SQL> insert into t1 select * from t1;
98304 rows created.
SQL> insert into t1 select * from t1;
196608 rows created.
SQL> rollback;
Rollback complete.
SQL>
rollback也成功,原因很简单,数据块的old image还在内存里,没有被dbwn进程写入undo文件中,不过如此下去实例最终会崩溃,因为buffer cache始终有不够用的时候。
根据前面system数据文件的试验,我知道如果我执行检查点,那么实例会崩溃:
SQL> alter system checkpoint;
alter system checkpoint
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 2499
Session ID: 191 Serial number: 3
SQL>
道理和system数据文件丢失一样,来看看alert日志:
Mon Oct 05 10:33:49 2015
Errors in file /u01/diag/rdbms/denver/denver/trace/denver_ckpt_2433.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/oradata/denver/undotbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /u01/diag/rdbms/denver/denver/trace/denver_ckpt_2433.trc:
ORA-01242: data file suffered media failure: database in NOARCHIVELOG mode
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/oradata/denver/undotbs01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
CKPT (ospid: 2433): terminating the instance due to error 1242
Instance terminated by CKPT, pid = 2433
实例果然崩溃。看看trace,发现是ckpt进程在触发检查点事件时,会提前做一次DB_STRUCTURE_INTEGRITY_CHECK,从而失败。实例最终被终止。
直接startup数据库,即可恢复(前提是redo还在)。
下面看看这两则数据库的恢复细节,都是直接startup数据库就可以了,但是alert日志里面给出了细节:
system数据文件实例恢复:
Completed: alter database mount
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 3 processes
Started redo scan
Completed redo scan
read 28 KB redo, 34 data blocks need recovery
Started redo application at
Thread 1: logseq 33, block 3446
Recovery of Online Redo Log: Thread 1 Group 3 Seq 33 Reading mem 0
Mem# 0: /u01/oradata/denver/redo03.rdo
Completed redo application of 0.01MB
Completed crash recovery at
Thread 1: logseq 33, block 3502, scn 1395795
34 data blocks read, 0 data blocks written, 28 redo k-bytes read
Thread 1 advanced to log sequence 34 (thread open)
Thread 1 opened at log sequence 34
Current log# 1 seq# 34 mem# 0: /u01/oradata/denver/redo01.rdo
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Mon Oct 05 10:21:31 2015
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 2.
Verifying file header compatibility for 11g tablespace encryption..
undo数据文件实例恢复:
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 3 processes
Started redo scan
Completed redo scan
read 72 KB redo, 2 data blocks need recovery
Started redo application at
Thread 1: logseq 34, block 19142
Recovery of Online Redo Log: Thread 1 Group 1 Seq 34 Reading mem 0
Mem# 0: /u01/oradata/denver/redo01.rdo
Completed redo application of 0.00MB
Completed crash recovery at
Thread 1: logseq 34, block 19286, scn 1416962
2 data blocks read, 0 data blocks written, 72 redo k-bytes read
Mon Oct 05 10:40:27 2015
Thread 1 advanced to log sequence 35 (thread open)
Thread 1 opened at log sequence 35
Current log# 2 seq# 35 mem# 0: /u01/oradata/denver/redo02.rdo
Successful open of redo thread 1
Oracle就是牛逼,我x。
- 删除数据库关键数据文件后实例是否会崩溃
- DROP TABLESPACE时数据文件是否会自动删除
- DROP TABLESPACE时数据文件是否会自动删除
- Oracle数据库数据文件rm -rf误删除后恢复
- Oracle数据库数据文件rm -rf误删除后恢复
- 设置maxsize的自动扩展数据文件在达到maxsize后是否会继续扩展
- oracle数据文件被误删除后无法启动数据库的解决办法
- ASM管理文件,数据库删掉表空间后数据文件自动删除
- 接“控制文件丢失实例并不会崩溃”——恢复控制文件,打开数据库
- 系统崩溃后 oracle 9i数据文件恢复过程
- 系统崩溃后 oracle 9i数据文件恢复过程!
- 数据文件的添加,修改,删除 实例
- 控制文件丢失实例并不会崩溃
- 在ORACLE数据库中彻底删除数据文件
- 误删除数据文件,数据库还没有关闭
- 【Oracle】数据库开启状态下删除数据文件
- 数据库删掉数据文件后无法开机
- 数据文件坏删除数据文件
- ubuntu(linux)下截图
- unity官方demo学习之Stealth(十二)角色生命值
- 使用 Python3 抓取网页的简单范例
- 简单高效可靠的自定义通信协议(传输协议)
- LaTeX分情况公式的书写
- 删除数据库关键数据文件后实例是否会崩溃
- Bootstrap CSS——表单(一)
- Android Studio的top level element is not completed问题
- 在C#中动态地添加控件
- 学习ThinkPHP3.2.2:video12,后台目录的组织
- BZOJ 2705: [SDOI2012]Longge的问题(euler函数)
- 数据库以及线程发生死锁的原理及必要条件,如何避免死锁
- 使用JBoss Tool反向创建PO类
- H-Index -- leetcode