[20190312]檢視v$datafile欄位OFFLINE_CHANGE#, ONLINE_CHANGE#.txt
[20190312]檢視v$datafile欄位OFFLINE_CHANGE#, ONLINE_CHANGE#.txt
--//檢視v$datafile存在2個欄位OFFLINE_CHANGE#, ONLINE_CHANGE#,想當然會認為資料檔案offline時記錄scn號的改變.
--//真的嗎?透過例子說明:
1.環境:
SYS@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SYS@book> SELECT file#, CHECKPOINT_CHANGE#,CHECKPOINT_TIME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME,LAST_CHANGE#,LAST_TIME, OFFLINE_CHANGE#, ONLINE_CHANGE#,FIRST_NONLOGGED_SCN,FIRST_NONLOGGED_TIME,status,name FROM v$datafile;
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME OFFLINE_CHANGE# ONLINE_CHANGE# FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIM STATUS NAME
----- ------------------ ------------------- --------------------- ------------------- ------------ ------------------- --------------- -------------- ------------------- ------------------- ------- --------------------------------------------------
1 13279958095 2019-03-12 16:40:08 0 0 0 0 SYSTEM /mnt/ramdisk/book/system01.dbf
2 13279958095 2019-03-12 16:40:08 0 0 0 0 ONLINE /mnt/ramdisk/book/sysaux01.dbf
3 13279958095 2019-03-12 16:40:08 0 0 0 0 ONLINE /mnt/ramdisk/book/undotbs01.dbf
4 13279958095 2019-03-12 16:40:08 0 0 0 0 ONLINE /mnt/ramdisk/book/users01.dbf
5 13279958095 2019-03-12 16:40:08 0 0 0 0 ONLINE /mnt/ramdisk/book/example01.dbf
6 13279958095 2019-03-12 16:40:08 0 0 0 0 ONLINE /mnt/ramdisk/book/tea01.dbf
6 rows selected.
--//我重建了控制檔案,許多欄位當前是空的.
2.測試:
SYS@book> alter database datafile 6 offline ;
Database altered.
SYS@book> SELECT file#, CHECKPOINT_CHANGE#,CHECKPOINT_TIME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME,LAST_CHANGE#,LAST_TIME, OFFLINE_CHANGE#, ONLINE_CHANGE#,FIRST_NONLOGGED_SCN,FIRST_NONLOGGED_TIME,status,name FROM v$datafile where file# in (1,6);
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME OFFLINE_CHANGE# ONLINE_CHANGE# FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIM STATUS NAME
----- ------------------ ------------------- --------------------- ------------------- ------------ ------------------- --------------- -------------- ------------------- ------------------- ------- --------------------------------------------------
1 13279958095 2019-03-12 16:40:08 0 0 0 0 SYSTEM /mnt/ramdisk/book/system01.dbf
6 13279958095 2019-03-12 16:40:08 0 13279959313 2019-03-12 16:53:06 0 0 0 RECOVER /mnt/ramdisk/book/tea01.dbf
--//實際上offline 資料檔案時,在控制檔案記錄的是LAST_CHANGE#,LAST_TIME.
SYS@book> recover datafile 6;
Media recovery complete.
--//注無法直接online,要執行recover.所以如果有需求要offline,應該養成隨手執行recover datafile N的習慣.
SYS@book> SELECT file#, CHECKPOINT_CHANGE#,CHECKPOINT_TIME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME,LAST_CHANGE#,LAST_TIME, OFFLINE_CHANGE#, ONLINE_CHANGE#,FIRST_NONLOGGED_SCN,FIRST_NONLOGGED_TIME,status,name FROM v$datafile where file# in (1,6);
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME OFFLINE_CHANGE# ONLINE_CHANGE# FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIM STATUS NAME
----- ------------------ ------------------- --------------------- ------------------- ------------ ------------------- --------------- -------------- ------------------- ------------------- ------- --------------------------------------------------
1 13279958095 2019-03-12 16:40:08 0 0 0 0 SYSTEM /mnt/ramdisk/book/system01.dbf
6 13279959313 2019-03-12 16:53:06 0 13279959313 2019-03-12 16:53:06 0 0 0 OFFLINE /mnt/ramdisk/book/tea01.dbf
--//CHECKPOINT_CHANGE#=LAST_CHANGE#.status 從RECOVER=>OFFLINE. 看看看看檔案頭的情況:
SYS@book> SELECT file#, CHECKPOINT_CHANGE#, CHECKPOINT_TIME,CREATION_CHANGE# , RESETLOGS_CHANGE#,status, CHECKPOINT_COUNT,fuzzy,name,tablespace_name FROM v$datafile_header where file# in (1,6);
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME CREATION_CHANGE# RESETLOGS_CHANGE# STATUS CHECKPOINT_COUNT FUZ NAME TABLESPACE_NAME
----- ------------------ ------------------- ---------------- ----------------- ------- ---------------- --- -------------------------------------------------- ------------------------------
1 13279958095 2019-03-12 16:40:08 7 925702 ONLINE 1224 YES /mnt/ramdisk/book/system01.dbf SYSTEM
6 13279959313 2019-03-12 16:53:06 13276257767 925702 OFFLINE 607 NO /mnt/ramdisk/book/tea01.dbf TEA
--//檔案頭的CHECKPOINT_CHANGE#與控制檔案CHECKPOINT_CHANGE#一致.
--//注:v$datafile的資訊來自控制檔案,v$datafile_header的資訊來自資料檔案頭,不要搞混了.
SYS@book> alter database datafile 6 online ;
Database altered.
SYS@book> SELECT file#, CHECKPOINT_CHANGE#,CHECKPOINT_TIME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME,LAST_CHANGE#,LAST_TIME, OFFLINE_CHANGE#, ONLINE_CHANGE#,FIRST_NONLOGGED_SCN,FIRST_NONLOGGED_TIME,status,name FROM v$datafile where file# in (1,6);
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME OFFLINE_CHANGE# ONLINE_CHANGE# FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIM STATUS NAME
----- ------------------ ------------------- --------------------- ------------------- ------------ ------------------- --------------- -------------- ------------------- ------------------- ------- --------------------------------------------------
1 13279958095 2019-03-12 16:40:08 0 0 0 0 SYSTEM /mnt/ramdisk/book/system01.dbf
6 13279960343 2019-03-12 16:58:40 0 0 0 0 ONLINE /mnt/ramdisk/book/tea01.dbf
--//可以發現資料檔案 online後,OFFLINE_CHANGE#,ONLINE_CHANGE#欄位並沒有任何記錄.也就是這個欄位並不是記錄資料檔案offline的scn號.
3.繼續測試:
--//既然不是資料檔案offline時記錄scn號,自然想到表空間的offline,online有關.
SYS@book> alter tablespace tea offline ;
Tablespace altered.
SYS@book> SELECT file#, CHECKPOINT_CHANGE#,CHECKPOINT_TIME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME,LAST_CHANGE#,LAST_TIME, OFFLINE_CHANGE#, ONLINE_CHANGE#,FIRST_NONLOGGED_SCN,FIRST_NONLOGGED_TIME,status,name FROM v$datafile where file# in (1,6);
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME OFFLINE_CHANGE# ONLINE_CHANGE# FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIM STATUS NAME
----- ------------------ ------------------- --------------------- ------------------- ------------ ------------------- --------------- -------------- ------------------- ------------------- ------- --------------------------------------------------
1 13279958095 2019-03-12 16:40:08 0 0 0 0 SYSTEM /mnt/ramdisk/book/system01.dbf
6 13279960510 2019-03-12 17:01:12 0 13279960510 2019-03-12 17:01:12 0 0 0 OFFLINE /mnt/ramdisk/book/tea01.dbf
--//表空間offline,預設要更新檔案頭的scn,你可以發現STATUS=OFFLINE(而不是recover).CHECKPOINT_CHANGE#=LAST_CHANGE#.
--//注 : alter tablespace tea offline immediate ;.這樣不更新檔案頭,與offline 資料檔案類似,你可以理解一組檔案(表空間)offline.大家可以自行測試.
SYS@book> alter tablespace tea online ;
Tablespace altered.
SYS@book> SELECT file#, CHECKPOINT_CHANGE#,CHECKPOINT_TIME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME,LAST_CHANGE#,LAST_TIME, OFFLINE_CHANGE#, ONLINE_CHANGE#,FIRST_NONLOGGED_SCN,FIRST_NONLOGGED_TIME,status,name FROM v$datafile where file# in (1,6);
FILE# CHECKPOINT_CHANGE# CHECKPOINT_TIME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME LAST_CHANGE# LAST_TIME OFFLINE_CHANGE# ONLINE_CHANGE# FIRST_NONLOGGED_SCN FIRST_NONLOGGED_TIM STATUS NAME
----- ------------------ ------------------- --------------------- ------------------- ------------ ------------------- --------------- -------------- ------------------- ------------------- ------- --------------------------------------------------
1 13279958095 2019-03-12 16:40:08 0 0 0 0 SYSTEM /mnt/ramdisk/book/system01.dbf
6 13279960695 2019-03-12 17:03:55 0 13279960510 13279960695 0 ONLINE /mnt/ramdisk/book/tea01.dbf
--//可以發現表空間tea online後,OFFLINE_CHANGE#,ONLINE_CHANGE#有資訊,OFFLINE_CHANGE#記錄就是表空間offline時的scn,而ONLINE_CHANGE#記錄就是表空間online時的scn.
--//oracle為什麼這樣設計,假設你需要恢復1個資料檔案,取出來的資料檔案scn小於OFFLINE_CHANGE#,這樣恢復時,從OFFLINE_CHANGE# 到 ONLINE_CHANGE#的日誌或者歸檔可以跳過,
--//節約日誌應用與恢復時間.
--//自然要問,為什麼資料檔案offline時為什麼沒有類似的記錄呢?而資料檔案offline時,處於"不穩定狀態",不能直接online的,這樣控制檔案僅僅記錄LAST_CHANGE#(offline時).
--//這樣恢復時日誌僅僅應用到LAST_CHANGE#就ok了,但是為什麼資料檔案online時LAST_CHANGE#的資訊不寫入OFFLINE_CHANGE#,online時的scn寫入ONLINE_CHANGE#呢?
--//感覺這個存在一點點歧義行,個人理解.
--//也許oracle在檢視欄位命名上不科學,應該將OFFLINE_CHANGE#, ONLINE_CHANGE#命名為TABLESPACE_OFFLINE_CHANGE#,TABLESPACE_ONLINE_CHANGE#更加科學一些.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2638207/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20200211]檢視v$db_object_cache的CHILD_LATCH欄位.txtObject
- [20210423]建立檢視以及欄位長度.txt
- EBS:物料搬運單檢視人限制(建立人欄位)
- MySQL如何檢視新增修改表以及欄位註釋資訊MySql
- SAP MM 物料主資料MRP2 檢視Rounding Value欄位
- SAP MM 物料主資料MRP2 檢視’Minimum Lot Size’欄位
- postgresql中檢視建立,欄位拼接,同一個表的多行之間的多個欄位相減SQL
- 強制轉換檢視某個欄位為某個型別的sql型別SQL
- SAP QM 物料主資料QM檢視裡欄位MARC-INSMK的更新
- Dynamics CRM 通過配置來設定查詢欄位的預設檢視
- oracle中檢視一張表是否有主鍵,主鍵在哪個欄位上Oracle
- 檢視V$DATAGUARD_STATS
- pydantic 欄位欄位校驗
- 檢視oracle資料庫中,哪些表的欄位是null值比較多Oracle資料庫Null
- 如何檢視Python的位數Python
- [20190312]關於增量檢查點的疑問(補充).txt
- DB 合併多個欄位的模糊檢索
- odoo 為可編輯列表檢視欄位搜尋新增查詢過濾條件Odoo
- 如何檢視型別為LRAW的SAP ABAP資料庫表欄位的內容型別資料庫
- SAP MM 物料主資料採購檢視中的欄位'Var. OUn'的作用?
- 如何檢視python是32位還是64位Python
- fastadmin 新增欄位記圖片欄位AST
- [20211019]V$DETACHED_SESSION檢視.txtSession
- [20211214]檢視檢視V$ACTIVE_SESSION_HISTORY遇到奇怪問題.txtSession
- 怎樣檢視python是64位還是32位Python
- 檢視windows server 2003 是32位還是64位WindowsServer
- win10如何檢視電腦是32位還是64位_win10是32位還是64位怎麼檢視Win10
- [20190312]bash IFS例子.txt
- SAP RETAIL商品主資料Basic Data檢視裡幾個讓人莫名驚詫的欄位AI
- 檢視作業系統位數(zt)作業系統
- [20210528]V$INDEXED_FIXED_COLUMN檢視.txtIndex
- [20210418]查詢v$檢視問題.txt
- V$ACTIVE_SESSION_HISTORY檢視的使用Session
- 如何檢視solaris系統的版本和位數?solaris系統的版本和位數的檢視方法
- [BUG反饋]模型管理 > 欄位管理看不見任何欄位。這表明顯有欄位、!模型
- 儲存過程、觸發器、遊標、檢視、自定義函式 欄位型別、欄位可空、統計欄位、邏輯刪除 許可權系統資料庫&無限極類別設計儲存過程觸發器函式型別資料庫
- sql語句修改欄位型別和增加欄位SQL型別
- 【Mongo】mongo更新欄位為另一欄位的值Go