首页 > 数据库 > Oracle > 数据库一致性关闭与非一致性关闭的一些问题
|
1 |
SQL> select FILE#, CHECKPOINT_CHANGE# from v$datafile;---------控制文件里记录的数据文件的scn号
FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 1133266 2 1133266 3 1133266 4 1133266 5 1133266 6 1133266
6 rows selected.
SQL> select FILE#, CHECKPOINT_CHANGE# from v$datafile_header;---------------数据文件里记录的数据文件头的scn号
FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 1133266 2 1133266 3 1133266 4 1133266 5 1133266 6 1133266
6 rows selected. |
|
2 |
SQL> select CURRENT_SCN from v$database;-----------当前数据库的scn号 CURRENT_SCN ----------- 0 SQL> select CHECKPOINT_CHANGE# from v$database;---------------控制文件的scn号
CHECKPOINT_CHANGE# ------------------ 1133266
|
|
3 |
一致性关闭数据库的状态下: SQL> select FILE#,CHECKPOINT_CHANGE#,LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE# ---------- ------------------ ------------ 1 1133266 1133266 2 1133266 1133266 3 1133266 1133266 4 1133266 1133266 5 1133266 1133266 6 1133266 1133266
6 rows selected. 由此可以发现CHECKPOINT_CHANGE#与 LAST_CHANGE#的scn号是一样的;
非一致性关闭数据库的状态下; SQL> select FILE#,CHECKPOINT_CHANGE#,LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE# ---------- ------------------ ------------ 1 1133734 2 1133734 3 1133734 4 1133734 5 1133734 6 1133734
6 rows selected. 由此可以看出CHECKPOINT_CHANGE#与LAST_CHANGE#的scn号是不一样的。所以此时要正常关闭数据库重新启动,然后再查看发现他们的scn号一样了; SQL> alter database open;
Database altered.
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount ORACLE instance started.
Total System Global Area 830930944 bytes Fixed Size 2257800 bytes Variable Size 536874104 bytes Database Buffers 285212672 bytes Redo Buffers 6586368 bytes Database mounted. SQL> select FILE#,CHECKPOINT_CHANGE#,LAST_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE# ---------- ------------------ ------------ 1 1154340 1154340 2 1154340 1154340 3 1154340 1154340 4 1154340 1154340 5 1154340 1154340 6 1154340 1154340
6 rows selected.
|
|
4 |
SQL> select GROUP#,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
GROUP# FIRST_CHANGE# NEXT_CHANGE# ---------- ------------- ------------ 1 1154682 1154685 2 1154685 1154689 3 1154689 2.8147E+14
SQL> alter system switch logfile;
System altered.
SQL> select GROUP#,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
GROUP# FIRST_CHANGE# NEXT_CHANGE# ---------- ------------- ------------ 1 1154699 2.8147E+14 2 1154685 1154689 3 1154689 1154699
由此可以发现下一个 FIRST_CHANGE#的scn号是上一个 NEXT_CHANGE#的scn号。 |
|
5 |
SQL> select current_scn from v$database;
CURRENT_SCN ----------- 1154858
SQL> SQL> select FILE#, CHECKPOINT_CHANGE# from v$datafile;
FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 1154699 2 1154699 3 1154699 4 1154699 5 1154699 6 1154699
6 rows selected.
SQL> select FILE#, CHECKPOINT_CHANGE# from v$datafile_header;
FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 1154699 2 1154699 3 1154699 4 1154699 5 1154699 6 1154699
6 rows selected. 由此可以发现数据库当前的scn号比控制文件中记录的数据文件的scn号和数据文件里记录的数据文件头部的scn号都大。 注:current日志组必须大于或者等于控制文件中记录的数据文件的scn号和数据文件里记录的数据文件头部的scn号 |
|
|
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30606702/viewspace-2122965/ ,如需转载,请注明出处,否则将追究法律责任。