数据库的备份还原
备份还原基本概念
备份包括物理备份和逻辑备份
物理备份又分为完全备份、增量备份;联机备份(热备)和脱机备份(冷备)
完全备份:
是指一个备份包含指定数据库或表空间的所有数据
增量备份:
是指在一次全备份或上次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。
增量备份包含差异增量备份和累计增量备份。
差异增量备份的基础备份集可以是全量备份,也可以是增量备份。
累计增量备份的基础备份集只能是全量备份。
热备:指数据库启动状态下的备份。
冷备:指数据库关闭状态下的备份。
备份级别:
全库备份、表空间级备份、表级备份、归档备份
物理还原是备份的逆过程:
恢复是使用归档将数据库恢复至最新状态或指定时间点;
或
使用备份集中的redo信息将数据库恢复至一致性状态。
备份还原的两个重要参数:
select * from v$parameter where name in(‘BAK_PATH’,‘BAK_USE_AP’);
BAK_PATH:DM默认的备份路径。
注意,生产环境不要和源库数据文件放在同一磁盘上。避免磁盘损坏,数据文件和备份文件同时损坏的情况。
BAK_USE_AP:备份还原策略,默认使用DMAP辅助进程。
备份还原实现策略:
DMAP辅助进程方式,要求必须启动DMAP服务,可支持第三方备份。
DMAP插件执行,改造了备份还原任务子系统,允许指定并行度,大幅提升了备份还原的效率。
特别是加密、压缩的处理效率。
无辅助进程方式,不依赖DMAP,由主进程DMSERVER自身执行备份还原,但不支持第三方备份。
查看AP服务是否启动
$ ps -ef | grep dmap
$./DmAPService status
执行备份任务“backup database;”时,如果AP服务没有启动,则会报出“-7179:bakres连接DMAP失败”错误。
脱机备份与还原数据库
脱机备份
使用dmrman工具进行脱机备份
备份前关闭数据库
$ps -ef | grep dmserver
$DmServiceDMSERVER stop
$./dmrman
RMAN> backup database ‘/dm8/data/DM/dm.ini’;
表空间的还原与恢复
DM8表空间的还原与恢复需要在脱机状态下操作
1–模拟丢失MAIN表空间数据文件
#mv MAIN.DBF MAIN_BK.DBF
2–表空间MAIN的还原与恢复
$dmrman
RMAN> restore database ‘/dm8/data/DAMENG/dm.ini’ tablespace main
from backupset ‘/dm8/backup/full/consolefullbak’;
3–表空间的恢复系统会自动利用归档恢复到最新状态
RMAN> recover database ‘/dm8/data/DAMENG/dm.ini’ tablespace main;
4–打开数据库,验证数据是否有丢失
全库的还原与恢复
模拟system数据文件损坏
使用全量备份集或增量备份集进行还原与恢复步骤相同。
例如
a(全量) -> b1(增量) -> b2(增量)
-> c1(增量)
如果全量备份丢失,基于其增量的备份也将无法正常使用。
1)数据库的还原与恢复
RMAN> restore database ‘/dm8/data/DM/dm.ini’
from backupset ‘/dm8/backup/full/onlineback_02’;
RMAN> recover database ‘/dm8/data/DM/dm.ini’ with archivedir ‘/dm8/arch’;
2)更新数据库魔数
RMAN> recover database ‘/dm8/data/DM/dm.ini’ update db_magic;
不完全恢复的使用场景
表误删除,可以指定归档恢复到删除的前一刻
RMAN> recover database ‘/dm8/data/DM/dm.ini’ with archivedir ‘/dm8/arch’ until lsn xxxxx;
RMAN> recover database ‘/dm8/data/DM/dm.ini’ with archivedir ‘/dm8/arch’ until time xxxxx;
查看备份集
RMAN> show backupset ‘/dm8/backup/full’;
删除备份集
RMAN> remove bakcupset ‘/dm8/backup/full’;
检查备份集
RMAN> check bakcupset ‘/dm8/backup/full’;
使用console控制台工具脱机备份、还原、恢复
打开console控制台工具,
备份
点击“备份还原”→选择“新建备份”→常规中填写“备份名”,“备份集目录”→确定
还原
点击“备份还原”→选择“还原”→选择“备份集目录”→确定
恢复
点击“备份还原”→选择“恢复”→选择恢复类型“指定归档恢复”→添加归档日志目录→确定
更新数据库魔数
点击“备份还原”→选择“更新Magic”→选择恢复类型“更新DM_MAGIC”→确定
表空间还原时会校验数据库魔数
select permanent_magic; —查询数据库永久魔数
select db_magic from v$rlog; ----查询数据库当前魔数
还原时如果报“数据文件读写出错”,
原因是使用root用户打开console控制台操作,导致更改了数据文件的读写权限。
联机备份与还原数据库
联机备份
数据库启动状态,联机备份要求数据库打开归档。
备份时AP服务需要为启动状态。
SQL备份数据库
RMAN> backup database; ----全量备份
RMAN> backup database increment; —增量备份
RMAN> backup database full to onlinebak_01 backupset ‘/dm2/bakcup/full/online_bak’;
RMAN> backup database increment base on backupset ‘/dm8/bakcup/full/online_bak’
to onlinebak_incr01 backupset ‘/dm8/bakcup/incr/onlineback_incr01’;
RMAN> backup database increment with backupdir ‘/dm8/bakcup/full/’
to onlinebak_incre02 backupset ‘/dm8/bakcup/incr/onlineback_incr02’;
备份集管理
校验备份集
select SF_BAKSET_CHECK(‘DISK’,‘/dm8/bakcup/incr/onlineback_incr02’);
select * from v$backupset; —查看备份集
select * from v$ifun where name like ‘SF_BAKSET%’;
SF_BAKSET_BACKUP_DIR_ADD(‘DISK’,‘/dm8/bakcup/full/’);
SF_BAKSET_BACKUP_DIR_ADD(‘DISK’,‘/dm8/bakcup/incr/’);
表空间备份
RMAN> backup tablespace dmtbs;
RMAN> backup tablespace dmtbs increment with backupdir ‘/dm8/bakcup/full/’
to dmtbs_incr01 backupset ‘/dm8/bakcup/incr/dmtbs_incr01’;
表和归档的备份
RMAN> backup table dmhr.employee; —表备份
RMAN> backup archivelog all; —归档备份
库级、表空间的还原和恢复不支持联机恢复,只支持脱机还原恢复。
DM管理工具图形化界面备份
DmManager登录数据库,选择“备份”→“新建备份”
逻辑备份
dexp/dimp逻辑导出、导入
dexp/dimp分四个级别
全库(full=y)
按用户(owner=xxx)
按模式(schemas=xxx)
按表(tables=xxx)
$./dexp help ----查看dexp帮助信息
全库导出
$dexp userid=sysdba/SYSDBA:5236 directory=/dm8/backup/dexp file=full.dmp log=full.log full=y
按用户导出
$dexp userid=sysdba/SYSDBA:5236 directory=/dm8/backup/dexp file=hrtest.dmp owner=hrtest log=hrtest.log
按模式导出
$dexp userid=sysdba/SYSDBA:5236 directory=/dm8/backup/dexp file=dmhr.dmp schemas=dmhr log=dmhr.log
按表导出
$dexp userid=sysdba/SYSDBA:5236 directory=/dm8/backup/dexp file=employee.dmp tables=dmhr.employee log=employee.log
全库导入
$dimp userid=sysdba/SYSDBA:5236 directory=/dm8/backup/dexp file=full.dmp full=y log=full.log
按模式导入(将A模式导入到B模式,使用remap_schema参数)
$dimp userid=sysdba/SYSDBA:5236 directory=/dm8/backup/dexp file=dmhr.dmp remap_schema=dmhr:dmtest log=impdmhr.log
表导入
$dimp userid=sysdba/SYSDBA:5236 directory=/dm8/backup/dexp file=employee.dmp table=dmhr.employee remap_schema=dmhr:hrtest log=employee.log
DM管理工具导出导入
DmManager登录数据库,右击“LOCALHOST(SYSDBA)”→选择“导出”
同样方式进行导入
作业管理
创建代理环境
执行存储过程代理环境
SQL> sp_init_job_sys(1);
或
使用manager管理工具,界面上右击“代理”,选择“创建代理环境”。
创建代理环境后会创建sysjob模式
DM兼容Oracle的DBMS_JOB和DBMS_SCHEDULER系统包
select * from v$ifun where name like ‘%INIT%’;
call sp_init_dbms_scheduler_sys(1); ----创建DBMS_SCHEDULER
创建作业
DM管理工具创建JOB
代理→右击“新建作业”→作业名称:job01,添加“作业步骤”,步骤名称:fullbak,步骤类型:备份数据库,备份路径:/dmdbms/fullbak,
新建“作业调度”,名称:fullbak,调度类型:反复执行,发生频率,类别:周,每周日
JOB增量备份
代理→右击“新建作业”→作业名称:job02,添加“作业步骤”,步骤名称:incrbak,步骤类型:备份数据库,
备份路径:/dmdbms/incrbak,基备份目录:/dmdbms/fullbak
新建“作业调度”,名称:incrbak,调度类型:反复执行,发生频率,类别:周,每周二、四、六
JOB运行和日志查看
select * from sysjob.sysjobs; —查看job
dbms_job.run(1640162093); ----运行job,1640162093为执行ID
select * from sysjob.sysjobhistories2; ----查看job运行日志
checkpoint(100); —执行完全检查点,解决刚开归档备份,报错归档日志不连续的问题
DM开发语言接口配置
DM8 JDBC编程注意事项
//定义DM JDBC驱动串
String jdbcString=“dm.jdbc.driver.DmDriver”;
//定义DM URL连接串
String urlString=“jdbc:dm://localhost:5236”;
ODBC连接DM数据库
ODBC的安装和配置:
解压
#tar -zxvf unixODBC-2.3.0.tar.gz
源码安装三部曲:配置、编译、安装
#cd unixODBC-2.3.0
#./configure ------可以使用–prefix参数指定安装路径
#make
#make install
配置odbc.ini数据源信息和odbcinst.ini驱动信息
#cd /usr/local/etc/
#vim odbc.ini
[DM8]
Description=DM ODBC DSN
Driver=DM8 ODBC DRIVER
SERVER=LOCALHOST
UID=SYSDBA
PWD=Dameng123
TCP_PORT=5236
#vim odbcinst.ini
[DM8 ODBC DRIVER]
Description=ODBC DRIVER FOR DM8
Driver=/dm8/bin/libdodbc.so
测试连接
使用dmdba用户执行isql测试连接是否正常
$isql dm8 -v
SQL> select count(*) from dmhr.department;
注意:
root用户执行会报错,因为root没有配置LD_LIBRARY_PATH环境变量。
达梦社区:https://eco.dameng.com