目录
一、目标
1、了解数据库备份与恢复的基础知识
2、理解在Oracle 环境中可能发生的故障类型
3、掌握传统的导出和导入程序exp/imp
4、掌握可传输表空间的操作方法
5、掌握oracle11g的逻辑泵的使用,重要参数的举例说明
6、了解exp/imp和数据泵(expdp,impdp)的区别
7、掌握针对不同的生产环境而采取的逻辑备份的方法
二、备份与恢复简介
1、备份是数据库中数据的副本
它可以保护数据在出现意外损失时最大限度的恢复。
2、Oracle数据库的备份包括以下两种类型:
(1)物理备份是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等关键物理文件)的备份——RMAN【非关键的不备份参数文件、密码文件、归档日志文件】
(2)逻辑备份是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份——imp,exp,impdp,expdp
三、故障类型
1、导致数据库操作中止的故障包括四种类型:
(1)语句故障:在执行 SQL 语句无效可导致语句故障。
(2)用户进程故障:当用户程序出错而无法访问数据库时发生用户进程故障。导致用户进程故障的原因是异常断开连接或异常终止进程。
(3)实例故障:当 Oracle 的数据库实例由于硬件或软件问题而无法继续运行时,就会发生实例故障。
(4)介质故障:在数据库无法正确读取或写入某个数据库文件时,会发生介质故障
2、故障举例
(1)语句故障:select * from aa;——【无此aa表时,会出现故障】,此种故障,oracle会自动处理,不需要进行其他处理
(2)用户进程故障:用户与服务器进行连接,用户端(死机,用户进程消失了等)突然出现问题——服务器进程会自行终止,oracle会自动处理【PMON进程介入处理】,不需要进行其他处理
(3)实例故障:oracle服务器端死机了,坏掉了,【内存进程+后台进程】————通过重启ORACLE服务,即可解决实例故障,不需要进行其他处理
(4)介质故障:硬盘坏掉了,导致数据文件丢失了,或者不能使用了;写入数据时,直接断电,导致日志文件校验不一致,数据无法正常重启,需要人工干预处理。
四、传统的导出和导入实例程序
1、传统的导出导入程序用于实施数据库的逻辑备份和恢复
2、导出程序将数据库中的对象定义和数据备份到一个操作系统二进制文件中
3、导入程序读取二进制导出文件并将对象和数据载入数据库中
4、传统的导出导入程序是客户端工具,数据也在客户端。
五、传统的导出和导入实例程序特点
1、可以按时间保存表结构和数据
2、允许导出指定的表,并重新导入到新的数据库中
3、可以把数据库迁移到另外一台异构服务器上
4、在两个不同版本的Oracle数据库之间传输数据
5、在联机状态下进行备份和恢复
6、可以重新组织表的存储结构,减少链接及磁盘碎片【降低表的HWM(高水位线),通过导出、导入】
六、导出和导入数据库对象的四种模式
1、数据库模式:导出和导入整个数据库中的所有对象
2、表空间模式:导出和导入一个或多个指定的表空间中的所有对象
3、用户模式:导出和导入一个用户模式中的所有对象
4、表模式:导出和导入一个或多个指定的表或表分区
七、如何调用导出和导入实用程序[三种方式]
使用以下三种方法调用导出和导入实用程序:
1、交互提示符:
以交互的方式提示用户逐个输入参数的值。
2、命令行参数:
在命令行指定执行程序的参数和参数值。
3、参数文件:
允许用户将运行参数和参数值存储在参数文件中,以便重复使用参数
八、命令行参数方式——导出举例、导入举例
1、创建表、约束、索引
create table student(sno int,sname varchar2(10),sage int,constraint pk_sno primary key(sno)); insert into student values(1,'TOM',21); insert into student values(2,'Kite',22); insert into student values(3,'Bob',23); commit; create index ind_stu_sname on student(sname); alter table student add constraints con_sage check(sage>7); create table address(sno int,zz varchar2(10)); insert into address values(1,'郑州'); insert into address values(2,'洛阳'); commit; create index ind_add_sno on address(sno); alter table address add constraints con_zz check(length(zz)>1);
2、导出举例
(1)【表模式】——导出Scott的address和student表
exp scott/scott@orcl tables=student,address file=/data/imptable.imp log=/data/imptable.log——导出自己的表 exp system/oracle tables=scott.student file=/data/imptable2.imp log=/data/imptable2.log——导出其他用户的表【需要导出用户表的权限】
(2)【用户模式】——导出scott的所有对象【owner=scott]
exp scott/scott owner=scott file=/data/scott2.dmp log=/data/scott2.log——导出自己 exp system/oracle owner=scott file=/data/scott5.dmp log=/data/scott5.log——导出其他用户
注:模式之间不能同时进行,比如1和2中,用户模式和表模式不能同时进行,如下错误:
exp scott/scott owner=scott tables=student file=/data/scott2.dmp log=/data/scott2.log
(3)数据库模式【full=y的情况】
exp system/oracle file=/data/fulldatabase.dmp log=/data/fulldatabase.log full=y
(4)表空间模式
exp system/oracle tablespaces=users file=/data/tablespace.dmp
3、导入举例
(1)导入自己的表
exp scott/scott tables=student,address file=/data/scott1.dmp
imp scott/scott file=/data/scott1.dmp——导入整个scott用户对象
imp scott/scott fiel =/data/scott1.dmp tables=student——导入scott的student表
(2)导入别人的表(test导入scott的表)
[oracle@localhost ~]$ exp scott/scott tables=student,address file=/data/scott_table2.dmp log=/data/scott_table.log
情景一:scott自己不能导出到给其他用户 ×
imp scott/scott file =/data/scott_table2.dmp tables=student fromuser =scott touser=test ——test导入scott的student表
情景二:其他用户(test),可以用scott用户导出的文件,导入到自己用户中 √
imp test/test file =/data/scott_table2.dmp tables=student fromuser =scott touser=test ——test导入scott的student表
情景三:system用户,可以将scott导入到其他用户中 √
imp system/oracle file =/data/scott_table2.dmp tables=student fromuser =scott touser=test ——test导入scott的student表
(3)test导入scott的数据后,再次导入,
是否可以?提示已经存在。可以通过ignore进行忽略
imp test/test file =/data/scott_table2.dmp tables=student fromuser =scott touser=test
imp test/test file =/data/scott_table2.dmp tables=student fromuser =scott touser=test ignore=y
——【】因为没有唯一性约束条件,所以,可以无限次导入,如果有主键存在,有了唯一性约束条件,则会提示无法导入
九、交互提示符方式
1、导出举例
通过exp后,进行交互式提示符输入,进行导出
2、导入举例
十、参数文件方式——导出,导入
1、导出举例
新建一个文件:pra.txt
userid=scott/scott@orcl tables=student file=/data/scott-par.exp
十一、可传输表空间
1、 使用流程:
如果迁移的数据量很大,可以使用可传输表空间:【源端库orcl的表空间1,到目的库orcl1的表空间tb1】
(1)检查要传输的表空间是否是自包含的。
t表在tb1中,如果t创建了一个索引,放在tb2中,tb1中未包含t表的索引,那么tb1就不是自包含,这种情况下,不能使用可传输空间
检查dbms_tts.存储过程 检查表空间是否是自包含
(2)将表空间设置成只读。
(3)exp进行可传输表空间模式的导出。
(4)将导出文件和数据文件复制到目标数据库上。
(5)目标数据库上,imp进行可传输表空间模式的导入。
(6)目标数据库上,把表空间设置成读写状态。
2、举例:
(1)SYSTEM创建表空间
SQL> create tablespace tb1 datafile '/data/u01/app/oracle/oradata/orcl/tb01.dbf' size 10m;
(2)scott创建下表
SQL> create table t tablespace tb1 as select * from all_tables;
(3)将表空间设置成只读。
alter tablespace tb1 read only
(4)exp进行可传输表空间模式的导出。
exp \'system/oracle as sysdba\' tablespaces=tb1 transport_tablespace=y file=/data/exp_tb1.dmp
(5)将导出文件和数据文件复制到目标数据库上。【两个库位于不同计算机上】
(6)目标数据库上,imp进行可传输表空间模式的导入【使用as sysdba】。
imp \'system/oracle as sysdba\' tablespaces=tb1 transport_tablespace=y file=/data/exp_tb1.dmp datafiles=
(7)目标数据库上,把表空间设置成读写状态。
SQL> alter tablespace tb1 read write;
文章评论