達夢(DM)資料庫的表空間建立和遷移維護

justin_zh發表於2020-07-10

環境: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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章