在一些场景下,可能是我们安装数据库时规划不够,或者数据增长量远超预期,我们有时候需要解决磁盘空间不足的问题,这个问题有下列处理方式:
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!
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_seq |$file_path |$size(K) |$used(K) 1|/opt/dmdata/DAMENG/bak/DB_DAMENG_20191018033424000722.bak| 32768.00| 5366.00
$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 修改数据文件的路径
book.dbf 的路径为 e:\ book.dbf 。 |