達夢(DM)資料庫的表空間建立和遷移維護
環境:centos 6, 資料庫版本 DM8
在達夢資料庫安裝好後,運維層面首先面臨的就是資料檔案的管理,建立表空間和使用者,以及維護。對於達夢小白來說,以下操作是需要熟知的:
1.檢視當前資料庫的資料檔案和表空間情況
SQL> select file_name,file_id,tablespace_name,status,bytes/1024/1024 MB 2 from dba_data_files 3 order by tablespace_name,file_id; LINEID FILE_NAME FILE_ID TABLESPACE_NAME STATUS MB ---------- ------------------------------------ ----------- --------------- --------- -------------------- 1 /u01/dmdbms/data/DAMORG/BOOKSHOP.DBF 0 BOOKSHOP AVAILABLE 150 2 /u01/dmdbms/data/DAMORG/DMHR.DBF 0 DMHR AVAILABLE 128 3 /u01/dmdbms/data/DAMORG/MAIN.DBF 0 MAIN AVAILABLE 128 4 /u01/dmdbms/data/DAMORG/ROLL.DBF 0 ROLL AVAILABLE 128 5 /u01/dmdbms/data/DAMORG/SYSAWR.DBF 0 SYSAUX AVAILABLE 128 6 /u01/dmdbms/data/DAMORG/SYSTEM.DBF 0 SYSTEM AVAILABLE 24 7 /u01/dmdbms/data/DAMORG/TEMP.DBF 0 TEMP AVAILABLE 10 7 rows got used time: 9.784(ms). Execute id is 7.
2.建立一個使用者表空間,但是達夢資料庫有個限制,比如我們想建立一個31M的表空間,會怎樣呢?
SQL> create tablespace test_tbs datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' size 31; create tablespace test_tbs datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' size 31; [-2410]:Error in line: 1 Data file [/u01/dmdbms/data/DAMORG/TEST_TBS.DBF] size is invalid.
可以看到有報錯,原來達夢資料庫要求表空間的最小大小為頁大小的4096倍,那麼根據我本地的環境檢查:
SQL> select page 2 ; LINEID PAGE ---------- ----------- 1 8192
那麼也就是說,表空間最小也要有4096*8/1024 ,也就是32MB,那我們實現一下:
SQL> create tablespace test_tbs datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' size 32 autoextend on next 2 maxsize 300,'/u01/dmdbms/data/DAMORG/TEST_TBS_2.DBF' size 32 autoextend on next 2 maxsize 300; executed successfully used time: 241.076(ms). Execute id is 11. SQL> select sf_get_extent_size; LINEID SF_GET_EXTENT_SIZE ---------- ------------------ 1 16 used time: 0.612(ms). Execute id is 12. SQL> select 16*8; LINEID 16*8 ---------- ----------- 1 128 used time: 0.461(ms). Execute id is 13.
上面表空間新增了兩個32M資料庫檔案,單詞簇的擴充套件為2M,最大檔案限制為300mb. 同時,貼出了預設的簇擴充套件單位為16個頁的大小,換算為16*8kb=128kb,可以看到預設是比較小的。故而,針對大量的資料更新的表空間,建議修改較大的簇擴充套件單位,否則會造成效能問題。
3.有了表空間,那麼建立測試使用者。
SQL> create user dm_test identified by dmabctest123; executed successfully used time: 25.712(ms). Execute id is 14. SQL> alter user dm_test identified by "dmtest123" default tablespace test_tbs; executed successfully used time: 19.666(ms). Execute id is 16. SQL> grant create table to dm_test; executed successfully used time: 8.990(ms). Execute id is 17. SQL> grant select on dmhr.city to dm_test; executed successfully used time: 10.241(ms). Execute id is 18. SQL> conn dm_test/dmtest123 Server[LOCALHOST:5236]:mode is normal, state is open login used time: 3.326(ms) SQL> create table mytable as select * from dmhr.city; executed successfully used time: 34.005(ms). Execute id is 19. SQL> select * from mytable; LINEID CITY_ID CITY_NAME REGION_ID ---------- ------- --------- ----------- 1 BJ 北京 1 2 SJZ 石家莊 1 3 SH 上海 2 4 NJ 南京 2 5 GZ 廣州 3 6 HK 海口 3 7 WH 武漢 4 8 CS 長沙 4 9 SY 瀋陽 5 10 XA 西安 6 11 CD 成都 7 11 rows got used time: 1.096(ms). Execute id is 20. SQL> select TABLE_NAME , TABLESPACE_NAME from user_tables; LINEID TABLE_NAME TABLESPACE_NAME ---------- ---------- --------------- 1 MYTABLE TEST_TBS used time: 60.026(ms). Execute id is 22.
以上操作比較簡單,建立使用者,賦權並建立表,最後檢查確認。
4.完成了基本操作,那麼日常中還涉及到更換儲存,也就是更改DM資料庫資料檔案的位置,是如何實現的呢?
下面我具體實驗一下,具體包括業務資料檔案,日誌檔案,系統表空間遷移,回滾表空間遷移,臨時表空間遷移,控制檔案遷移。
首先是業務資料檔案,資料庫無需要歸檔模式,停該表空間上業務先,之後如下操作:
建立一個新目錄NEWLOC,假定為遷移後的目錄,我們遷移部分業務資料到上面來模擬。 [dmdba@dm8serv data]$ mkdir NEWLOC [dmdba@dm8serv data]$ pwd /u01/dmdbms/data [dmdba@dm8serv data]$ cd N* [dmdba@dm8serv NEWLOC]$ pwd /u01/dmdbms/data/NEWLOC [dmdba@dm8serv NEWLOC]$ disql sysdba/adminabc123 修改資料庫為非歸檔模式,其實歸檔模式也一樣的。 Server[LOCALHOST:5236]:mode is normal, state is open login used time: 3.170(ms) disql V8 SQL> alter database mount; executed successfully used time: 00:00:01.807. Execute id is 0. SQL> alter database noarchivelog; executed successfully used time: 39.900(ms). Execute id is 0. SQL> alter database open; executed successfully used time: 00:00:01.763. Execute id is 0. 停該表空間上的業務操作後,執行: SQL> alter tablespace TEST_TBS offline; executed successfully used time: 147.375(ms). Execute id is 25. SQL> select dm_test.mytable; select dm_test.mytable; [-2207]:Error in line: 1 Member access [DM_TEST.MYTABLE] unresolved. used time: 0.701(ms). Execute id is 0. SQL> alter tablespace TEST_TBS rename datafile '/u01/dmdbms/data/DAMORG/TEST_TBS.DBF' to '/u01/dmdbms/data/NEWLOC/TEST_TBS.DBF'; executed successfully used time: 138.737(ms). Execute id is 26. SQL> alter tablespace TEST_TBS rename datafile '/u01/dmdbms/data/DAMORG/TEST_TBS_2.DDBF' to '/u01/dmdbms/data/NEWLOC/TEST_TBS_2.DBF'; executed successfully used time: 551.366(ms). Execute id is 29. SQL> alter tablespace test_tbs online; executed successfully used time: 37.490(ms). Execute id is 30. SQL> select * from dm_test.mytable; LINEID CITY_ID CITY_NAME REGION_ID ---------- ------- --------- ----------- 1 BJ 北京 1 2 SJZ 石家莊 1 3 SH 上海 2 4 NJ 南京 2 5 GZ 廣州 3 6 HK 海口 3 7 WH 武漢 4 8 CS 長沙 4 9 SY 瀋陽 5 10 XA 西安 6 11 CD 成都 7 11 rows got used time: 0.829(ms). Execute id is 31.
上述就是線上遷移資料庫業務表空間的過程,注意不需要手工移動檔案,DM資料庫會自動進行先拷貝,然後校驗,最後刪除原始檔的操作。這裡需要注意和ORACLE資料庫的區別。
日誌檔案呢 ?我們繼續進行遷移日誌檔案操作的演示:
[dmdba@dm8serv DAMORG]$ disql sysdba/adminabc123 Server[LOCALHOST:5236]:mode is normal, state is open login used time: 4.119(ms) disql V8 檢視原有路徑和大小 SQL> select group_id,file_id, path, rlog_size/1024/1024 MB from v$rlogfile; LINEID GROUP_ID FILE_ID PATH MB ---------- ----------- ----------- ------------------------------------ -------------------- 1 2 0 /u01/dmdbms/data/DAMORG/DAMORG01.log 256 2 2 1 /u01/dmdbms/data/DAMORG/DAMORG02.log 256 used time: 1.138(ms). Execute id is 34. SQL> 建立目錄,模擬移動位置 [dmdba@dm8serv DAMORG]$ mkdir REDO [dmdba@dm8serv DAMORG]$ cd REDO [dmdba@dm8serv REDO]$ ls [dmdba@dm8serv REDO]$ pwd /u01/dmdbms/data/DAMORG/REDO 修改日誌檔案需要改資料庫到mount模式,在MOUNT模式下通過如下命令修改 [dmdba@dm8serv REDO]$ disql sysdba/adminabc123 Server[LOCALHOST:5236]:mode is normal, state is open login used time: 3.132(ms) disql V8 SQL> alter database mount 2 ; executed successfully used time: 00:00:01.780. Execute id is 0. SQL> alter database rename logfile '/u01/dmdbms/data/DAMORG/DAMORG01.log' to '/u01/dmdbms/data/DAMORG/REDO/DAMORG01.log'; executed successfully used time: 00:00:02.871. Execute id is 36. SQL> alter database rename logfile '/u01/dmdbms/data/DAMORG/DAMORG02.log' to '/u01/dmdbms/data/DAMORG/REDO/DAMORG02.log'; executed successfully used time: 00:00:01.121. Execute id is 37. SQL> alter database open; executed successfully used time: 00:00:01.748. Execute id is 0. 校驗一下結果: SQL> select group_id,file_id, path, rlog_size/1024/1024 MB from v$rlogfile; LINEID GROUP_ID FILE_ID PATH MB ---------- ----------- ----------- ----------------------------------------- -------------------- 1 2 0 /u01/dmdbms/data/DAMORG/REDO/DAMORG01.log 256 2 2 1 /u01/dmdbms/data/DAMORG/REDO/DAMORG02.log 256 used time: 0.948(ms). Execute id is 38. 校驗完畢。
如果我們需要修改SYSTEM,ROLL表空間呢,這個就相對麻煩了,不能只依賴disql環境了,而且需要停庫操作。
演示如下:
將控制檔案資訊轉換文字操作: [dmdba@dm8serv DAMORG]$ dmctlcvt type=1 src=/u01/dmdbms/data/DAMORG/dm.ctl dest=/u01/dmdbms/data/DAMORG/dmcontrol.txt DMCTLCVT V8 convert ctl to txt success! 修改文字中相關的內容: [dmdba@dm8serv DAMORG]$ vi dmcontrol.txt ############################################################################## ## please do not adjust parameter order, ensure the ctl have no difference ### ########################################################################## ...... fil_path=/u01/dmdbms/data/NEWLOC/SYSTEM.DBF # mirror path mirror_path= # file id fil_id=0 # whether the file is auto extend autoextend=1 # file create time fil_create_time=DATETIME '2020-6-17 15:20:18' # file modify time fil_modify_time=DATETIME '2020-6-17 15:20:18' # the max size of file fil_max_size=0 # next size of file fil_next_size=0 #=============================================== # table space name ts_name=ROLL # table space ID ts_id=1 # table space status ts_state=0 # table space cache ts_cache= # DSC node number ts_nth=0 # table space create time ts_create_time=DATETIME '2020-6-17 15:20:18' # table space modify time ts_modify_time=DATETIME '2020-6-17 15:20:18' # table space encrypt flag ts_encrypt_flag=0 # table space copy num ts_copy_num=0 # table space region size flag ts_size_flag=0 #----------------------------------------------- # file path fil_path=/u01/dmdbms/data/ROLL.DBF .......... 將修改fil_path後的dmcontrol.txt轉換為一個新的檔案 [dmdba@dm8serv DAMORG]$ dmctlcvt type=2 src=/u01/dmdbms/data/DAMORG/dmcontrol.txt dest=/u01/dmdbms/data/DAMORG/dmnew.ctl DMCTLCVT V8 convert txt to ctl success! 關閉資料庫,替換原有的控制檔案,名稱修改為dm.ctl 手工複製檔案 [dmdba@dm8serv NEWLOC]$ mv ROLL.DBF /u01/dmdbms/data/ [dmdba@dm8serv DAMORG]$ mv SYSTEM.DBF /u01/dmdbms/data/NEWLOC/ 啟動DM資料庫 [root@dm8serv ~]# service DmServiceDAMNEW start Starting DmServiceDAMNEW: [ OK ] [root@dm8serv ~]# 檢查是否移動到了新的位置: [root@dm8serv ~]# su - dmdba [dmdba@dm8serv ~]$ disql sysdba/adminabc123 Server[LOCALHOST:5236]:mode is normal, state is open login used time: 22.138(ms) disql V8 SQL> select file_name,file_id,tablespace_name,status,bytes/1024/1024 MB 2 from dba_data_files 3 order by tablespace_name,file_id; LINEID FILE_NAME FILE_ID TABLESPACE_NAME STATUS MB ---------- -------------------------------------- ----------- --------------- --------- -------------------- 1 /u01/dmdbms/data/DAMORG/BOOKSHOP.DBF 0 BOOKSHOP AVAILABLE 150 2 /u01/dmdbms/data/DAMORG/DMHR.DBF 0 DMHR AVAILABLE 128 3 /u01/dmdbms/data/DAMORG/MAIN.DBF 0 MAIN AVAILABLE 128 4 /u01/dmdbms/data/ROLL.DBF 0 ROLL AVAILABLE 128 5 /u01/dmdbms/data/DAMORG/SYSAWR.DBF 0 SYSAUX AVAILABLE 128 6 /u01/dmdbms/data/NEWLOC/SYSTEM.DBF 0 SYSTEM AVAILABLE 24 7 /u01/dmdbms/data/DAMORG/TEMP.DBF 0 TEMP AVAILABLE 10 8 /u01/dmdbms/data/NEWLOC/TEST_TBS.DBF 0 TEST_TBS AVAILABLE 32 9 /u01/dmdbms/data/NEWLOC/TEST_TBS_2.DBF 1 TEST_TBS AVAILABLE 32 9 rows got
臨時表空間的移動也相對特殊,需要修改引數檔案,但是這個引數無法動態修改,為read only狀態,只能通過修改dm.ini來實現。
SQL> select para_name,para_value,PARA_TYPE from v$dm_ini where para_name like 'TEMP%'; LINEID PARA_NAME PARA_VALUE PARA_TYPE ---------- ---------------- ----------------------- --------- 1 TEMP_PATH /u01/dmdbms/data/DAMORG READ ONLY 2 TEMP_SIZE 10 IN FILE 3 TEMP_SPACE_LIMIT 0 SYS used time: 9.587(ms). Execute id is 8. [root@dm8serv ~]# service DmServiceDAMNEW stop Stopping DmServiceDAMNEW: [ OK ] [dmdba@dm8serv DAMORG]$ vi dm.ini #file location of dm.ctl CTL_PATH = /u01/dmdbms/data/DAMORG/dm.ctl #ctl file path CTL_BAK_PATH = /u01/dmdbms/data/DAMORG/ctl_bak #dm.ctl backup path CTL_BAK_NUM = 10 #backup number of dm.ctl, allowed to keep one more backup file besides specified number. SYSTEM_PATH = /u01/dmdbms/data/DAMORG #system path CONFIG_PATH = /u01/dmdbms/data/DAMORG #config path TEMP_PATH = /u01/dmdbms/data/NEWLOC #temporary file path BAK_PATH = /u01/dmdbms/data/DAMORG/bak #backup file path 進入到dm.ini檔案,用編輯器修改 TEMP_PATH的路徑,重啟資料庫後,會在新路徑下自動建立臨時表空間資料檔案的。 [root@dm8serv ~]# service DmServiceDAMNEW start Starting DmServiceDAMNEW: [ OK ] 檢查確認: [root@dm8serv ~]# su - dmdba [dmdba@dm8serv ~]$ disql sysdba/adminabc123 Server[LOCALHOST:5236]:mode is normal, state is open login used time: 3.709(ms) disql V8 SQL> select file_name,file_id,tablespace_name,status,bytes/1024/1024 MB 2 from dba_data_files 3 order by tablespace_name,file_id; LINEID FILE_NAME FILE_ID TABLESPACE_NAME STATUS MB ---------- -------------------------------------- ----------- --------------- --------- -------------------- 1 /u01/dmdbms/data/DAMORG/BOOKSHOP.DBF 0 BOOKSHOP AVAILABLE 150 2 /u01/dmdbms/data/DAMORG/DMHR.DBF 0 DMHR AVAILABLE 128 3 /u01/dmdbms/data/DAMORG/MAIN.DBF 0 MAIN AVAILABLE 128 4 /u01/dmdbms/data/ROLL.DBF 0 ROLL AVAILABLE 128 5 /u01/dmdbms/data/DAMORG/SYSAWR.DBF 0 SYSAUX AVAILABLE 128 6 /u01/dmdbms/data/NEWLOC/SYSTEM.DBF 0 SYSTEM AVAILABLE 24 7 /u01/dmdbms/data/NEWLOC/TEMP.DBF 0 TEMP AVAILABLE 10 8 /u01/dmdbms/data/NEWLOC/TEST_TBS.DBF 0 TEST_TBS AVAILABLE 32 9 /u01/dmdbms/data/NEWLOC/TEST_TBS_2.DBF 1 TEST_TBS AVAILABLE 32 9 rows got used time: 10.151(ms). Execute id is 5.
最後,是控制檔案,想必大家都知道了,需要修改dm.ini中的檔案位置,並重啟資料庫。
#file location of dm.ctl CTL_PATH = /dm8/data/dmdb/dm.ctl #ctl file path CTL_BAK_PATH = /dm8/data/dmdb/ctl_bak #dm.ctl backup path CTL_BAK_NUM = 10 #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
至此,資料庫表空間維護和遷移介紹完畢,希望對大家認識達夢資料庫有所幫助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1700608/viewspace-2703848/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 達夢資料庫系統表空間資料檔案遷移過程資料庫
- 資料庫物件遷移表空間資料庫物件
- 【資料遷移】使用傳輸表空間遷移資料
- 達夢DM7 資料庫之資料守護DG搭建資料庫
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- dm資料庫遷移命令資料庫
- 資料庫和表空間資料移動資料庫
- 【達夢】Docker安裝達夢資料庫 dm8Docker資料庫
- 達夢資料庫遷移資料/複製表/匯入匯出2資料庫
- 達夢資料庫資料檔案遷移過程資料庫
- 資料庫維護常用操作4--表空間操作資料庫
- [轉帖]達夢資料庫-統計資料表資料量及空間表大小資料庫
- 線上遷移表空間資料檔案
- Oracle 表空間資料檔案遷移Oracle
- 表空間遷移
- 遷移表空間
- 達夢資料庫表空間管理方法及實戰演示資料庫
- 達夢遷移工具之MySQL資料庫遷移到達夢MySql資料庫
- 【Oracle-資料庫維護】-刪除臨時表空間Oracle資料庫
- InnoDB資料表空間檔案平滑遷移
- 【遷移】表空間transport
- RMAN遷移表空間
- 建立資料庫遷移資料庫
- DB2建立資料庫,建立表空間DB2資料庫
- 遷移表到新的表空間
- 【臨時表空間組】臨時表空間組的建立、維護及應用
- 在資料庫之間移動表空間資料庫
- (個人)Oracle 表空間資料檔案遷移(轉)Oracle
- 海量資料遷移之傳輸表空間(一)
- 【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成資料遷移
- ORACLE表批量遷移表空間Oracle
- 遷移SYSTEM表空間為本地管理表空間
- 達夢資料庫日常運維資料庫運維
- nodebb搭建 維護 discuz 資料遷移
- 基於可傳輸表空間的表空間遷移
- expdp/impdp 遷移表空間
- 【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成資料遷移[轉]
- oracle表空間管理維護Oracle