通过命令找到达梦数据库进程所在位置
ps -ef | grep dm
得到达梦相关进程
pwd 进程ID得到进程目录
[root@dmdb01 bin]# pwd
/data/dmdbms/bin
[root@dmdb01 bin]# ps -ef | grep dm
root 1183 2 0 Nov04 ? 00:00:33 [kworker/8:1H-xfs-log/dm-0]
root 1196 2 0 Nov04 ? 00:00:02 [kworker/10:1H-xfs-log/dm-0]
root 2212 2 0 Nov04 ? 00:00:00 [kdmflush]
root 2347 2 0 Nov04 ? 00:00:00 [xfs-buf/dm-0]
root 2348 2 0 Nov04 ? 00:00:00 [xfs-conv/dm-0]
root 2349 2 0 Nov04 ? 00:00:00 [xfs-cil/dm-0]
root 2350 2 0 Nov04 ? 00:00:00 [xfs-reclaim/dm-]
root 2351 2 0 Nov04 ? 00:00:00 [xfs-log/dm-0]
root 2353 2 0 Nov04 ? 00:17:47 [xfsaild/dm-0]
dmdba 9320 1 0 Nov04 ? 00:01:47 /data/dmdbms/bin/dmap
dmdba 11195 1 0 Nov04 ? 00:48:38 /data/dmdbms/bin/dmwatcher path=/data/dmdata/DAMENG/dmwatcher.ini -noconsole
dmdba 11224 1 0 Nov04 ? 05:48:07 /data/dmdbms/bin/dmserver /data/dmdata/DAMENG/dm.ini mount
root 3331889 3328335 0 18:50 pts/0 00:00:00 grep dm
[root@dmdb01 bin]# pwd 11195
/data/dmdbms/bin
达梦数据库备份 指定数据库名(模式) 通过dexp来
/data/dmdbms/bin/dexp SYSDBA/SYSDBA@localhost:5236 DIRECTORY=/home/ FILE=imp_exp_20241224183023.dmp SCHEMAS="DMDB01" TABLESPACE=N DROP=N LOG=imp_exp_20241224183023_dmp.log LOG_WRITE=N dummy=N
备份还原有以下三种方式
1、dts迁移
网络通的情况下,建议使用dts迁移工具。可以模式对模式直接迁移,也可以导出成sql\EXCLE等
2、物理备份与还原(最靠谱)
目的库会被清空,进行全库备份还原,如果目的库为空可使用该方法,或者在目的端同网段初始一个中间库进行备份与还原,再通过迁移工具进行迁移
2.1 物理备份
2.1.1 联机备份
登录数据库,执行以下命令,必须开归档,参考以下链接打开归档
https://eco.dameng.com/document/dm/zh-cn/ops/physical-backup.html#%E5%BD%92%E6%A1%A3%E9%85%8D%E7%BD%AE
BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_for_restore';
复制
2.1.2 脱机备份
数据库为停止状态,cd到/opt/dmdbms/bin,执行以下命令
BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
复制
2.2 物理还原
目的库为停止状态,且目的端归档日志要打开,参考以下链接打开归档
https://eco.dameng.com/document/dm/zh-cn/ops/physical-backup.html#%E5%BD%92%E6%A1%A3%E9%85%8D%E7%BD%AE
归档打开后,使用dmdba用户,cd到/opt/dmdbms/bin,启动 DMRMAN
./dmrman
复制
1)还原数据库。执行以下命令:
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
复制
2)恢复数据库。启动 DMRMAN,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
复制
3)恢复 db_magic,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
复制
3、逻辑备份与还原
建议导出前先使用3.5的sql统计源端库表的数据量,到目的库导入后再执行一次sql统计。源端和目的端进行对比。
3.1 备份
3.1.1 导出模式下所有对象
导出文件为 dexp01.dmp ,导出日志为 dexp01.log,导出文件和日志文件都存放在 /emc_2/data/dexp 目录中。
dexp.exe SYSDBA/SYSDBA@192.168.0.248:5236 FILE=dexp01.dmp LOG=dexp01.log DIRECTORY=/emc_2/data/dexp
复制
3.1.2 全库导出表结构,不导出数据
dexp.exe DMTEST/123456789 FULL=Y FILE=D:\DM20181207_rows_no.dmp directory=D:\ log=exp_20181207_rows_no.log rows=n
复制
3.1.3 指定模式导出
dexp.exe DMTEST/123456789 schemas=(DMTEST) FILE=D:\DM20181207.dmp directory=D:\log=exp_20181207.log
复制
3.1.4 导出指定表
dexp.exe DMTEST/123456789 tables=(ALL_TABLES,IND_T1) FILE=D:\DM20181207_sechemas_tables.dmp directory=D:\ log=exp_20181207_schemas_tables.log
复制
3.2 导入
3.2.1 全库导入
D:\dmdbms\bin>dimp.exe TEST/123456789 FILE=DM20181207.dmp directory=D:\log=dimp_20181207.log full=y
复制
3.2.2 是否忽略建表错误
D:\dmdbms\bin>dimp.exe TEST/123456789 FILE=DM20181207.dmp directory=D:\ log=dimp_20181207.log ignore=y
复制
3.2.3 从指定模式导入到指定模式的还原
D:\dmdbms\bin>dimp.exe DMTEST/123456789 FILE=DM20181207.dmp directory=D:\ log=dimp_20181207.log TABLES=ALL_TABLES,IND_T1 remap_schema=DMTEST:TEST
复制
说明:remap_schema=<源模式>:<目标模式>
- 源模式:如果指定的源模式不存在,则导入到对象原来所在的模式;
- 目标模式:如果目标模式不存在,先创建目标模式,再继续导入;
3.2.4 还原表结构,将仅备份表结构的备份文件进行还原
D:\dmdbms\bin>dimp.exe TEST/123456789 FILE=DM20181207_rows_no.dmp directory=D:\ log=dimp_20181207_row_now.log
复制
3.2.5 加快导入速度
./dimp SYSBENCHUSER/SYSBENCHUSER123:5228 directory=/data/ file=full_bak.dmp log=imp_full_bak.log PARALLEL=64 TABLE_PARALLEL=16 FAST_LOAD=Y COMMIT_ROWS=1000000 TASK_THREAD_NUMBER=96 BUFFER_NODE_SIZE=2048 OWNER=SYSBENCHUSER INDEXFIRST=Y
复制
3.3 数据对比
创建中间表
create table oracle_tables(tab_owner varchar(100),tab_name
varchar(100),tab_count int);
复制
表总行数统计语句:
create
PROCEDURE PRO_TEST
AS
begin
for rec in
(
select
owner,
object_name
from
all_objects
where
owner ='模式名'
and object_type='TABLE'
)
loop
begin
execute immediate 'insert into oracle_tables select '''|| rec.owner || ''',''' || rec.object_name || ''',count(*) from ' || rec.owner || '.' || rec.object_name;
exception
when others then
print ('get count error');
end;
end loop;
end;
复制
执行存储过程
CALL PRO_TEST
复制
源端与目的端进行数据对比