目录
前言
什么是逻辑备份与使用场景
一、备份还原工具介绍:
1.备份工具sys_dump 介绍
2.备份工具sys_dumpall 介绍
3.还原工具sys_restore 介绍
4.准备实验环境
二、sys_dump逻辑备份
1.备份单表或多表
2.备份模式
3.备份数据库
4.备份数据到COPY格式的sql脚本
5.备份数据到 INSERT 格式的 SQL 脚本
6.只备份对象定义,不包含表的数据
7.只备份表的数据,不包含任何对象的定义
8.备份时设置锁超时,防止备份时无休止的处在锁等待
8.1会话 1-备份表 t01 时处在等待中
8.2会话 2-备份表 t01 时处在等待中
8.3会话 3-查询会话信息
8.4会话 4-备份表 t01 时使用锁等待超时参数
三、逻辑还原
1.从 DUMP 格式的备份中还原表
2.从 SQL 格式的备份中还原表
3.还原对象到新模式中
四、逻辑还原后验证数据有效性
1.创建 t03 表并查看 HASH 值
2.备份、删除、还原 t03 表后查看 HASH 值
五.sys_dumpall逻辑备份的使用
1.备份所有数据库
2.从备份文件恢复所有数据库
3.备份全局对象
3.1只备份自定义的角色信息
3.2只备份自定义表空间的定义信息
3.3同时备份自定义角色和表空间的定义信息
3.4只备份所有对象的定义信息 (不包含表的数据)
总结
一、逻辑备份的优缺点
二、sys_dump 和 sys dumpall 的区别
三、逻辑还原表时的注意事项
逻辑备份概述:
1、什么是逻辑备份和还原。
(1) 逻辑备份是对整个数据库或数据库中的部分对象利用逻辑备份工具导出数据到备份文件。
(2) 在需要数据恢复的情况下利用逻辑还原工具把备份文件恢复到数据库中。
2、使用场景:
(1) 逻辑备份主要用于数据库逻辑错误的恢复,恢复后对其它数据没有太大影响。
(2) 逻辑备份可用于在大型数据库中执行部分静态对象的备份。
(3) 逻辑备份可用于跨平台数据恢复。
(4) 逻辑备份在生产中是对物理备份的有效补充。
(1) sys_dump 是人大金仓提供的用于数据逻辑备份的工具,支持在线备份。
(2) 支持备份为多种类型的文件格式,包含可跨平台的 SQL 脚本格式。
(3) 支持压缩、并行、加密备份。
(1) sys_dumpall 是人大金仓提供的用于数据逻辑备份的工具,支持在线备份。
(2) sys_dumpall 强制备份当前集簇中所有的数据库。
(3) sys_dumpall 只支持备份为 SQL 脚本的文件格式。
(1) sys restore 是人大金仓提供的用于逻辑备份还原的工具,支持在线还原。
(2) 支持还原除 sql 脚本之外的所有逻辑备份类型的文件。
(3) 支持并行任务进行恢复工作。
(4) 支持在还原时指定表空间映射。
(5) 支持在还原时删除原有对象再重新创建和恢复数据。
1、使用 system 用户登录 test 数据库。
ksql test system
2、新建模式 schema01CREATE SCHEMA schema01;
3、在模式 schema01 下创建 t01 表并插入 2 行数据。CREATE TABLE schema01.t01(id int,name varchar(10));
INSERT INTO schema01.t01 VALUES (100,'a'),(200,'b');
4、在模式 schema01 下创建 t02 表并插入 2行数据。CREATE TABLE schema01.t02(id int,optime date);
INSERT INTO schema01.t02 VALUES (1,sysdate),(2,sysdate);
1.备份 test数据库中 schema01模式下表名以t打头的表到/backup/dump/table.dmp,格式为 dump。
sys_dump -Usystem -d test -f /backup/dump/table.dmp -Fc -t schema01.t*
2.查看备份信息:
ls -ltr /backup/dump/table.dmp
3.查看文件类型:
file /backup/dump/table.dmp
1.备份 test 数据库中的 schema01 模式到/backup/dump/schema01.dmp,备份类型选择 dmp 格式。
sys_dump -Usystem -d test -f /backup/dump/schema01.dmp -Fc -n schema01
2.查看备份信息:
ls -ltr /backup/dump/schema01.dmp
3.查看文件类型:
file /backup/dump/schema01.dmp
1.备份 test 数据库到备份目录/backup/dump/dir1,备份为目录格式,并启用并行备份。
sys_dump -Usystem -d test -f /backup/dump/dir1 -Fd --inserts -j 2
2.查看备份目录中的备份文件信息。ls -ltr /backup/dump/dir1/
1.备份 test 数据库中 t01表到/backup/dump/t01-copy.sql,备份为 copy 格式的 sql 脚本。
sys_dump -Usystem -d test -f /backup/dump/t01-copy.sql -Fp -t schema01.t01
2.查看备份文件信息:
file /backup/dump/t01-copy.sql
3.SQL格式文件可以直接查看内容:
more /backup/dump/t01-copy.sql |grep COPY
1.备份 test 数据库中 t01表到/backup/dump/t01-insert.sql,备份为 insert 格式的 sql 脚本。
sys_dump -Usystem -dtest -f /backup/dump/t01-insert.sql -Fp -t schema01.t01 --inserts
2.查看备份文件信息:
file /backup/dump/t01-insert.sql3.SQL格式文件可以直接查看内容:
more /backup/dump/t01-insert.sql |grep INSERT
1.备份 test 数据库中相关对象定义信息到/backup/dump/ddl.sql,使用选项-s。
sys_dump -Usystem -dtest -Fp -s -f /backup/dump/ddl.sql
2.查看备份文件信息:
cat /backup/dump/ddl.sql |grep -i -E 'create|alterlinsert|copy'
1.备份 test 数据库中相关表的数据到/backup/dump/data.sql,使用选项-a。
sys_dump -Usystem -d test -Fp -a -f /backup/dump/data.sql
2.查看备份文件信息:
cat /backup/dump/data.sql | grep -i -E 'create|alterlinsert|copy'
1.使用 system 用户登录 test 数据库。
ksql -Usystem -dtest
2.显式开启一个事务
BEGIN;3.截断 t01 表,暂不提交和结束事
TRUNCATE TABLE schema01.t01;
sys_dump -Usystem -dtest -Fc -t schema01.t01 -f /backup/dump/t01.dmp
1、使用 system 用户登录 test 数据库。
ksql -Usystem -dtest
2、通过视图 sys stat activity 查看会话信息,会显示表被锁住。
SELECT query,state,wait_event_type FROM sys_stat_activity;
逻辑备份 test数据库中的 t01表并使用参数 lock-wait-timeout(备份任务等待10秒后报错退出)。
sys_dump -Usystem -dtest -Fc -t schema01.t01 -f /backup/dump/t01.dmp --lock-wait-timeout=10s
1.使用 system 用户登录 test 数据库并删除 t01 表:
1.1登录数据库
ksql -Usystem -dtest
1.2删除表
DROP TABLE IF EXISTS schema01.t01;1.3查看表是否还存在
\dt schema01.t011.4退出
\q2.从备份 backup/dump/table.dmp 中还原 test 库中的 t01 表
sys_restore -Usystem -dtest /backup/dump/table.dmp -Fc -t t012.1登录验证
ksql -Usystem -dtest
\dt schema01.t01
1、使用 system 用户登录 test 数据库并删除 t01 表。
ksql -Usystem -dtest
DROP TABLE IF EXISTS schema01.t01;
2、执行备份脚本 backup/dump/t01-copy.sql 来还原 t01 表。\i /backup/dump/t01-copy.sql
3、查看执行结果。ksql -Usystem -dtest
\dt schema01.t01
1.使用 system 用户登录 test 数据库。
ksql -Usystem -dtest
2.创建名称为 schema02 的新模式。CREATE SCHEMA schema02;
\q
3.将备份/backup/dump/schema01.dmp 中的对象还原到 schema02 模式中。sys_restore -Usystem -dtest /backup/dump/schema01.dmp -Fc -g schema01 -G schema02
4.查看执行结果。ksql -Usystem -dtest
\dt schema02.**
根据 HASH 原理“两个相同数据输入后,输出的哈希值也一定相同”,通过比对数据的 hash 值可以验证还原后的数据是否与还原前一致。
1.使用 system 用户登录 test 数据库
ksql -Usystem -dtest
2.创建 t03 表并插入 1000 行数据CREATE TABLE schema01.t03(id int,name text);
INSERT INTO schema01.t03 SELECT generate_series(1,1000),md5(random());
3.查看 t03 表的 HASH 值SELECT sum(hashtext('schemaO1.t03.*'::text)) FROM schema01.t03;
1.备份 t03 表。
sys_dump -Usystem -dtest -Fp -t schema01.t03 -f /backup/dump/t03.sql
2.使用 system 用户登录 test 数据库并删除 t03 表
ksql -Usystem -dtest
DROP TABLE schema01.t03;3.还原 t03 表。
\i /backup/dump/t03.sql4.查看还原 t03 表后的 hash 值(应该与备份前的 hash 值相同,证明恢复后的数据是一致的)。
SELECT sum(hashtext('schemaO1.t03.*'::text)) FROM schema01.t03;
1、新建数据库 db01。
ksql -Usystem -dtest
CREATE DATABASE db01;2、在 db01 数据库中新建模式 schema03。
\c db01
CREATE SCHEMA schema03;3、在模式 schema03 下创建 t01、t02 表,并在每张表中插入 2 行数据
CREATE TABLE schema03.t01(id int,name varchar(10));
CREATE TABLE schema03.t02(id int,optime date);
INSERT INTO schema03.t01 VALUES (100,'a'),(200,'b');
INSERT INTO schema03.t02 VALUES (1,sysdate),(2,sysdate);
\q4、备份数据库为insert格式的sql语句
sys_dumpall -Usystem -f /backup/dump/db.sql --inserts
连接哪一个数据库并不重要,因为由 sys_dumpall创建的脚本将包含合适的命令来创建和连接到被保存的数据库,SECURITY 数据库为自带的数据库所以会有已存在的报错。
ksql -Usystem -dtest -f /backup/dunp/db.sql
sys_dumpall -Usystem -r -f /backup/dump/roles.sql
grep ^[a-zA-Z] /backup/dump/roles.sql
sys_dumpall -Usystem -t -f /backup/dump/tablespace.sql
grep ^[a-zA-Z] /backup/dump/tablespace.sql
sys_dumpall -Usystem -g -f /backup/dump/global.sql
grep ^[a-zA-Z] /backup/dump/global.sql
sys_dumpall -Usystem -s -f /backup/dump/schema.sql
cat /backup/dump/schema.sql |grep -i -E 'create|alter|grant|revoke|copy'
1、优点。
(1) 移植性比较好,可跨平台恢复和还原
(2) 灵活性强,可选择对象执行细粒度备份和还原。
(3) 备份转储的文件类型丰富,其中文本格式的文件支持内容查看和修改。(4) 在线备份和其它并发的 DML 操作不会冲突
2、缺点。
(1) 由于逻辑备份速度较慢,不适合对大型系统执行全量数据备份(2) 逻辑备份的内容只是数据在备份时间点的快照,无法利用归档日志执行完全恢复
1、sys_dump 支持细粒度备份,sys_dumpall 强制备份整个数据库集簇中的数据
2、sys_dump 支持 4 种备份格式,sys_dumpall 只支持备份为 SQL 脚本格式
3、sys_dump 支持压缩和加密备份,sys_dumpall 不支持压缩和加密备份
4、sys_dump 必须要连接到指定的数据库,sys_dumpall 不能指定连接的数据库
在利用逻辑备份文件执行表的恢复时,-t 参数后的值不能采用”模式名.表名"的格式,命令不会报错,但无法完成恢复。
1、错误示范:
只使用-t 参数恢复表 t01 表并查看结果(恢复失败)
sys_restore -Usystem -dtest -t schema01.t01 test.dmp2、正确示范:
使用-n 参数和-t 参数恢复 t01 表并查看结果(恢复成功)
sys_restore -Usystem -dtest -nschema01 -t t01 test.dmp