Oracle 10g大檔案表空間(轉)
日期:27-Nov-2004
出處:http://www.dbanotes.net
版本:0.1
簡單介紹
Oracle 10g 的儲存能力有了顯著的增強。這表現在很多方面,下面介紹 10g 新增的表空間型別:大檔案 (Bigfile) 表空間。
大檔案表空間從某種角度來說提高了 Oracle 在 VLDB 上的管理能力。 只有自動段空間管理的 LMT (Locally Managed Tablespaces ) 支援 BIGFILE 表空間。 大檔案表空間只能包含一個檔案,但是檔案可以達到 4G 個資料塊大小。(以下用 BFT 指代 BIGFILE Tablespace。)
BFT 可以和以下儲存技術結合使用:
- 自動儲存管理(ASM)
- LVM
- OMF
理論上的 BFT 可以達到下面所列的值:
資料塊大小(單位:K) BFT 最大值(單位:T) 2k 8T 4k 16T 8k 32T 16k 64T 32k 128T
在實際環境中,這還受到作業系統的檔案系統的限制。
BFT基本操作
10g 資料庫在建立的時候,會指定預設的表空間型別。如果不特殊指定的話,預設為 SMALLFILE 型別的表空間。
SQL> SELECT * 2 FROM database_properties 3 WHERE property_name = 'DEFAULT_TBS_TYPE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION -------------------- --------------- ---------------------------------------- DEFAULT_TBS_TYPE SMALLFILE Default tablespace type
這種情況下,如果我們建立表空間的時候不指定型別,那麼預設建立的都是 SMALLFILE 型別的表空間。可以通過 ALTER DATABASE 命令來修改資料庫預設的表空間型別:
SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE; Database altered. SQL> SELECT * 2 FROM database_properties 3 WHERE property_name = 'DEFAULT_TBS_TYPE'; PROPERTY_NAME PROPERTY_VALUE DESCRIPTION -------------------- --------------- ---------------------------------------- DEFAULT_TBS_TYPE BIGFILE Default tablespace type SQL>
SQL> ALTER DATABASE SET DEFAULT smallfile TABLESPACE;
建立 BIGFILE 型別的表空間,只需指定額外的一個引數 BIGFILE 即可,其他和原有建立表空間語法類似:
CREATE BIGFILE TABLESPACE bftbs DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs01.dbf' SIZE 5M;
DBA_TABLESPACES (USER_TABLESPACES)與 V$TABLESPACE 這兩個檢視可以檢視 BIGFILE 表空間的相關資訊。先看看 DBA_TABLESPACES 在 10g 中有了什麼變化:
SQL> desc DBA_TABLESPACES Name Null? Type ----------------------------------------- -------- ------------------------ TABLESPACE_NAME NOT NULL VARCHAR2(30) BLOCK_SIZE NOT NULL NUMBER INITIAL_EXTENT NUMBER NEXT_EXTENT NUMBER MIN_EXTENTS NOT NULL NUMBER MAX_EXTENTS NUMBER PCT_INCREASE NUMBER MIN_EXTLEN NUMBER STATUS VARCHAR2(9) CONTENTS VARCHAR2(9) LOGGING VARCHAR2(9) FORCE_LOGGING VARCHAR2(3) EXTENT_MANAGEMENT VARCHAR2(10) ALLOCATION_TYPE VARCHAR2(9) PLUGGED_IN VARCHAR2(3) SEGMENT_SPACE_MANAGEMENT VARCHAR2(6) DEF_TAB_COMPRESSION VARCHAR2(8) RETENTION VARCHAR2(11) BIGFILE VARCHAR2(3) SQL>
和 9i 相比, DBA_TABLESPACES 檢視多了兩列:RETENTION 和 BIGFILE。其中 BIGFILE 列說明該表空間是否為 BFT:
V$TABLESPACE 檢視相對 9i 也增加了新的列:SQL> SELECT tablespace_name, bigfile 2 FROM dba_tablespaces; TABLESPACE_NAME BIG ------------------------------ --- SYSTEM NO UNDOTBS NO SYSAUX NO TEMP NO USERS NO EXAMPLE NO TEST NO BFTBS YES 8 rows selected.
SQL> desc V$TABLESPACE Name Null? Type ----------------------------------------- -------- ------------------------ TS# NUMBER NAME VARCHAR2(30) INCLUDED_IN_DATABASE_BACKUP VARCHAR2(3) BIGFILE VARCHAR2(3) FLASHBACK_ON VARCHAR2(3)
其中 FlASHBACK_ON 和 BIGFILE 列都是新增的。
BFT 屬性
BFT有一些特有的屬性。
1.每個表空間只能包含一個資料檔案。如果試圖新增新的檔案,則會報告 ORA-32771 錯誤:
SQL> ALTER TABLESPACE bftbs 2 ADD DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M; ALTER TABLESPACE bftbs * ERROR at line 1: ORA-32771: cannot add file to bigfile tablespace
2.只有自動段空間管理的 LMT (locally managed tablespaces ) 支援 BFT
SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M 3 EXTENT MANAGEMENT DICTIONARY; CREATE BIGFILE TABLESPACE bftbs02 * ERROR at line 1: ORA-12913: Cannot create dictionary managed tablespace SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 5M 3 SEGMENT SPACE MANAGEMENT MANUAL; CREATE BIGFILE TABLESPACE bftbs02 * ERROR at line 1: ORA-32772: BIGFILE is invalid option for this type of tablespace
3.相對檔案號(RELATIVE_FNO)為1024 ( 4096 on OS/390)
因為BFT只有一個資料檔案,所以其相對檔案號也是固定的:1024
SQL> SELECT tablespace_name, file_id, relative_fno 2 FROM dba_data_files; TABLESPACE_NAME FILE_ID RELATIVE_FNO ------------------------------ ---------- ------------ USERS 4 4 SYSAUX 3 3 UNDOTBS 2 2 SYSTEM 1 1 EXAMPLE 5 5 TEST 6 6 BFTBS 7 1024 7 rows selected. SQL>
4.rowid的變化
在 BFT 上儲存的表的 ROWID 與 smallfile 表空間上的 rowid 結構有些不同的。要正確得到 rowid 資訊,dbms_rowid 包增加了一個新的引數 ts_type_in 來解決這個問題。參考這個範例:
SQL> SELECT DBMS_ROWID.rowid_block_number (ROWID, 'BIGFILE') 2 FROM foo; DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID,'BIGFILE') ---------------------------------------------- 24 SQL>
你可以建立多大的表空間?
我們在前面提及,BFT 還受到作業系統的檔案系統的限制。下面我們以 Linux 作業系統為例:
也就是說,理論上我們可以建立最大 32T (4G*8K) 的表空間。我們可以做到麼?SQL> SHOW parameters db_block_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_block_size integer 8192 SQL>
SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 20T reuse; CREATE BIGFILE TABLESPACE bftbs02 * ERROR at line 1: ORA-01119: error in creating database file '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' ORA-27059: could not reduce file size Linux Error: 27: File too large Additional information: 2 SQL>
注意我們得到的作業系統資訊(黑色部分):File too large 。這說明超出了作業系統允許值。我所用的環境是Fedora Core Linux, 核心的版本是2.6.9,檔案系統是 EXT3 。2.4以後的版本的核心都是支援 LFS (Large File Support)的。
檔案系統(塊) 檔案大小限制 檔案系統大小限制 ext2/3 (2K) 256G 8T ext2/3 (4K) 2T 16T ext2/3 (8K) 64T 32T ReiserFS 3.6 1E 16T
我們檢查一下OS檔案系統塊大小:
[root@FC3 ~]# tune2fs -l /dev/hda7 | grep Block Block count: 2621440 Block size: 4096 Blocks per group: 32768 [root@FC3 ~]#
也即,我們可以在作業系統上建立不大於 2T 的檔案。雖然我們沒有那麼大的儲存空間,不妨也測試一下:
SQL> CREATE BIGFILE TABLESPACE bftbs02 2 DATAFILE '/u01/app/oracle/oradata/DEMO/bftbs02.dbf' SIZE 1800g;
在另外一個終端中,觀察該目錄的變化情況:
[root@FC3 DEMO]# ls -ltr total 1159048 -rw------- 1 oracle oracle 5251072 Nov 28 20:05 bftbs01.dbf -rw------- 1 oracle oracle 1932735291392 Nov 28 20:49 bftbs02.dbf [root@FC3 DEMO]#
哇,我們真的能觀察到Oracle在建立“超大”檔案呢,接近1.8T 的檔案 :-) 要過一會兒,Oracle 才會報告錯誤(畢竟1800G 的大檔案):
CREATE BIGFILE TABLESPACE bftbs02 * ERROR at line 1: ORA-19502: write error on file "/u01/app/oracle/oradata/DEMO/bftbs02.dbf", blockno 898048 (blocksize=8192) ORA-27072: File I/O error Additional information: 898047
可見,在本例中,由於作業系統檔案系統的限制,我們只可以建立2T以下的 BFT。
你需要BFT麼?
應用 BFT 的話,優點缺點都存在。根據 Oracle 官方的文件,DB_FILES 和 MAXDATAFILES 這兩個引數的值給 SGA 帶來的壓力會減輕(原來的壓力就很大麼?)。資料庫中最大資料檔案數是有限的 (64K files),BFT 的出現的確對海量資料庫有一定的積極意義。從一定程度上來說,BFT 簡化了管理多個資料檔案的複雜性,但是在恢復的時候可能是一場災難。
在筆者看來,至少我們現在在大多數情況下不需要用 BFT 。"你要把雞蛋都放到一個籃子裡麼? "
參考資訊
Oracle Database Administrator's Guide 10g Release 1 (10.1) Part Number B10739-01 ( Note 62294.1 ) Large File Support in Linux - http://www.suse.de/~aj/linux_lfs.html
Metalink [NOTE:262472.1] 10g: BIGFILE Type Tablespaces Versus SMALLFILE Type
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242278/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 10g大檔案表空間Oracle 10g
- [Oracle 10g] 大檔案表空間(zt)Oracle 10g
- 大檔案表空間
- Oracle Bigfile Tablespace大檔案表空間Oracle
- Oracle 表空間增加檔案Oracle
- (個人)Oracle 表空間資料檔案遷移(轉)Oracle
- oracle 10g表空間操作Oracle 10g
- Oracle 表空間與資料檔案Oracle
- oracle 資料檔案表空間管理Oracle
- 收縮表空間 for Oracle 10gOracle 10g
- oracle 表空間 資料檔案 筆記Oracle筆記
- Oracle 表空間資料檔案遷移Oracle
- Oracle 10g UNDO表空間過大的解決方案Oracle 10g
- 移動資料檔案、系統表空間檔案、臨時表空間檔案
- oracle 普通表空間資料檔案壞塊Oracle
- oracle 回收表空間的資料檔案大小Oracle
- 誤刪oracle資料庫表空間檔案Oracle資料庫
- 刪除表空間和表空間包含的檔案
- [轉移]ORACLE MOVE 表空間Oracle
- ORACLE表空間、資料檔案離線問題Oracle
- oracle基礎管理——表空間和資料檔案Oracle
- oracle誤刪除表空間的資料檔案Oracle
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- Oracle案例11——Oracle表空間資料庫檔案收縮Oracle資料庫
- 【學習日記】oracle之表空間、資料檔案、控制檔案Oracle
- Oracle 10g的可傳輸表空間操作(轉並驗證)Oracle 10g
- MySQL innodb共享表空間新增表空間資料檔案方法MySql
- 10g ORACLE_HOME空間滿導致SYSAUX表空間離線OracleUX
- 2.5.9 在資料庫建立期間支援大檔案表空間資料庫
- 修改表空間檔案路徑
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- Oracle 10g 物理DataGuard擴充套件表空間Oracle 10g套件
- oracle 10g 傳輸表空間的測試Oracle 10g
- Oracle 10g的可傳輸表空間操作Oracle 10g
- 轉:Oracle 臨時表空間過大問題解決Oracle
- oracle rac on aix 下為表空間增加資料檔案OracleAI
- oracle刪除(釋放)資料檔案/表空間流程Oracle
- Oracle 查詢各個 “表空間/資料檔案” 的空間使用比情況Oracle