Oracle 基础 数据库备份与恢复
一、为什么需要数据备份
造成数据丢失的主要原因:
1、介质故障。
2、用户的错误操作。
3、服务器的彻底崩溃。
4、计算机病毒。
5、不可预料的因素。
Oracle中故障类型分为以下4种。
1、语句故障:
执行SQL语句过程发生的逻辑故障可导致语句故障。如果用户编写的SQL语句无效,就会发生语句故障。Oracle可自我修复语句故障,撤销语句产生的而印象,并将控制权交给应用程序。
2、用户进程故障
当用户程序出错而无法访问Oracle数据库时,就会发生用户进程故障。用户进程故障只会导致当前用户无法操作数据库,但不会印象其他用户进程,当用户进程出现故障时,进程监控程序(PMON)会自动执行进程恢复。
3、实例故障
当Oracle 数据库实例由于硬件或软件问题而无法继续运行时,就会发生实例故障。硬件问题包括意外断电,而然间问题可能是服务器操作系统崩溃。如果发现实例故障,Oracle会自动完成实例修复。实例修复将数据库恢复到与故障之前的事务一致状态,Oracle会自动回滚未提交的数据。
4、介质故障
介质故障是当一个数据库文件或者磁盘不能读或者不能写时出现的故障。
二、备份
备份就是把创建一个数据库副本到磁盘。从不同角度分类如下:
1、从物理角度与逻辑角度分类:
(1)物理备份:对数据库操作系统的物理文件(如数据文件、控制文件和日志文件等)的备份。物理备份又可分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者对运行在归档日志方式的数据库进行备份。
(2)逻辑备份:对数据库逻辑组件(如表和存储过程等数据对象)的备份。
2、从数据库的备份策略角度分类:
(1)完全备份:每次对数据进行完整备份。
(2)增量备份:值有那些在上次完全备份或者增量备份后备修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖之前的备份记录,出问题的风险较大。例如:如果在星期一进行完全备份,在星期二至星期五进行增量备份。如果星期五数据被破坏了,则数据恢复需要星期一的完全备份和从星期二至星期五的所有增量备份。
(3)差异备份:备份那些从上次完全备份之后被修改过得文件。因此从差异备份中恢复数据的时间长短,因此只需要两份数据(最后一次完全备份和最后一次差异备份),缺点是每次备份的时间较长。例如:如果在星期一进行完全备份,在星期二到星期五进行了差异备份,如果星期五数据被破坏了,则数据恢复只需要星期的完全备份和星期四的差量备份。
增量备份和差异备份的区别:增量备份需要保留所有增量备份的数据;差异备份只需要保留最后一次差异备份的数据。
三、恢复
恢复就是发生故障后,利用已备份的数据文件或控制文件,重新建立一个完整的数据库。恢复分为两种类型:
1、实例恢复:当Oracle实例出现失败后,Oracle自动进行的恢复。
2、介质恢复:当存放数据库的介质出现故障时所做的恢复。介质恢复又分为完全恢复和不完全恢复。
完全恢复:将数据库恢复到数据库失败时的状态。
不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。
四、导出
(一)使用数据泵技术:
1、expdp的导出方式:
1)数据库方式:整个数据被导入到操作系统文件中。
2)用户模式:导出一个或者多个用户下的所有数据和元数据。
3)表方式:到处一组表的所有数据和元数据。
4)表空间方式:用于提取一个表空间中所有的数据和元数据,另外还提取依赖于指定表空间列表中所有对象的任何依赖对象。
转储文件:由数据泵到处程序所创建的文件成为转储文件,在单个数据泵导出作业期间所有的转储文件称为转储文件集。
2、基于命令行导出
语法:
c:\expdb system/password directory=pbdir dumpfile=pb.dmp full=y tables=table_list tablespaces=tablesapce_list schemas=schema_list remap_schema=user1:user2 nologfile=y sqlfile=pb.sql
system/passwrod:用户名和密码
directory:数据库目录对象
dumpfile:指定转储文件
full=y:表示实施的全部导入
tables=table_list:表示导入表的列表
schemas=schema_list:表示导入的用户模式
tablespaces=tablesapce_list:表示导入的表空间
remap_schema=user1:user2:表示从user1导入到user2中
nologfile=y:表示不进行日志操作
sqlfile:表示将元数据(DDL语句)写入到指定文件中。
注意:如果需要导出完全数据库,必须具备exp_full_database权限。
1)数据库方式:
注意:如果需要导出完全数据库,必须具备exp_full_database权限。
expdp scott/scott@accp directory=dump_dir dumpfile=full.dmp full=y
2)用户模式方式:
expdp scott/scott@accp directory=dump_dir dumpfile=scottschema.dmp schemas=scott
3)表导出方式:
expdp scott/scott@accp directory=dump_dir dumpfile=tables.dmp tables=emp,dept,bonus,salgrade content=data_only
说明:
content=data_only:data_only表示只导出表中的数据,不导出元数据;metadata_only:则表示只导出元数据而不导出表中的数据。如果不写,则两者全部导出。
4)表空间导出方式:
expdp scott/scott@accp directory=dump_dir dumpfile=tablespace.dmp tablespaces=users
3、DBMS_DATAPUMP进行数据泵导出
使用这种方式比直接使用命令方式要麻烦一些,但是却从数据库作业调度中安排数据泵导出作业的运行日程提供了方便,为数据泵导出提供了更好的功能度和控制度。

declare
--创建数据泵工作句柄
h1 NUMBER;
begin
--建立一个用户定义的数据泵做schema的方案备份。
h1 := DBMS_DATAPUMP.open(operation => 'export',job_mode => 'schema');
--定义存储文件
DBMS_DATAPUMp.add_file(handle => h1,filename => 'es_shop.dmp');
--定义过滤条件
DBMS_DATAPUMP.metadata_filter(handle => h1,name => 'schema_expr',value => 'in''SHOP_USER''');
--启动数据泵会话
DBMS_DATAPUMP.start_job(handle => h1);
--断开数据泵会话
DBMS_DATAPUMP.detach(handle => h1);
end; --默认保存路径:C:\Oracle11g\admin\orcl\dpdump

五、导入
(一)数据泵导入模式
1、导出方式
1)全部导入模式:一个导出文件集的全部内容被装入,该导出文件集不一定是全数据库方式进行导出的。
2)用户模式:指定文件集中的一个用户列表的全部内容被导入。
3、表模式:指定表和相依对象从导出文件中得到导入。
4、表空间模式:指定文件集中属于表空间列表内的所有内容都被导入。
2、使用命令行导入
语法:
c:\impdp system/password directory=pbdir dumpfile=pb.dmp full=y tables=table_list tablespaces=tablesapce_list schemas=schema_list remap_schema=user1:user2 nologfile=y sqlfile=pb.sql
system/passwrod:用户名和密码
directory:数据库目录对象
dumpfile:指定转储文件
full=y:表示实施的全部导入
tables=table_list:表示导入表的列表
schemas=schema_list:表示导入的用户模式
tablespaces=tablesapce_list:表示导入的表空间
remap_schema=user1:user2:表示从user1导入到user2中
nologfile=y:表示不进行日志操作
sqlfile:表示将元数据(DDL语句)写入到指定文件中。
例:
1)导入整个数据库:
impdp scott/scott@accp directory=dump_dir dumpfile=FULL.DMP full=y
2)导入表空间:
impdp scott/scott@accp directory=dump_dir dumpfile=tablespace.DMP tablespaces=mytest
3)导入scott用户下的所有表:
impdp scott/scott@accp directory=dump_dir dumpfile=TABLES.DMP tables=emp,dept,bonus,salgrade
4)将导出的scott用户下的dept和emp表导入到mytest用户下
impdp scott/scott@accp directory=dump_dir dumpfile=SCHEMA.DMP tables=dept,emp remap_schema=scott:mytest
3、DBMS_DATAPUMP进行数据泵导入

declare
--创建数据泵句柄
h1 NUMBER;
begin
--建立一个用户定义的数据泵通过数据泵连接orcllib进行访问。
h1 := DBMS_DATAPUMP.open(operation => 'IMPORT',job_mode => 'schema',remote_link => 'orcllib');
--把shop_dev_data对象模式导入到shop_back对象模式中。
DBMS_DATAPUMP.metadata_remap(handle => h1,name => 'REMAP_SCHEMA',old_value => 'SHOP_DEV_DATA',value => 'SHOP_BACK');
--将日志写入shop.log文件中
DBMS_DATAPUMP.add_file(handle => h1,filename => 'shop.log',filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);
--启动数据泵
DBMS_DATAPUMP.start_job(handle => h1);
--断开数据泵连接
DBMS_DATAPUMP.detach(handle => h1);
end;
Oracle 基础 数据库备份与恢复的更多相关文章
- Oracle 10g数据库备份与恢复操作手册
Oracle 10g数据库备份与恢复操作手册 目录 Oracle 10g数据库备份与恢复操作手册... 前言... 文档目的... 文档范围... 目标读者... 其他说明... 冷备份... 热备份 ...
- Oracle基础 数据库备份和恢复
一.为什么需要数据备份 造成数据丢失的主要原因: 1.介质故障. 2.用户的错误操作. 3.服务器的彻底崩溃. 4.计算机病毒. 5.不可预料的因素. Oracle中故障类型分为以下4种. 1.语句故 ...
- ORACLE数据库备份与恢复详解
ORACLE数据库备份与恢复详解 学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!! Oracle的备份与恢复有三种标准的模式,大致分为两 大类,备份恢复(物理上的)以及导入导出(逻 ...
- oracle 数据库备份与恢复
oracle 数据库备份与恢复 包含四个部分: 1.数据泵备份与恢复 2.rman备份与恢复 3.CSV增量备份恢复 4.截库操作 1.数据泵备份与恢复 expdp/ / impdp 时的 CONTE ...
- 2020重新出发,MySql基础,MySql数据库备份与恢复
@ 目录 MySQL数据库备份与恢复 数据库为什么需要备份 MySQL备份类型 MySQL热备份及恢复 逻辑备份 mysqldump SELECT INTO-OUTFILE mydumper 裸文件备 ...
- Oracle数据库备份与恢复的三种方法
转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出 ...
- Oracle基础(二) 创建数据库实例
Oracle中数据库也称为数据库实例,在Oracle在安装过程中可以选择创建数据库,也可以再安装之后再进行创建. 一般创建数据库可以使用图形界面方式和SQL指令的方式,由于SQL指令方式较为复杂,这里 ...
- oracle基础教程(8)oracle修改字符集
oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...
- 图说Oracle基础知识(一)
本文主要对Oralce数据库操作的基础知识进行一下梳理,以便进行归纳总结.适用于未使用过Oracle数据库的读者,或需要学习Oracle数据库方面的基础知识.如有不足之处,还请指正. 关于SQL介绍的 ...
随机推荐
- 判断时间大小 yyyy-MM-dd 格式
// yyyy-MM-dd function bigThanToday(someDate){ var date = new Date(); var dateStr = date.getFullYear ...
- 联想硬盘分区表格式修改 GPT -> MBR
知识点分析:随机预装Win8的电脑,磁盘为GPT格式的,如果需要安装Win7等早期版本系统,需要转换为MBR格式的,使用Diskpart命令即可完成转换. 操作步骤: 注意:转换磁盘格式需要清空磁盘中 ...
- HttpRequest Get Post,WebClient Get
#region HttpRequestGet public string HttpRequestGet(string url) { return HttpRequestGet(url, WebRequ ...
- C++ for循环效率
1.考虑二维数组,在C++中,以先行后列的方式存储连续的数组元素.也就是同一行的元素在一起,同一列的元素之间有间隔,且间隔相同.理想情况下,二维数组的元素是随机访问的,可以直接定位,即i*列数+j.因 ...
- 在C#中利用Nuget包使用SQLite数据库和Linq to SQLite
本来是学习在VB中使用SQLite数据库和Linq to SQLite,结果先学习到了在C#中使用SQLite数据库和Linq to SQLite的方法,写出来与大家共同学习.(不知道算不算不务正业) ...
- (高精度运算4.7.27)UVA 10494 If We Were a Child Again(大数除法&&大数取余)
package com.njupt.acm; import java.math.BigInteger; import java.util.Scanner; public class UVA_10494 ...
- 读《架构探险——从零开始写Java Web框架》
内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...
- Spring MVC整合Velocity
Velocity模板(VM)语言介绍 Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由j ...
- SQL Server 2008数据库重命名方法
假设SQL Server 2008中有个数据库test,现在要将其改名为zhy步骤:(1) 分离数据库:打开management studio,找到test数据库-->右键-->任务--& ...
- css中postion的fixed与absolute区别详解
fixed:固定定位,参照位置是浏览器窗口的左上角,即坐标点为(0px, 0px) absolute:绝对定位,参展位置是离当前元素最近的定位方式为fixed,absolute,relative的祖先 ...