九、数据库的备份还原
1、归档管理
使用DM Manager:
-
点击注册的实例连接->右键->管理服务器
-
点击系统管理->点击配置->点击转换
-
点击归档配置->归档
使用DISQL:
#创建文件夹存放日志文件
mkdir /dm/dmarch
#登录disql
disql
SYSDBA
SYSDBA
#切换为配置
alter database mount;
#添加文件
alter database add archivelog 'DEST=/dm/dmarch,TYPE=local,FILE_SIZE=128,space_limit=0';
#修改为归档模式,会自动将日志写入上述文件
alter database archivelog;
#修改为open状态
alter database open;
#查看归档信息
select arch_mode from v$database;
select * from v$dm_arch_ini;
#退出disql
exit;
#查看是否以生成文件
cd /dm/dmarch/
ls
#查看日志的配置文件
cd /dm/dmdbma/data/DAMENG/dmarch.ini
2、逻辑备份与还原
逻辑备份与还原就是导出文件和导入文件:
下面演示创建一个用户,再使用此用户在此用户模式下建表,然后导出,再将此用户下的表删除,再导入,看看是否成功
逻辑备份分为:数据库级别、用户级别、模式级别、表级别
#全局导入与导出
#操作1
#登录disql
disql
SYSDBA
SYSDBA
#创建用户dexp 密码为dexp123dexp123
create user dexp identified by dexp123dexp123;
#授予权限
grant resource,dba to dexp;
#退出disql / 切换用户
exit
conn dexp/dexp123dexp123
#使用dexp用户登录disql
disql
dexp
dexp123dexp123
#创建一张表
create table dexp as select * from sysobjects;
#查看表数据
select count(1) from dexp;
#操作2
#开始备份 导出文件到/dm/dmbak
dexp SYSDBA/SYSDBA file=full01.dmp log=full01.log directory=/dm/dmbak full=y;
#用户的导入与导出
dexp SYSDBA/SYSDBA file=user01.dmp log=user01.log directory=/dm/dmbak owner=dexp;
#数据库级别、用户级别、模式级别、表级别,多个用逗号(,)间隔
full=y
owner=用户名(这里是dexp)
schemas=模式名(这里是dexp)
tables=表名(这里是dexp)
#删除dexp用户下的dexp表
drop table dexp;
#操作3恢复刚才备份的文件(replace可加可不加,是具体情况而定)
#全局级别的恢复
dimp SYSDBA/SYSDBA file=full01.dmp log=full02.log directory=/dm/dmbak full=y table_exists_action=replace
#用户级别的恢复
dimp SYSDBA/SYSDBA file=user01.dmp log=user02.log directory=/dm/dmbak owner=dexp table_exists_action=replace
#恢复到指定用户
dimp SYSDBA/SYSDBA file=user01.dmp log=user02.log directory=/dm/dmbak owner=dexp remap_schema=DEXP:DIMP;
#查看表数据
select count(1) from dexp;
-
操作1
-
操作2
—————————————————————————————————————————————————————————– -
——————————————————————————————————————————————————————————
3、联机备份与还原
联机备份在数据库级别只支持备份操作,不支持还原,数据库级别的还原必须在脱机进行。
默认的备份路径为dm.ini中BAK_PATH参数配置的路径,若未配置,则使用SYSTEM_PATH下的bak目录。
全备:full参数可以省略,不指定备份类型默认为完全备份
backup database backupset '/dm/dmbak/full01';
增量备份:
backup database increment with backupdir 'dm/dmbak/full01' backupset '/dm/dmbak/full01/inc_back';
表的备份和还原:
#创建测试表
create table dmbak as select * from sysobjects;
#查看数据
select count(1) from dmbak;
#备份表
backup table dmbak backupset '/dm/dmbak/dmbak';
#删除表数据
delete from dmbak;
commint;
#查看数据
select count(1) from dmbak;
#还原表(这里还原表是表必须存在,不支持drop的恢复)
restore table dmbak from backupset '/dm/dmbak/dmbak';
#查看数据
select count(1) from dmbak;
#如果表示有索引和约束则是另一种写法
#创建测试表
create table dmbak2 as select * from sysobjects;
#创建索引
create index idx_dmbak2_id on dmbak2(id);
#查看数据
select count(1) from dmbak2;
#备份表
backup table dmbak2 backupset '/dm/dmbak/dmbak2';
#删除表数据
delete from dmbak2;
commint;
#查看数据
select count(1) from dmbak2;
#还原表(这里还原表是表必须存在,不支持drop的恢复)
#还原表结构
restore table dmbak2 struct from backupset '/dm/dmbak/dmbak2';
#还原表数据
restore table dmbak2 from backupset '/dm/dmbak/dmbak2';
#查看数据
select count(1) from dmbak2;
表空间的备份和还原(DM8不支持):
#备份表空间
backup tablespace main backupset '/dm/dmbak/ts_full_bak_01';
#校验表空间备份
select sf_bakset_check('disk','/dm/dmbak/ts_full_bak_01');
#修改表空间状态为脱机
alter tablespace main offline;
#还原表空间
restore table main from backupset '/dm/dmbak/ts_full_bak_01';
#修改表空间状态为联机
alter tablespace main online;
4、脱机备份与还原
**数据库的备份与还原:**使用dmrman完成脱机备份不同于disql,disql知道是哪个用户登录的,但是dmrman完成脱机备份的,要求数据库处于脱机状态,dmrman并不知道所要备份的是那个数据库实例,所以需要指定数据库实例对应的配置文件,从而确定是要哪个数据库实例完成脱机备份
#1.停止服务
systemctl stop DmServiceDave.service
#2.执行环境,必须进入dmrman所在的bin目录执行,否则无法备份
cd /dm/dmdbms/bin/
./dmrman
#3.备份
backup database '/dm/dmdbms/data/cndba/dm.ini' full backupset '/dm/dm_bak/db_full_bak_01';
#增量备份
backup database '/dm/dmdbms/data/cndba/dm.ini' increment with backupdir '/dm/dm_bak' backupset '/dm/dm_bak/db_full_bak_02';
后面的不会了