表空間的狀態(二) - read/write
表空間狀態-READ ONLY、READ WRITE
2. 只讀表空間並不是為了滿足歸檔的要求。只讀表空間不能修改。如果需要修改只讀表空間中的記錄,則需要先將表空間置為read/write。更新表空間後,可以重置為只讀。
3. 由於只讀表空間不能修改,所以只要沒有置為read/write,就不需要重複地進行備份。而且,如果需要恢復資料庫時,也不需要恢復只讀表空間,原因就是他們未曾修改過。
4. 能從只讀表空間中刪除物件,例如表或索引,但不能建立或修改物件。可以執行修改資料字典中檔案描述的語句,例如ALTER TABLE ... ADD或ALTER TABLE ... MODIFY,但不能新增任何新的描述資訊,除非表空間置為read/write。
5. 只讀表空間可以匯出匯入到其他資料庫。既然只讀表空間不能修改,他們就能儲存於CD-ROM或WORM(一次寫-多次讀)這些設施中。
6. 所有表空間初始建立都是read/write。使用READ ONLY子句可以設定表空間為只讀。前提是必須具有ALTER TABLESPACE或MANAGE TABLESPACE的系統許可權。
使用ALTER TABLESPACE ... READ ONLY前,需要滿足以下條件:
> 表空間處於online狀態。這是為了確保不會有UNDO資訊需要應用到表空間。注:如果處於offline,則會將UNDO資訊儲存於SYSTEM表空間,待恢復online時應用這些UNDO資訊。
> 不能修改活動的UNDO表空間或SYSTEM表空間。
> 表空間不能處於當前正在進行的online備份中,因為備份結束時會更新表空間所有資料檔案的頭部資訊。
> 為了讓從只讀表空間讀取資料得到更好的效能,可以在置為read-only之前執行一次訪問表空間的表中所有資料塊的查詢。一個像SELECT COUNT(*)這樣簡單的查詢,就可以確保在表空間的資料塊在接下來的訪問中獲得最佳的效率。因為這種做法就不需要資料庫檢查最近經常修改資料塊的交易狀態。
7. 可以在資料庫正處理交易的時候執行ALTER TABLESPACE ... READ ONLY語句。執行語句後,表空間就處於交易只讀狀態。不會允許任何交易(DML操作)應用於表空間。如果嘗試進行交易操作,那麼此操作會被終止和回滾。然而,那些已經做了變更並不再進行進一步修改的交易,就允許執行commit或roll back操作。
如果ALTER TABLESPACE ... READ ONLY語句執行前,一個交易已經執行了,但是回滾到一個儲存點,回滾了他對錶空間的變更,那麼ALTER TABLESPACE ... READ ONLY語句不會等待這個活動的交易。
8. 交易級只讀狀態僅僅當初始化引數COMPATIBLE是8.1.0或以上值時才能使用。如果引數值小於8.1.0,並且存在活動的交易,ALTER TABLESPACE ... READ ONLY語句會失敗。
9. 如果ATLER TABLESPACE語句執行時間太長了,那麼就需要找到阻止只讀狀態生效的那些交易。如下語句可以找出執行ALTER TABLESPACE ... RAED ONLY語句的交易入口和session地址(saddr):
SELECT SQL_TEXT, SADDR
FROM V$SQLAREA,V$SESSION
WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS AND SQL_TEXT LIKE 'alter tablespace%';
SQL_TEXT SADDR
---------------------------------------- --------
alter tablespace tbs1 read only 80034AF0
每個活動交易的開始SCN會儲存於V$TRANSACTION檢視中。起始SCN越小,說明這步操作就越早。潛在地這條語句越可能阻止接下來只讀狀態的變更。
SELECT SES_ADDR, START_SCNB
FROM V$TRANSACTION
ORDER BY START_SCNB;
SES_ADDR START_SCNB
-------- ----------
800352A0 3621 --> waiting on this txn
80035A50 3623 --> waiting on this txn
80034AF0 3628 --> this is the ALTER TABLESPACE statement
80037910 3629 --> don't care about this txn
可以用如下語句找到阻塞交易的使用者:
SELECT T.SES_ADDR, S.USERNAME, S.MACHINE
FROM V$SESSION S, V$TRANSACTION T
WHERE T.SES_ADDR = S.SADDR
ORDER BY T.SES_ADDR
SES_ADDR USERNAME MACHINE
-------- -------------------- --------------------
800352A0 DAVIDB DAVIDBLAP --> Contact this user
80035A50 MIKEL LAB61 --> Contact this user
80034AF0 DBA01 STEVEFLAP
80037910 NICKD NICKDLAP
將表空間置為read-only後,建議立即備份。只要表空間一直處於只讀狀態,那就不需要再次地備份,因為不會有對錶空間的更新。
10. 使用LATER TABLESPACE ... READ WRITE語句可以恢復只讀表空間,前提是具有ALTER TABLESPACE或MANAGE TABLESPACE許可權。
表空間置為read/write的前提條件還需要表空間中的所有資料檔案以及表空間自身都處於online狀態。可以使用ALTER DATABASE ... DATAFILE ... ONLINE語句將資料檔案置為online狀態。V$DATAFILE檢視顯示了資料檔案當前的狀態。
將表空間置為可寫模式,需要更新控制檔案,目的就是為了可以使用資料檔案的只讀版本作為恢復的起始點。
11. 在WORM裝置中建立一個只讀表空間。
(1) 建立一個可寫表空間。建立物件、插入資料。
(2) 將表空間置為read-only只讀模式。
(3) 使用作業系統命令將表空間的資料檔案複製到WORM裝置。
(4) 將表空間置為offline狀態。
(5) 重新命名資料檔案以符合複製到WORM裝置中的資料檔案命名規範。使用ALTER TABLESPACE ... RENAME DATAFILE語句,重新命名資料檔案的操作會修改控制檔案。
(6) 將表空間恢復為online狀態。
實驗:
1. 設定表空間為read only狀態:
SQL> alter tablespace dcsopen_tbs read only;
Tablespace altered.
2. 檢視資料檔案狀態:
SQL> select file#, name, status from v$datafile where file#=11;
FILE# NAME STATUS
----- ------------------------------------------------------- ------------------------
11 /oracle/oradata_petest/petest/dcsopen_tbs02.dbf ONLINE
3. 登入到只讀表空間:
SQL> select * from test1;
T1ID T1V
---------- ----------
1 t1
2 t2
3 t3
可以讀其中的表。
SQL> insert into test1 values(12, 't12');
insert into test1 values(12, 't12')
*
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 7: '/oracle/oradata_petest/petest/dcsopen_tbs01.dbf'
執行交易操作時提示7號資料檔案此時不能修改。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-1815876/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料庫表空間READ ONLY、READ WRITE、ONLINE、OFFLINE狀態對應CHECKPOINT的變化Oracle資料庫
- 表空間read only和online的狀態轉換
- oracle 表空間和表 read only遷移後不再read onlyOracle
- Data Guard物理備庫read/write後,切換回備庫狀態
- readwrite狀態下實現可傳輸表空間
- 重建控制檔案之後,只讀表空間的狀態變化
- HDFS read and write
- Oracle 11g RMAN恢復-只讀表空間的恢復(備份是在表空間只讀狀態下做的)Oracle
- write&read&open
- 含read only表空間的資料庫的控制檔案重建資料庫
- Backup And Recovery User's Guide-對於多個聯機read/write表空間進行使用者管理的備份GUIIDE
- system表空間不足的問題分析(二)
- 管理表空間(表空間的屬性)轉貼
- nodejs read/write fileNodeJS
- direct path read/write等待的分析
- SRAM的Write Assist與Read Assist
- 表空間監控(二)datafile size detailAI
- 還原表空間系列命令之二
- 利用PLSQL實現表空間的遷移(二)SQL
- 刪除表空間和表空間包含的檔案
- 分析表空間空閒率並收縮表空間
- Oracle的邏輯結構(表空間、段、區間、塊)——表空間Oracle
- 測試表的空間壓縮與表空間的關係
- 利用RMAN遷移表空間碰到的問題(二)
- 基於可傳輸表空間的表空間遷移
- open physical standby 為read write
- MySQL InnoDB 共享表空間和獨立表空間MySql
- 表空間管理之bigfile表空間設定
- 遷移SYSTEM表空間為本地管理表空間
- MySQL InnoDB 共享表空間和獨立表空間MySql
- oracle表空間的整理Oracle
- Oracle 表空間的管理Oracle
- Oracle 表空間 的操作Oracle
- ORACLE的SYSAUX 表空間OracleUX
- ORACLE的SYSTEM 表空間Oracle
- Oracle的表空間管理Oracle
- Oracle表空間Oracle
- PostgreSQL:表空間SQL