备份与还原
- 逻辑备份是对整个数据库好数据库中的部分对象利用逻辑备份工具导出数据到备份文件
- 在需要数据恢复的情况下利用逻辑还原工具把备份文件恢复到数据库中
使用场景
- 逻辑备份主要用于数据库逻辑错误的恢复,恢复后对其他数据没有太大影响
- 逻辑备份可用于在大型数据库中执行部分静态对象的备份
- 逻辑备份可用于跨平台数据恢复
- 逻辑备份在生产中是对物理备份的有效补充
备份单表或多表
bash
# 使用system用户将test数据库中的schema01模式下t开头的表备份至/back/dump/table.dmp
sys_dump -U system -d test -f /backup/dump/table.dmp -Fc -t schema01.t*
# -U 备份使用的用户
# -d 备份的数据库
# -f 保存路径
# -Fc 输出文件为定制
# -t 备份的数据表
备份模式
bash
# 使用system用户将test数据库中的schema模式备份至/back/dump/schema.dmp
sys_dump -U system -d test -f /back/dump/schema.dmp -Fc -n schema01
# -U 备份使用的用户
# -d 备份的数据库
# -f 保存路径
# -Fc 输出文件为定制
# -n 备份的模式
备份数据库
bash
# 使用system用户将test数据库备份至/back/dump/dbidr目录下,添加插入语句,使用双并发备份
sys_dump -U system -d test -f /back/dump/dbdir -Fd --inserts -j 2
# /back/dump下的/dbdir目录不能存在,系统会自动创建
# -U 备份使用的用户
# -d 备份的数据库
# -f 保存的路径
# -Fd 输出文件为文件夹
# --inserts 以inserts语句备份而不是默认的copy语句
备份数据到COPY格式的SQL脚本
bash
# 使用system用户将test数据库下的schema01模式中的t01表备份至/back/dump/copy.sql
sys_dump -U system -d test -f /back/dump/copy.sql -Fp -t schema01.t01
# -U 备份使用的用户
# -d 备份的数据库
# -f 保存的路径
# -Fp 输出文件为明文
# -t 保存的数据表
备份数据到INSERT格式的SQL脚本
bash
# 使用system用户将test数据库下的schema01模式中的t01表备份至/back/dump/inserts.sql
sys_dump -U system -d test -f /back/dump/inserts.sql -Fp -t schema01.t01 --inserts
# -U 备份使用的用户
# -d 备份使用的数据库
# -f 保存的路径
# -Fp 数据文件为明文
# --inserts 使用inserts语句备份
只备份对象定义 不包含表数据
bash
# 使用system用户将test数据库下的对象信息备份至/back/dump、ddl.sql
sys_dump -U system -d test -f /back/dump/ddl.sql -Fp -s
# -U 备份使用的用户
# -d 备份的数据库
# -s 只存储模式,不包含数据
# -f 保存的路径
# -Fp 数据文件为明文
从DUMP格式的备份中还原表
bash
sys_restore -U system -d test /back/dump/table.dmp -Fc -t t0
表的约束
数据完整性约束是指为了防止不符合规范的数据进入数据库,在录入数据或数据发生变化时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,是数据库中存储的数据正确、有效、相容。
表的三类完整性约束 约束可以在列或者在表级定义,单列约束可以定义在列级或表级,多列约束必须定义在表级
- 实体完整性
- 参照完整性
- 用户定义完整性
实体完整性
实体完整性定义
- 关系数据库中每个元组应该是可区分的,是唯一的,这样的约束条件用实体完整性来保证。
- 实体完整性约束对应的属性被称为表的主键(primary key)或称为关系的主码
- 实体完整性约束可以定义在表中的一列或多列中
实体完整性规则
- 实体完整性规则是针对基本表而言的,一个基本表通常对应于现实世界的一个实体集
- 主键对应的列值在表中不能重复且不能为空
- 每个表最多只能拥有一个主键
创建表时添加主键约束
sql
# 列级定义主键
CREATE TABLE student(
name varchar(10),
CONSTRAINT RULE_NAME PRIMARY KEY(name) # 设置主键约束:约束名为RULE_NAME,约束列为name
);
# 表级定义主键
CREATE TABLE sutent (name varchar(10),PRIMARY KEY(name));
修改表增加主键约束
sql
ALTER TABLE student ADD CONSTRAINT pk_student_name PRIMARY KEY(name);
# 修改student表增加约束,约束名为pk_student_nmae,主键字段为name
参照完整性约束
参照完整性定义
- 现实世界中的实体主键往往存在某种关系、关系和关系之间存在相互引用。
- 一个表的属性需要依赖另一个表的属性,这样的约束条件使用参照完整性来保证。
- 参照完整性约束对应的属性被称为表的外键(foreign key),或称为关系的外码。
- 参照完整性约束课定义在表中的一列或多列上。
参照完整性规则
- 被参照的相应列上必须被定义为主键约束或唯一键约束
- 表的外键列可以取空值
- 表的外键非空时,只能取被参照表中已经存在的值
sql
CREATE TABLE student(
name varchar(10),
CONSTRAINT RULE_NAME FOREIGN KEY(name) REFERENCES student1 (name) # 设置外键约束:约束名为RULE_NAME,约束列为name,参照对象为student1的name列
);
修改表添加外键约束
sql
ALTER TABLE student ADD CONSTRAINT fk_student1_name FOREIGN KEY (name) REFERENCES student1(name);
用户定义的完整性约束
非空约束 非空约束保证一个表中某列不能取空值
sql
CREATE TABLE t1 (name varchar(10) NOT NULL);
# 限制name字段不能为空
唯一约束 唯一约束保证一个表的某列或多列的值在表中所有元组间是不能重复的,但可以为空
sql
CREATE TABLE t1 (name varchar(10) UNIQUE);
# 限制字段name不可为空
check约束 限制一个特定列中的值必须要满足一个条件表达式
sql
CREATE TABLE t1 (name varchar(10),score numeric CHECK(score>0));
# 限制字段score必须大于0
约束的状态控制
enable/disable
对新进入数据的约束检查
validate/novalidate
对现有数据的约束检查
约束控制方法
-
enable + validate
新插入的数据与表中现有数据均需符合约束条件,默认状态
-
enable + novalidate
对表中现有数据和新插入的数据都不执行完整性约束检查
-
disable + validate
对现有的数据执行完整性约束检查,不允许对表执行DML操作
-
disable + novalidate
对现有数据不执行完整性约束检查,对新插入的数据会执行检查