1、开启归档
1、联机配置归档
联机配置归档的步骤如下:
- 修改数据库为 MOUNT 状态 NORMAL 模式,并开启归档模式;
- 增加、修改或删除归档;
- 修改数据库为 OPEN 状态。
//修改数据库为MOUNT状态NORMAL模式,并开启归档模式
ALTER DATABASE MOUNT;
ALTER DATABASE NORMAL;
ALTER DATABASE ARCHIVELOG;
//配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'DEST = /dmdata/arch, TYPE = local, FILE_SIZE = 1024,SPACE_LIMIT = 2048,ARCH_FLUSH_BUF_SIZE=16,HANG_FLAG=1';
//修改数据库为OPEN状态
ALTER DATABASE OPEN;
执行完成如下:
2、手动配置归档
手动配置归档即在数据库实例未启动的情况下,手动编写 dmarch.ini 文件和设置参数 ARCH_INI。下面将分别说明如何手动配置本地归档和远程归档。
- 手动编辑 dmarch.ini 文件,之后保存在 dm.ini 所在的目录;
dmarch.ini 文件内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
2. 编辑 dm.ini 文件,设置参数 ARCH_INI=1,保存; 3. 启动数据库实例,数据库已运行于归档模式。
3、验证归档是否生效
select ARCH_IS_VALID from v$dm_arch_ini;
2、备份
连接主机进行数据库备份,连接备机进行归档备份。
1、主机生成一个数据库备份
disql /nolog
SQL>conn SYSDBA/SYSDBA
SQL>CREATE TABLE T1(C1 VARCHAR(20),C2 VARCHAR(20));
SQL>INSERT INTO T1 SELECT LEVEL,LEVEL+1 FROM DUAL CONNECT BY LEVEL<=10000;
SQL>COMMIT;
SQL>BACKUP DATABASE BACKUPSET 'db_bak_01';
SQL>SELECT SF_BAKSET_CHECK('DISK','/dmdata/data/DAMENG/bak/db_bak_01');
SQL>SELECT SYSDATE();
– 查询当前数据库时间并记录: ‘2024-11-20 10:51:37’
2、主机生成一个归档日志备份
SQL>INSERT INTO T1 SELECT LEVEL,LEVEL+1 FROM DUAL CONNECT BY LEVEL<=10000;
SQL>COMMIT;
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET 'arch_bak_01';
SQL>SELECT SF_BAKSET_CHECK('DISK','/dmdata/data/DAMENG/bak/arch_bak_01');
SQL>SELECT SYSDATE();
SQL>SELECT COUNT(*) FROM T1;
– 查询当前数据库时间并记录:‘2024-11-20 10:54:16’
3、还原
将数据库备份文件和归档备份文件复制到另一台机器上
1、拷贝备份文件到目录
/home/dmdba/arch_bak_01 和 /home/dmdba/db_bak_01
2、还原归档
./dmrman
RMAN>restore archive log from backupset '/home/dmdba/arch_bak_01' to archivedir '/dmdata/arch'
3、 查看归档文件的DB_MAGIC
./dmrachk arch_fil=/dmdata/arch/ARCHIVE_LOCAL1_0x6DEE9DDC_EP0_2024-11-19_11-59-55.log
4、还原数据库
还原数据库、利用归档文件恢复数据库到’2024-11-20 10:51:37’ :
dmrman
RMAN>restore database to '/dmdata/all' from backupset '/home/dmdba/db_bak_01'
RMAN>recover database '/dmdata/all/dm.ini' with archivedir '/dmdata/arch' use db_magic 1844354524 until time '2024-11-20 10:51:37'
RMAN> recover database /dmdata/all/dm.ini update db_magic;
出现错误
Read ini error, name:BCT_PATH, value:/dmdata/data/DAMENG [-803]:非法INI配置值
修改 vi /dmdata/all/dm.ini
BCT_PATH 修改为 /dmdata/all
4、验证
- 启动还原后的库,验证数据
1、启动备库
./dmserver /dmdata/all/dm.ini mount
报错如下:
修复错误
RMAN> recover database /dmdata/all/dm.ini update db_magic;
2、验证数据
./disql SYSDBA/SYSDBA
SQL>ALTER DATABASE NORMAL;
SQL>ALTER DATABASE OPEN FORCE;
SQL>SELECT COUNT(*) FROM T1;
5、本机还原
1、还原到最新时刻
- 停止数据库服务,还原步骤如下:
##检验备份集是否正确
CHECK BACKUPSET '/dmdata/data/DAMENG/bak/db_bak_01';
##还原
RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/data/DAMENG/bak/db_bak_01';
##恢复
RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmdata/arch';
##更新数据库魔数
RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
2、恢复到指定时间点
- 停止数据库服务,还原步骤如下:
##检验备份集是否正确
CHECK BACKUPSET '/dmdata/data/DAMENG/bak/db_bak_01';
##还原
RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/data/DAMENG/bak/db_bak_01';
##恢复
RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dmdata/arch' UNTIL TIME '2024-11-20 15:41:12';
RECOVER DATABASE '/dmdata/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
6、修复归档日志
达梦数据库支持在基于 REDO 日志将数据库恢复到最新数据,但此处存在个问题,若原数据库不是正常停止,是被人为的 kill 掉或其它原因异常中止的,就会导致数据库 CKPT_LSN 与 FILE_LSN 之间的数据无法恢复。针对这种情况,达梦数据库提供了归档修复的功能,支持从联机日志文件中将 CKPT_LSN 之后有效的数据,写成新的本地归档文件,从而可支持数据库在异常中断的情况下,也能将数据库数据恢复到最新,不丢失数据。
具体方法如下:
- 确认数据库实例已停止。
- 判断实例是否异常中止,归档是否需要修复。
以下方法为查看数据库实例的最后一个本地归档文件的状态
dmrachk arch_path=/dmdata/arch
rachk V7.1.5.81-Build(2016.05.10-68432trunc-debug)
/*******************************************************************/
archive file ARCHIVE_LOCAL1_20160518094034438.log itemize.
arch_status : ACTIVE
arch n_rpags : 992
arch_db_magic : 1463364211
arch_pemnt_magic : 1463364245
arch_next_seq : 12669
arch_lsn : 34548
arch_seq : 11678
clsn : 40135
rarch file len : 268435456
rarch file free: 512000
rarch create time : 2016- 5-18 9:39:46
rarch close time : 2016- 5-18 9:40:34
/*******************************************************************/
The SUMMARY:
total files: 1
okey files: 1
fail file: 0
the rachk tool running cost 0.901 ms
通过上述我们看到 status : ACTIVE,若归档状态是 INACTIVE,则认为数据库正常退出,否则,则认为数据库异常退出。故此时应该进行归档修复,将数据库中异常中断时的 CKPT_LSN 与 FILE_LSN 之间的数据找回来。
- 进入 DMRMAN,进行归档修复。
RMAN>REPAIR ARCHIVELOG DATABASE '/dbdata/CNDT/dm.ini';
4. 修复归档完成后,查看数据库实例的归档目录,发现多了一个归档日志文件,查看最后 2 个日志文件的状态。