Oracle的表空间和数据文件
一、 概念
表空間:是一個或多個數據文件的邏輯集合
????表空間邏輯存儲對象: 永久段-->如表與索引
???????????????????????? 臨時段-->如臨時表數據與排序段
????????????????????? 回滾段-->用于事物回滾或閃回內存的撤銷數據
????表空間分類:系統表空間(system、sysaux),非系統表空間
???
????一個表空間至少包含一個數據文件,一個數據文件只能屬于一個表空間。
???
????不可或缺的幾個表空間:
????SYSTEM --->字典表空間,不能被損壞
????UNDO????--->dml,dql把數據快照到此,數據提交即消失(用于恢復)
????SYSAUX??--->10g?高并發系統繁忙時,會造成system爭用,將工具放到SYSAUX,減輕system的壓力,SYSAUX不影響系統(影響性能)
????TEMP????--->臨時數據相關的內容
????USERS???--->10g??用戶數據從system撥離出來
?
二、Oracle的存儲結構
????1.Schema:?用戶--->創建相關對象、表、視圖、序列、函數、存儲過程、包等
????2.邏輯結構:database數據庫--->tablespace表空間---> segment段--->extent區間----> block塊
????????????邏輯結構是Oracle內部管理數據庫中對象的方式
????3.物理結構:OS??block --->datafile?物理結構通常是一系列數據文件
?
三、表空間的管理
創建表空間
--簡要語法:
????CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name
????DATAFILE datafile spec | TEMPFILE tempfile spec
????[MINIMUM EXTENT minimum extent size]
????[BLOCKSIZE blocksize]
????[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]
????[LOGGING|NOLOGGING]
????[FORCE LOGGING]
????[ONLINE|OFFLINE]
????[EXTENT MANAGEMENT DICTIONARY |
????LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]
????[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]
????[FLASHBACK ON|OFF]
?
--獲得創建表空間的語句
SELECT dbms_metadata.get_ddl('TABLESPACE','SYSTEM') FROM dual;?
--查看缺省是BIGFILE?還是SMALLFILE,當缺省為SMALLFILE,創建表空間不指定表空間類型則為SMALLFILE
SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAME like '%TBS%';PROPERTY_NAME PROPERTY_VALUE------------------------------ --------------------------------------------------DEFAULT_TBS_TYPE SMALLFILE??注意:
????大表文件(bigfile)最大可以存放個T的容量。頭文件的大小達到了G-->block,普通的頭文件大小為M---->block。
????create bigfile tablespace <> datafile <>........;
???????好處:減少了數據文件的個數,管理方便,大的對象的存放得到了優化。減少了control文件的信息,控制文件定義了datafile的個數。
???????bigfile只能存在一個數據文件,所以要保證分配的的磁盤具有足夠的空間。?*/
?
--演示創建表空間
SQL> create tablespace dev2 datafile '/u01/app/oracle/oradata/orcl/dev01.dbf' size 50M,3 '/u01/app/oracle/oradata/orcl/dev02.dbf' size 50M;表空間已創建。--創建自動擴容的表空間
SQL> create tablespace uat2 datafile '/u01/app/oracle/oradata/orcl/uat.dbf' size 32m 3 autoextend on maxsize unlimited;可以通過查看自動擴容是否打開
SQL> select file_name,autoextensible from dba_data_files where tablespace_name='UAT';表空間改名
?
SQL> alter tablespace dev rename to dev1;?
?
將表空間設置為只讀
注意只讀表空間中的對象是可以被刪除的,能執行DML語句,可以使用的為DDL
?
SQL> alter tablespace dev1 read only;?
重新設置回可讀可寫
SQL> alter tablespace dev1 read write;?
?
?
?
移動數據文件
1.查出數據文件的位置和所屬表空間
?
select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)" from dba_data_files;?
2.將要移動的表空間離線
SQL> alter tablespace uat offline;3.在操作系統下將文件移動到另外一個位置
SQL> host cp /u01/app/oracle/oradata/orcl/uat.dbf /u02/uat.dbf4.?修改控制文件,將數據文件的指針重新指向到另一個位置(執行rename)
SQL> alter tablespace uat rename datafile '/u01/app/oracle/oradata/orcl/uat.dbf'2 to '/u02/uat.dbf';5. 使表空間在線
SQL> alter tablespace uat online;6.刪除原來位置的應該廢棄的物理文件
SQL> host rm /u01/app/oracle/oradata/orcl/uat.dbf? 如過表空間不能脫機的話,就啟動數據庫到mount狀態下,其余步驟是一樣的。
?
?
表空間的擴容
可以通過如下的方法擴容表空間
(1)重置數據文件大小
????????????ALTER?DATABASE?DATAFILE?'...'?|?FileNo RESIZE XX
?? ? ? ?(2)設置數據文件能自動增長
???????????ALTER?DATABASE?DATAFILE?'... '|?FileNo AUTOEXTEND?ON?|?OFF?NEXT 20M?MAXSIZE?300M;
????????????--查看哪些表空間為自動增長
???????????SELECT?FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE?FROM?dba_data_files
(3)添加數據文件
? 增加到表空間中的數據文件不能直接從表空間中刪除,除非刪掉整個表空間
增加數據文件將有助于均衡I/O
文件越多,執行一次檢查點的代價越高??*/
ALTER TABLESPACE tbs2 ADD DATAFILE '/u01/app/oracle/oradata/orcl/tbs2.dbf' size 200m autoextend on ;?
刪除表空間
DROP?TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]]
INCLUDING CONTENTS ? --刪除段
DATAFILES ?--刪除數據文件
SQL> drop tablespace uat including contents and datafiles;?
臨時表空間
臨時表空間具有以下特征:
- 臨時表空間是作為排序操作使用的,當內存排序區不夠時,使用臨時表空間可以改進數據庫的效率
- 創建臨時表空間,不能使用非標準數據塊
- 臨時表空間不能存放永久對象
- 當有第一個排序操作時創建排序段
--創建臨時表空間
SQL> create temporary tablespace tmp02 tempfile2 '/u01/app/oracle/oradata/orcl/tmp02.dbf' size 100M;表空間已創建。--指定默認的臨時表空間
默認臨時表空間最好要指定一下,如果沒有指定默認的臨時表空間,那么將使用system表空間作為排?序區
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tmp02;--查看默認的臨時表空間
select * from database_properties t where t.property_name like 'DEFAULT_TEMP%';?
還原表空間
--創建還原表空間
SQL> create undo tablespace undo22 datafile '/u01/app/oracle/oradata/orcl/undo2.dbf' size 200M;?--修改當前系統的UNDO表空間:
ALTER SYSTEM SET UNDO_TABLESPACE=tablespace_name;?
四、相關視圖
--獲取表空間和數據文件信息
???????--表空間信息
???????????dba_tablespaces
???????????v$tablespace
???????--數據文件信息
???????????dba_data_files
???????????v$datafile
???????--臨時數據文件信息
???????????dba_temp_files
???????????v$tempfile
?
--查看系統默認的表空間及臨時表空間:??
???????SQL>?select?PROPERTY_NAME,PROPERTY_VALUE?from?database_properties??where?PROPERTY_NAME?like?'DEFAULT%';
?
??--修改改系統的默認表空間:??
? SQL>ALTER?DATABASE?DEFAULT?TEMPORARY TABLESPACE tablespace_name;
?
--查看用戶默認表空間:
SQL>select?USERNAME,USER_ID,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE?from?dba_users;
?
?--修改用戶默認表空間:
???????SQL>ALTER?USER?user_name?DEFAULT?TABLESPACE tablespace_name
?
--查看表空間的使用情況:
???????dba_data_files;
???????dba_free_space;
??????????
???????--例:查每個表空間的剩余空間
???????SQL>?select?tablespace_name,sum(bytes/1024/1024)?from?dba_free_space?group?by?tablespace_name;?
? ? ? ?
轉載于:https://www.cnblogs.com/zydev/p/6233831.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Oracle的表空间和数据文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用DeviceOne实现微信小程序功能
- 下一篇: 知识的分类