本文主要介绍数据库的备份和恢复。
一. dexp/dimp逻辑备份
总体来说和oracle exp/imp expdp/impdp比较接近,并有融合。
dexp参数如下
dimp参数如下
创建测试模式和表
SQL> create user test identified by "Abc12345Abc";
SQL> create table test.a(id int,content varchar(20));
SQL> insert into test.a values(1,'a');
SQL> insert into test.a values(2,'b');
SQL> insert into test.a values(3,'c');
SQL> commit;
dexp备份测试
全库备份:
dexp sysdba/xxxxxxx directory=/opt/dexp file=full.dmp log=full.log full=y
模式备份
dexp sysdba/xxxxxxx directory=/opt/dexp file=test.dmp log=test.log schemas=test,dmhr
表备份:
dexp sysdba/xxxxxxx directory=/opt/dexp file=a.dmp log=a.log tables=test.a,dmhr.region
模式不含数据备份:
dexp sysdba/xxxxxxx directory=/opt/dexp file=a_no_data.dmp log=a_no_data.log schemas=test ROWS=n
以上均成功
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=a_a.log tables=test.a table_exists_action=append
结果数据:
注意:含有唯一约束将无法导入数据。
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=a_t.log tables=test.a table_exists_action=truncate
结果数据:
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=a_r.log tables=test.a table_exists_action=replace
3.2 单表删除导入表结构测试
SQL> drop table test.a;
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_a_no_data.log tables=test.a rows=n
3.3 单表导入表数据测试
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_a_data.log tables=test.a ignore=y
注:需要ignore=y,否则无法正常导入数据。
3.4 单模式导入
SQL> drop user test;
SQL> create user test identified by "Abc12345Abc";
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_test.log schemas=test
3.5 remap_schema导入
dimp sysdba/dmdba123 directory=/opt/dexp file=full.dmp log=imp_testb.log schemas=test remap_schema=test:testb table_exists_action=skip
这个测试,无论是否手动创建testb模式,都无法remap成功,限于时间日后继续测试。
二. 联机热备与恢复
开启归档模式
SQL> alter database mount;
不同于oracle,可以直接在open状态改变到mount状态
SQL> alter database add archivelog 'type=local,dest=/opt/dm8/data/arch,file_size=64,space_limit=0';
SQL> alter database archivelog;
查看的相关命令
SQL> alter database open;
SQL> select name,status$,ARCH_MODE from v$database;
SQL> select * from v$dm_arch_ini;
备份
全库备份
SQL> backup database full backupset '/opt/rman/full_bak_20200903';
增量备份
SQL> backup database increment backupset '/opt/rman/full_bak_20200904_i';
归档备份
SQL> backup archivelog all backupset '/opt/rman/arch_20200904';
表备份
SQL> backup table "TEST"."A" backupset '/opt/rman/test_a';
表空间备份
SQL> backup tablespace "MAIN" full backupset '/opt/rman/tbs_MAIN';
通过全备实现不完全恢复
3.1 停止数据库服务
service DmServiceDMSERVER stop
3.2 物理备份数据库
cd /opt/dm8/
mv data data.ok
cp –r data.ok data
登录到dmrman进行恢复,步骤如下:
RMAN> restore database to '/opt/dm8/data/DAMENG' OVERWRITE FROM BACKUPSET '/opt/rman/full_bak_20200903';
RMAN> RECOVER DATABASE '/opt/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/opt/rman/full_bak_20200903' DEVICE TYPE disk;
RMAN> RECOVER DATABASE '/opt/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
3.3 启动数据库
service DmServiceDMSERVER start
数据库启动正常,9月3日的备份中尚未创建TEST模式,符合预期。
4.3 启动数据库
service DmServiceDMSERVER start
数据库启动正常,在9月4日的备份中已经存在test.a这张表,符合预期。
数据库处于mount状态,已经存在问题
SQL> alter database open
SQL> restore tablespace DMHR from backupset '/opt/rman/full_bak_20200904';
进行恢复,无法成功
换到mount状态,同样无法成功
SQL> alter database mount;
SQL> restore tablespace DMHR from backupset '/opt/rman/full_bak_20200904';
表空间恢复无法成功,限于时间日后继续测试。
三. 总结
可以实现所有测试场景的逻辑备份和dmrman备份。恢复场景中,dimp remap没有成功,dmrman表空间没有成功。虽有些许遗憾,后期将会继续努力尝试找到问题所在。通过这些测试,基本理解备份恢复的使用,作为初学者已经有非常大的收获。
文章
阅读量
获赞