《Oracle從入門到精通》讀書筆記第八章 管理表空間和數據文件之一

8.1 表空間和數據文件的關係
表空間可以看成oracle數據庫的邏輯結構
數據文件可以看成oracle數據庫的物理結構
SQL> col tablespace_name for a10;
SQL> col file_name for a50;
SQL> col bytes for 999,999,999;
SQL> select tablespace_name,file_name,bytes from dba_data_files order by tablespace_name; 
TABLESPACE FILE_NAME BYTES
---------- -------------------------------------------------- ------------
EXAMPLE /ora/app/oracle/oradata/stone1/example01.dbf 104,857,600
SYSAUX /ora/app/oracle/oradata/stone1/sysaux01.dbf 555,745,280
SYSTEM /ora/app/oracle/oradata/stone1/system01.dbf 713,031,680
UNDOTBS1 /ora/app/oracle/oradata/stone1/undotbs01.dbf 89,128,960
USERS /ora/app/oracle/oradata/stone1/users01.dbf 5,242,880

8.2 oracle 11g的默認表空間
表空間
說明
example
存放各樣例的數據
system
存放數據字典,包括表,視圖,存儲過程的定義等
sysaux
system表空間的輔助表空間,存儲除數據字典外的其他數據對象
temp
存放SQL語句處理的表和索引的信息,比如數據排序就佔有此空間
undotbs1
存放撤銷數據的表空間
users
存放“應用系統”所使用的數據庫對象
SQL> col segment_type for a20;
SQL> col segment_name for a30;
SQL> col owner for a10;
SQL> select segment_type,segment_name,owner from dba_segments where tablespace_name='USERS';
SEGMENT_TYPE SEGMENT_NAME OWNER
-------------------- ------------------------------ ----------
TABLE DEPT SCOTT
TABLE EMP SCOTT
TABLE SALGRADE SCOTT
NESTED TABLE ACTION_TABLE OE
NESTED TABLE LINEITEM_TABLE OE
TABLE PURCHASEORDER OE
NESTED TABLE PRODUCT_REF_LIST_NESTEDTAB OE
NESTED TABLE SUBCATEGORY_REF_LIST_NESTEDTAB OE
TABLE CATEGORIES_TAB OE
TABLE JOBS_TEMP HR
INDEX PK_DEPT SCOTT
SEGMENT_TYPE SEGMENT_NAME OWNER
-------------------- ------------------------------ ----------
INDEX PK_EMP SCOTT
LOBINDEX SYS_IL0000074466C00004$$ OE
INDEX SYS_C0011033 OE
LOBINDEX SYS_IL0000074470C00005$$ OE
LOBINDEX SYS_IL0000074470C00010$$ OE
INDEX SYS_C0011034 OE
LOBINDEX SYS_IL0000074465C00004$$ OE
LOBINDEX SYS_IL0000074465C00005$$ OE
LOBINDEX SYS_IL0000074465C00008$$ OE
LOBINDEX SYS_IL0000074465C00012$$ OE
LOBINDEX SYS_IL0000074465C00017$$ OE
SEGMENT_TYPE SEGMENT_NAME OWNER
-------------------- ------------------------------ ----------
LOBINDEX SYS_IL0000074465C00026$$ OE
LOBINDEX SYS_IL0000074465C00033$$ OE
INDEX LINEITEM_TABLE_MEMBERS OE
INDEX ACTION_TABLE_MEMBERS OE
INDEX SYS_C0011037 OE
INDEX SYS_FK0000074515N00009$ OE
INDEX SYS_FK0000074515N00007$ OE
INDEX SYS_C0011038 OE
INDEX SYS_C0011039 OE
INDEX SYS_C0011040 OE
INDEX SYS_C0011041 OE
SEGMENT_TYPE SEGMENT_NAME OWNER
-------------------- ------------------------------ ----------
INDEX SYS_C0011128 HR
LOBSEGMENT SYS_LOB0000074466C00004$$ OE
LOBSEGMENT SYS_LOB0000074470C00005$$ OE
LOBSEGMENT SYS_LOB0000074470C00010$$ OE
LOBSEGMENT NAMESPACES567_L OE
LOBSEGMENT EXTRADATA566_L OE
LOBSEGMENT SYS_XDBPD$561_L OE
LOBSEGMENT SYS_XDBPD$562_L OE
LOBSEGMENT SYS_XDBPD$563_L OE
LOBSEGMENT SYS_XDBPD$564_L OE
LOBSEGMENT SYS_XDBPD$565_L OE
44 rows selected.

SQL> select owner,count(segment_name) from dba_segments where tablespace_name='SYSAUX' group by owner;
OWNER COUNT(SEGMENT_NAME)
---------- -------------------
MDSYS 262
CTXSYS 55
OLAPSYS 117
SYSTEM 149
EXFSYS 58
APEX_03020 467
0
DBSNMP 8
ORDSYS 7
SYSMAN 578
OWNER COUNT(SEGMENT_NAME)
---------- -------------------
XDB 885
ORDDATA 148
SYS 927
WMSYS 49
13 rows selected.

8.3 創建表空間
建議將不同類型的數據對象存放到不同的表空間
創建表空間必須考慮以下幾點:
(1)是創建小文件表空間,還是大文件表空間(默認爲小文件表空間)
(2)是使用局部盤區管理方式,還是使用傳統的目錄盤區管理方式(默認爲局部盤區管理)
(3)是手動管理段空間,還是自動管理段空間(默認是自動)
(4)是否用於臨時段或撤銷段的特殊表空間

8.3.1 創建表空間的語法
語法格式:
create[smallfile|bigfile]|[undo]tablespacetablespace_name
datafile'/path/filename'sizenum[k/m]reuse
[,'/path/filename'sizenum[k/m]reuse]
[,...]
[autoextend [on|off] next num[k/m]
[maxsizenum[k/m] |unlimited]
[mininum extentnum[k/m]]
[default storagestorage]
[online | offline]
[logging | nologging]
[permanent | temporary]
[extent management dictionary | local [autoallocate | uniform sizenum[k/m]]]
1、語法中的關鍵字:
small|bigfile:表示創建的所需文件表空間還是大文件表空間
reuse:表示若該文件存在,則清除該文件再重新建立該文件
autoextend [on|off] next:表示數據文件爲自動擴展或非自動擴展,如果是自動擴展,則需要設置next的值
maxsize:表示當數據文件自動擴展時,允許數據文件擴展的最大長度字節數,unlimited關鍵字表示不需要指定字節長度
minimum extend:指定最小的長度,由操作系統和數據庫的塊決定
default storage:指定以後要創建的表、索引及簇的儲存參數值
online|offline:指定在線或離線
logging|nologging:指定該表空間內的表在加載數據時是否產生日誌,默認爲logging
permanent|temporary:指定創建的表空間是永久性表空間或臨時表空間,默認爲永久性表空間
extend management dictionary | local:指定表空間的擴展方式是使用數據字典管理還是本地化管理,默認爲本地化管理
autoallocate|uniform size:如果採用本地化管理表空間,在表空間擴展時,指定沒出盤區擴展的大小是由系統自動指定還是按照等同大小進行。

2、語法中的參數
tablespace_name:表示要創建的表空間名稱
'/path/filename':表示數據文件的路徑和名稱

8.3.2 通過本地化管理方式創建表空間
SQL> col tablespace_name for a10;
SQL> col file_name for a50;
SQL> col bytes for 999,999,999;
SQL> select tablespace_name,file_name,bytes from dba_data_files order by tablespace_name;
TABLESPACE FILE_NAME BYTES
---------- -------------------------------------------------- ------------
EXAMPLE /ora/app/oracle/oradata/stone1/example01.dbf 104,857,600
SYSAUX /ora/app/oracle/oradata/stone1/sysaux01.dbf 555,745,280
SYSTEM /ora/app/oracle/oradata/stone1/system01.dbf 713,031,680
UNDOTBS1 /ora/app/oracle/oradata/stone1/undotbs01.dbf 89,128,960
USERS /ora/app/oracle/oradata/stone1/users01.dbf 5,242,880

SQL> create tablespace tbs_test_1 datafile '/ora/app/oracle/oradata/stone1/datafile1.dbf'
  2 size 10m
  3 extent management local uniform size 256k;
Tablespace created.
SQL> create tablespace tbs_test_2 datafile '/ora/app/oracle/oradata/stone1/datafile2.dbf'
  2 size 10m
  3 extent management local autoallocate;
Tablespace created.
SQL> select tablespace_name,file_name,bytes from dba_data_files order by tablespace_name;
TABLESPACE FILE_NAME BYTES
---------- -------------------------------------------------- ------------
EXAMPLE /ora/app/oracle/oradata/stone1/example01.dbf 104,857,600
SYSAUX /ora/app/oracle/oradata/stone1/sysaux01.dbf 555,745,280
SYSTEM /ora/app/oracle/oradata/stone1/system01.dbf 713,031,680
TBS_TEST_1 /ora/app/oracle/oradata/stone1/datafile1.dbf 10,485,760
TBS_TEST_2 /ora/app/oracle/oradata/stone1/datafile2.dbf 10,485,760
UNDOTBS1 /ora/app/oracle/oradata/stone1/undotbs01.dbf 89,128,960
USERS /ora/app/oracle/oradata/stone1/users01.dbf 5,242,880
7 rows selected.

8.3.3 通過段空間管理方式創建表空間
只有本地化管理方式的表空間,才能在其基礎上進一步建立段空間管理方式
使用“segment space management manual/local”語句
1、手動段空間管理方式
PCT_FREE,PCT_USED
SQL> create tablespace tbs_test_3
  2 datafile '/ora/app/oracle/oradata/stone1/datafile3.dbf'
  3 size 10m
  4 extent management local autoallocate
  5 segment space management manual;
Tablespace created.

2、自動段空間管理方式
創建表空間首選方式
需要注意以下兩種情況:
a、自動段空間管理方式不能用於創建臨時表空間和系統表空間
b、oracle推薦使用自動段空間管理方式管理永久表空間,但默認情況下卻是manual,所有在創建表空間時需要明確指定爲auto

SQL> create tablespace tbs_test_4
  2 datafile '/ora/app/oracle/oradata/stone1/datafile4.dbf'
  3 size 10m
  4 extent management local autoallocate
  5 segment space management auto;
Tablespace created.

SQL> select tablespace_name,file_name,bytes from dba_data_files order by tablespace_name;
TABLESPACE FILE_NAME BYTES
---------- -------------------------------------------------- ------------
EXAMPLE /ora/app/oracle/oradata/stone1/example01.dbf 104,857,600
SYSAUX /ora/app/oracle/oradata/stone1/sysaux01.dbf 555,745,280
SYSTEM /ora/app/oracle/oradata/stone1/system01.dbf 713,031,680
TBS_TEST_1 /ora/app/oracle/oradata/stone1/datafile1.dbf 10,485,760
TBS_TEST_2 /ora/app/oracle/oradata/stone1/datafile2.dbf 10,485,760
TBS_TEST_3 /ora/app/oracle/oradata/stone1/datafile3.dbf 10,485,760
TBS_TEST_4 /ora/app/oracle/oradata/stone1/datafile4.dbf 10,485,760
UNDOTBS1 /ora/app/oracle/oradata/stone1/undotbs01.dbf 89,128,960
USERS /ora/app/oracle/oradata/stone1/users01.dbf 5,242,880
9 rows selected.

8.3.4 創建非標準塊表空間
需要注意以下幾點:
a、表空間的非標準塊的大小爲基本塊的倍數。
b、oracle通常使用SGA自動共享內存管理,因此需要設置初始化參數db_16k_cache_size=16K。
c、這種塊較大的表空間通常用來存放大對象(LOB)類型

SQL> alter system set db_16k_cache_size=16k scope=both;
System altered.
SQL> create tablespace tbs_test_5
  2 datafile '/ora/app/oracle/oradata/stone1/datafile5.dbf'
  3 size 10m
  4 autoextend on next 4m maxsize unlimited
  5 blocksize 16k
  6 extent management local autoallocate
  7 segment space management auto;
Tablespace created.

8.3.5 建立大文件表空間
大文件(bigfile)表空間注意用在存儲區域網絡(san),磁盤陣列,自動存儲管理上等
SQL> create bigfile tablespace tbs_big
  2 datafile '/ora/app/oracle/oradata/stone1/datafilebig.dbf'
  3 size 10m;
Tablespace created.

SQL> alter tablespace tbs_big resize 20m;
Tablespace altered.
SQL> alter tablespace tbs_test_4 resize 20m;
alter tablespace tbs_test_4 resize 20m
*
ERROR at line 1:
ORA-32773: operation not supported for smallfile tablespace TBS_TEST_4

SQL> alter database datafile '/ora/app/oracle/oradata/stone1/datafile4.dbf'
  2 resize 20m;
Database altered.

8.4 維護表空間和數據文件
8.4.1 設置數據庫默認表空間
SQL> alter database default tablespace tbs_test_1;
Database altered.

8.4.2 更改表空間的狀態
設置表空間只讀必須滿足下列條件:
a、該表空間必須爲online狀態
b、該表空間不能包含任何回滾段
c、該表空間不能在歸檔模式下
SQL> alter tablespace tbs_test_2 read only;
Tablespace altered.
SQL> alter tablespace tbs_test_2 read write;
Tablespace altered.

8.4.3 重命名錶空間
只能對普通的表空間進行重命名,不能對system和sysaux表空間進行重命名,也不能對已經處於offline狀態的表空間進行重命名。
SQL> alter tablespace tbs_test_5 rename to tbs_test_5_new;
Tablespace altered.

8.4.4 刪除表空間
語法格式:
drop tablespace tbs_name [including contents] [cascade constraints]
tbs_name:表空間名稱
including contents:刪除表空間的同時刪除表空間中的數據,如果不指定該參數,而表空間又有數據時,則oracle會提示錯誤。
cascade constraints:刪除表空間的同時也刪除相關的完整性約束,如果完整性操作,而沒有該參數,在會報錯
SQL> drop tablespace tbs_test_5_new
  2 including contents
  3 cascade constraints;
Tablespace dropped.

8.4.5 維護表空間中的數據文件
1、向表空間添加數據文件
SQL> select tablespace_name,file_name,bytes from dba_data_files order by tablespace_name;
TABLESPACE FILE_NAME BYTES
---------- -------------------------------------------------- ------------
EXAMPLE /ora/app/oracle/oradata/stone1/example01.dbf 104,857,600
SYSAUX /ora/app/oracle/oradata/stone1/sysaux01.dbf 555,745,280
SYSTEM /ora/app/oracle/oradata/stone1/system01.dbf 713,031,680
TBS_BIG /ora/app/oracle/oradata/stone1/datafilebig.dbf 20,971,520
TBS_TEST_1 /ora/app/oracle/oradata/stone1/datafile1.dbf 10,485,760
TBS_TEST_2 /ora/app/oracle/oradata/stone1/datafile2.dbf 10,485,760
TBS_TEST_3 /ora/app/oracle/oradata/stone1/datafile3.dbf 10,485,760
TBS_TEST_4 /ora/app/oracle/oradata/stone1/datafile4.dbf 20,971,520
UNDOTBS1 /ora/app/oracle/oradata/stone1/undotbs01.dbf 89,128,960
USERS /ora/app/oracle/oradata/stone1/users01.dbf 5,242,880
10 rows selected.

SQL> alter tablespace users
  2 add datafile '/ora/app/oracle/oradata/stone1/users02.dbf'
  3 size 10m
  4 autoextend on next 5m maxsize unlimited;
Tablespace altered.

2、從表空間中刪除數據文件
SQL> alter tablespace users
  2 drop datafile '/ora/app/oracle/oradata/stone1/users02.dbf'
  3 ;
Tablespace altered.

3、對數據文件的自動擴展設置
可以在alter database或者alter tablespace語句中進行設置
SQL> select tablespace_name,file_name,autoextensible from dba_data_files;
TABLESPACE FILE_NAME AUTOEXTEN
---------- -------------------------------------------------- ---------
USERS /ora/app/oracle/oradata/stone1/users01.dbf YES
UNDOTBS1 /ora/app/oracle/oradata/stone1/undotbs01.dbf YES
SYSAUX /ora/app/oracle/oradata/stone1/sysaux01.dbf YES
SYSTEM /ora/app/oracle/oradata/stone1/system01.dbf YES
EXAMPLE /ora/app/oracle/oradata/stone1/example01.dbf YES
TBS_TEST_1 /ora/app/oracle/oradata/stone1/datafile1.dbf NO
TBS_TEST_2 /ora/app/oracle/oradata/stone1/datafile2.dbfNO
TBS_TEST_3 /ora/app/oracle/oradata/stone1/datafile3.dbf NO
TBS_TEST_4 /ora/app/oracle/oradata/stone1/datafile4.dbf NO
TBS_BIG /ora/app/oracle/oradata/stone1/datafilebig.dbf NO
10 rows selected.
SQL> alter database
  2 datafile '/ora/app/oracle/oradata/stone1/datafile2.dbf'
  3 autoextend on next 5m maxsize unlimited;
Database altered.
SQL> select tablespace_name,file_name,autoextensible from dba_data_files;
TABLESPACE FILE_NAME AUTOEXTEN
---------- -------------------------------------------------- ---------
USERS /ora/app/oracle/oradata/stone1/users01.dbf YES
UNDOTBS1 /ora/app/oracle/oradata/stone1/undotbs01.dbf YES
SYSAUX /ora/app/oracle/oradata/stone1/sysaux01.dbf YES
SYSTEM /ora/app/oracle/oradata/stone1/system01.dbf YES
EXAMPLE /ora/app/oracle/oradata/stone1/example01.dbf YES
TBS_TEST_1 /ora/app/oracle/oradata/stone1/datafile1.dbf NO
TBS_TEST_2 /ora/app/oracle/oradata/stone1/datafile2.dbfYES
TBS_TEST_3 /ora/app/oracle/oradata/stone1/datafile3.dbf NO
TBS_TEST_4 /ora/app/oracle/oradata/stone1/datafile4.dbf NO
TBS_BIG /ora/app/oracle/oradata/stone1/datafilebig.dbf NO
10 rows selected.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章