達夢數據庫學習(四、表空間管理)
上期回顧:
一、數據庫的物理結構和邏輯結構
物理結構:
文件系統(XFS、ext4、NTFS、DMASM等
分析場景:文件系統(有緩存,易擴展)、裸設備(有緩存,不易擴展)
格式化:mkfs、format、inode、block
邏輯結構:
數據庫----表空間(一個或多個文件構成)----段----簇----頁
備注:達夢數據庫不支持傳輸表空間(達夢通過導出導入的方式來實現把一個庫移到另一個庫)
表空間部分需要掌握的內容:
1、數據庫默認表空間的作用
SQL>select tablespace_name from dba_tablespaces;
行號 TABLESPACE_NAME
---------- ---------------
1 SYSTEM 系統表空間 存放數據字典
2 ROLL 回滾表空間 存放回滾段
3 TEMP 臨時表空間 臨時段
4 MAIN 默認表空間
5 BOOKSHOP 某示例庫表空間
6 DMHR 某示例庫表空間
7 HMAIN HUGE表空間 存放列存儲
SQL>select tablespace_name,file_name from dba_data_files;
行號 TABLESPACE_NAME FILE_NAME
---------- --------------- -----------------------------
1 SYSTEM /dm8/data/DAMENG/SYSTEM.DBF
2 DMHR /dm8/data/DAMENG/DMHR.DBF
3 BOOKSHOP /dm8/data/DAMENG/BOOKSHOP.DBF
4 MAIN /dm8/data/DAMENG/MAIN.DBF
5 TEMP /dm8/data/DAMENG/TEMP.DBF
6 ROLL /dm8/data/DAMENG/ROLL.DBF
SQL>select tablespace_name,BYTES/1024/1024 from dba_free_space;
行號 TABLESPACE_NAME BYTES/1024./1024
---------- --------------- ----------------
1 SYSTEM 17.1953125
2 DMHR 127.9375
3 BOOKSHOP 149.1015625
4 MAIN 127.5390625
5 TEMP 9.9375
6 ROLL 118.8828125
2、創建表空間
注意創建表空間中所有大小單位都是M,且不需要寫單位
案例1:規划一個表空間TBS1,要求初始文件大小為31M;
SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/tbs1.dbf’ size 31;
出現錯誤提示“數據文件大小無效”
為什么呢?
SQL>select page;--查看數據庫頁大小;
SQL>select 8192*4096/1024/1024;--32M
根據頁大小算表空間單個數據文件最小大小。
這段沒弄懂,但是上網查詢了資料,還是不太懂。
http://blog.itpub.net/31403259/viewspace-2687231/
所以當頁大小為8K時,對應數據庫表空間單個數據文件最小為32M。
SQL>create tablespace TBS1 datafile ‘/dm8/data/DAMENG/TBS1.dbf’ size 32;
案例2:創建一個表空間TBS2,初始大小為32M,最大大小1G
SQL>create tablespace TBS2 datafile ‘/dm8/data/DAMENG/TBS2.dbf’ size 32 autoextend on maxsize 1024;
注意其中若設定最大大小的話,則需要增加自動擴展參數autoextend on
案例3:創建一個表空間TBS3,初始大小32M,最大1G,每次自動擴展2M
SQL>create tablespace TBS3 datafile ‘/dm8/data/DAMENG/TBS3.dbf’ size 32 autoextend on next 2 maxsize 1024
案例4:規划表空間TBS4,包含2個數據文件,單個文件初始值32M,最大2G
SQL>create tablespace TBS4 datafile ‘/dm8/data./DAMENG/TBS4_1.dbf’ size 32 autoextend on maxsize 2048,’/dm8/data/DAMENG/TBS4_2.dbf’ size 32 autoextend on maxsize 2048
注意其中最關鍵的是“,”逗號,兩個數據文件之間使用“,”隔開。
若表空間有多個數據文件,則多個數據文件是交替使用的
此處不是很明白交替使用的意思,是寫入一個事務數據寫在1號數據文件,下個事務寫在2號數據文件中?還是1號數據文件空間使用完畢后再使用2號數據文件?
3、維護表空間
表空間的狀態:online、offline
SQL>select name,status$ from v$tablespace;
其中,0表示online,1表示offline
狀態切換:
SQL>alter tablespace TBS4 offline;
SQL>alter tablespace TBS4 online;
注意:系統表空間、臨時表空間、回滾表空間不能offline
表空間大小不足如何解決
一般遇到的表空間大小不足提示為“[-523]:磁盤空間不足”,該報錯並不一定意味着實際物理磁盤空間不足,往往都是表空間達到了預設的最大大小。
處理辦法:
1、 創建一個更大的表空間,使用導出導入方法將數據遷移
2、 Resize數據文件大小(有可能造成單個數據文件超大)
3、 增加數據文件(推薦此方法)
SQL>alter tablespace tbs5 add datafile ‘/dm8/data/DAMENG/tbs5_3.dbf’ size 32 autoextend on next 2 maxsize 1024;
臨時表空間不足
SQL>select para_name,para_value from v$dm_ini where para_name like ‘%TEMP%’;
SQL>sp_set_para_value(2,’TEMP_SIZE’,200);--調整數據庫temp表空間大小200
SQL>sp_set_para_value(2,’TEMP_SPACE_LIMIT’,2048);--調整數據庫表空間最大大小2048
回滾表空間不足
SQL>alter tablespace roll add datafile ‘/dm8/data/DAMENG/roll1.dbf’ size 32;
--增加一個回滾表空間數據文件roll1.dbf
SQL>alter tablespace roll resize datafile ‘/dm8/data/DAMENG/roll1.dbf’ to 2048;
--調整表空間resize to
系統表空間不足
SQL>alter tablespace system add datafile ‘/dm8/data/DAMENG/system1.dbf’ size 32;
--增加一個system表空間數據文件system1.dbf
表空間更換存儲位置(同數據庫)
SQL>alter tablespace TBS1 offline;
--首先將表空間離線
SQL>alter tablespace TBS1 rename datafile ‘/dm8/data/DAMENG/TBS1.dbf’ to ‘/dm8/data/tbs1/TBS1.dbf’;
--然后將表空間轉移位置,注意該語句會自動將實際物理文件拷貝至新位置
SQL>alter tablesapce TBS1 online;
--最后將表空間恢復在線
4、刪除表空間
SQL>drop tablespace TBS1;
注意:
如果表空間存在數據,則不允許直接刪除。
如果表空間為空,可以直接刪除。
表空間的存儲對象:表、索引、全文索引、用戶