达梦数据库更换磁盘路径、空间不足问题处理

场景描述

在一些场景下,可能是我们安装数据库时规划不够,或者数据增长量远超预期,我们有时候需要解决磁盘空间不足的问题,这个问题有下列处理方式:

1.        如果是LVM 进行管理的,直接添加磁盘空间,把空间不足的对应卷进行扩容即可(这里不展开)

2.        如果是原先规划的磁盘空间确实用满了,我们可以通过为表空间在新挂载的容量扩充磁盘下,新建表空间文件即可(注意新路径的dmdba 权限,这里不展开)

3.        如果本身就是搞错了,需要把整个实例更换到另外一个目录下,我们应该如何进行操作。(这里重点介绍一下这个步骤)

处理方式

如果是需要整体更换路径,我们肯定是有停机窗口期的,我们“唯一”的方式,是通过脱机备份还原的方式进行数据库实例目录(数据文件目录)的整体更换。

 

 

首先,我们必须明确、牢牢记住,达梦数据库不允许用户直接操作数据文件:

 

不允许用户,通过任何操作系统自己的命令,操作任何文件。

 

相关操作,需要且只能通过数据库管理的方式进行操作(可以是执行sql 语句、或者是数据库自己提供的命令),比如表空间的移动等操作,数据库有提供自己的操作命令(可以参考SQL 手册,对象管理的相关章节)。

 

备注:除了安装目录下的log 下的文件,可以手动删除外,其他任何和数据库相关的文件,请禁止通过操作系统命令,进行任何处理!

 

只有这种情况,我们所有的操作才是安全的,才能够被保驾护航。

 

具体方法:

1.        停止数据库服务

2.        进行脱机备份

3.        在新目录下初始化数据库服务

4.        通过脱机备份,在新初始化的实例下恢复数据库

数据库环境

DM7                        

软件目录

/opt/dmdbms/bin

数据库原实例目录

/opt/dmdata

数据库实例目录调整目的

/dmbigdata

注意事项:

1.           所有操作,涉及到的目录,请确保 dmdba 均有权限

2.           备份命令详细语法,可以参考 help

3.           恢复完后,注意不要启动错了,请启动恢复后的数据库实例(即新的数据库实例)

 

[dmdba@localhost ~]# ps   -ef|grep dmserver

dmdba      1605  1485    8 03:30 pts/0    00:00:04   ./dmserver /opt/dmdata/DAMENG/dm.ini

dmdba      1713  1662    0 03:31 pts/1    00:00:00 grep   –color=auto dmserver

[dmdba @localhost ~]#

停掉数据库服务

进行脱机备份

[dmdba@localhost ~]#   cd  /opt/dmdbms/bin

[dmdba@localhost bin]#   ./dmbackup help

Format:  ./dmbackup  KEYWORD=value

Example: ./dmbackup    INI_PATH=/opt/dm7data/dameng/dm.ini NAME=test.bak

Imperative Argument: INI_PATH NAME

Keyword               explain(default value)

——————————————————————————–

INI_PATH            the path of   dmserver’s dm.ini file

BASE_BAK_DIR        the path   with increment backup Format (dir1,dir2,dir3,…)

NAME                backup name

TYPE                backup type (FULL, INCREMENT),   Default(FULL)

BAKFILE_PATH        the file   path of backup file

DESCRIBE            the   description of backup

MAXSIZE             the max   value capability of the single backup file Default(33MB~2048MB, default(2048))

ENCRYPT             encrypt   type (0, 1, 2), Default(0)

PASSWORD            encrypt key

ENCRYPT_NAME        encrypt   algorithm name

COMPRESS            compress   level(0-9), 0:no compress, 9:high compress, Default(1)

PARALLEL            parallel   mapping the file path

SHOW_BAK_INFO       the   directory of backup Format (dir1,dir2,dir3,…)

HELP                output help   info

 [dmdba@localhost bin]# ./dmbackup  ini_path=/opt/dmdata/DAMENG/dm.ini   name=test.bak

backup V7.6.0.138-Build(2019.02.20-103049)ENT

file dm.key not found, use default license!

ndct db load finished

start backup tablespace: SYSTEM.

start backup file: /opt/dmdata/DAMENG/SYSTEM.DBF, pages: 2688

end backup file: /opt/dmdata/DAMENG/SYSTEM.DBF

end backup tablespace: SYSTEM.

 

start backup tablespace: ROLL.

start backup file: /opt/dmdata/DAMENG/ROLL.DBF, pages: 0

end backup file: /opt/dmdata/DAMENG/ROLL.DBF

end backup tablespace: ROLL.

 

start backup tablespace: MAIN.

start backup file: /opt/dmdata/DAMENG/MAIN.DBF, pages: 0

end backup file: /opt/dmdata/DAMENG/MAIN.DBF

end backup tablespace: MAIN.

 

backup fun end time used: 1064.291(ms)

backup successfully!

backup time used: 7244.440(ms)

在新路径下初始化数据库

[dmdba@localhost bin]#   ./dminit path=/dmbigdata

initdb V7.6.0.138-Build(2019.02.20-103049)ENT

db version: 0x7000a

file dm.key not found, use default license!

License will expire on 2020-02-20

 

 log file path:   /dmbigdata/DAMENG/DAMENG01.log

 

 

 log file path:   /dmbigdata/DAMENG/DAMENG02.log

 

write to dir [/dmbigdata/DAMENG].

create dm database success. 2019-10-18 03:34:42

在新路径下恢复数据库(因为数据库恢复必须恢复到一个已经存在数据库上)

[dmdba@localhost bin]#   ./dmrestore  help

Format: DMRESTORE    KEYWORD=value or KEYWORD=(value1,value2,…,valueN)

 

Eg: DMRESTORE    INI_PATH=/opt/dm7data/dameng/dm.ini FILE=/opt/dm7data/backup/test.bak

 

Imperative Argument: FILE

 

Keyword               explain(default value)

——————————————————————————–

INI_PATH            the path of   the dmserver’s dm.ini file

FILE                backup file

MAPPED_FIL          the path of mapped file, when   res_type assign 4.

TIME                the   timestamp of be going to recover

ARCHIVE_DIR         the   directory at backup, Format (dir1,dir2,dir3,…)

BACKUP_DIR          the stored   path of backup file, be used to search backup file, Format   (dir1,dir2,dir3,…)

DATAFIL_PATH        the file   path at the recovery, Format (id1,path1,id2,path2,id3,path3,…)

MIRROR_PATH         the mirror   file path at the recovery, Format (id1,path1,id2,path2,id3,path3,…)

PARALLEL_DIR        the full   path of parallel mapping file

RES_TYPE            restore   type(0,1,2,3,4), 0: bakfil restore, 1: bakfil show, 2: archfil restore, 3:   step increment restore, 4:output mapped file default(0)

END_LSN             restore to   end_lsn

LOG                 restore   output log file

DUMMY               quiet mode,   {(Y)es,(N)o} default:No

PASSWORD            restore   with password

ENCRYPT_NAME        restore   decrypt with encrypt name

HELP                output help   info

这里的 file ,就是备份生成的文件

[root@localhost bin]#   ./dmrestore    ini_path=/dmbigdata/DAMENG/dm.ini   file=/opt/dmdata/DAMENG/bak/DB_DAMENG_20191018033424000722.bak

restore V7.6.0.138-Build(2019.02.20-103049)ENT

file dm.key not found, use default license!

 

<NORMAL backup name”test.bak” info>

backup sig:            BA

backup tool version:   12595

backup db name:        DAMENG

backup db magic:         339279924

backup pemnt magic:      -222693460

backup name:           test.bak

backup type:           full

backup level:          offline

backup range:          database

backup description:   

compressed level:      0

encrypt_type:          0

encrypt_id:            2052

rac node:              0

page check:            0

rlog encrypt:          0

external cipher id:    0

external hash id:      0

length in char:        0

use new hash:          1

backup time:             2019-10-18 03:34:24

page size:             8 KB

extent size:           16

case sensitive:        1

log page size:         512 B

charset:               0

data version:          0x7000A

sys version:             V7.1.6.138-Build(2019.02.20-103049)ENT

enable policy:         0

mpp_timestamp:         0

crc_check:             TRUE

parallel type:         0

parallel info len:     0

backup db fil num:     3

archive flag:          0

after backup LSN:      39863

 

<bak_file_list>

$bak_seq |$file_path                                          |$size(K)       |$used(K)      

          1|/opt/dmdata/DAMENG/bak/DB_DAMENG_20191018033424000722.bak|       32768.00|        5366.00

 

<db_file_list>

$file_seq |$type|$ts_name         |$state    |$size(K)  |$seq_in_bak    |$off_in_bak(B) |$len_in_bak(B)   |$file_path                                          |$mirror_path                                     

         1|DBF  |SYSTEM         |ONLINE    |       21504|              1|          22528|          5152768|/opt/dmdata/DAMENG/SYSTEM.DBF                     |                                                   

         2|DBF  |ROLL           |ONLINE    |      131072|              1|        5175296|         311296|/opt/dmdata/DAMENG/ROLL.DBF                       |                                                   

         3|DBF  |MAIN           |ONLINE    |      131072|              1|        5486592|             8192|/opt/dmdata/DAMENG/MAIN.DBF                       |                                                  

n   这里需要输入 y 或者 Y

Continue?[Y/N]: y

restore bak_file:   /opt/dmdata/DAMENG/bak/DB_DAMENG_20191018033424000722.bak …

start restore database…

start restore file: /dmbigdata/DAMENG/SYSTEM.DBF(SYSTEM), pages: 629

end restore file: /dmbigdata/DAMENG/SYSTEM.DBF(SYSTEM)

start restore file: /dmbigdata/DAMENG/ROLL.DBF(ROLL), pages: 38

end restore file: /dmbigdata/DAMENG/ROLL.DBF(ROLL)

start restore file: /dmbigdata/DAMENG/MAIN.DBF(MAIN), pages: 1

end restore file: /dmbigdata/DAMENG/MAIN.DBF(MAIN)

end restore database data files.

 

Apply archive log LSN from 39864 to 39863, time used:0.000s.

restore finished, code = 0!

 

restore successfully!

restore time used: 2166.080(ms)

[dmdba@localhost bin]#

在启动数据库,即完成了替换

[dmdba@localhost bin]# ps   -ef|grep dmserver

dmdba      1781  1485    0 03:35 pts/0    00:00:00   ./dmserver /dmbigdata/DAMENG/dm.ini

dmdba      1840  1662    0 03:39 pts/1    00:00:00 grep   –color=auto dmserver

[dmdba@localhost bin]#

 

其他说明

          数据库能够提供直接更换整个文件夹目录的方式,来进行路径迁移?

支持,但是操作比较复杂,且需要更替二进制文件,如果操作错误,会导致实例无法启动个,极不安全。且数据库在linux 或者windwos 的数据文件,本身是能够通用的。

我们只需要记住,进行这个步骤很危险,且需要调整的不仅仅是dm.ini 中间的路径!

          本身,数据库自己也提供了alter 的语法类更改表空间数据文件路径(注意:同以块设备下会更快,如果是跨块设备,和mv 命令耗时相当)

 

14.2.4 修改数据文件的路径
 
可以修改用户表空间中已存在数据文件的路径,待修改的数据文件所在表空间必须处于脱机状态并且只可修改用户创建的表空间中文件的路径。如修改 bookshop 表空间中文件

 

book.dbf 的路径为 e:\ book.dbf


 
ALTER   TABLESPACE bookshop RENAME DATAFILE ‘d:\book.dbf’ TO ‘e:\book.dbf’;

 

    原文作者:yanhengdoudou
    原文地址: http://blog.itpub.net/69949798/viewspace-2660880/
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞