备份与恢复
Oracle数据库有三种标准的备份方法,分别是导出/导入(EXP/IMP)、热备份和冷备份。
导出/导入是一种逻辑备份,冷备份和热备份是物理备份。
一、导出/导入(Export/Import)
利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。
数据导入(Import)的过程是数据导出(Export)的逆过程,
分别将数据文件导入数据库和将数据库数据导出到数据文件。

1、全量导出数据(Export)和导入数据(Import)
Oracle支持三种方式类型的输出:
1.1 表方式(T方式),将指定表的数据导出、导入。
导出表:
exp system/123 tables=scott.dept file=e:\dept.dmp
exp system/123@orcl tables=scott.dept,scott.emp file=e:\empdept.dmp
log=e:\explog_empdept.log

导入表:
drop table scott.emp;
drop table scott.dept;
--drop table scott.dept cascade constraints;
imp system/123@orcl fromuser=(scott) touser=(scott) tables=(dept,emp)
file=e:\empdept.dmp log=e:\implog_empdept.log

1.2 用户方式(U方式),将指定用户的所有对象及数据导出、导入。
exp system/123@orcl owner=(scott) file=e:\scott.dmp log=e:\scott_exp.log buffer=655000 compress=y

--常用
connect system/123@orcl;
--删除用户--
drop user find cascade;
--删除表空间--
drop tablespace ts_find including contents;
--创建表空间及数据文件--
create tablespace ts_find01 datafile 'E:\app\oradata\orcl\ts_find01.DBF' size 100M reuse autoextend on next 10M;
--创建用户并授权--
create user find identified by find default tablespace ts_find01;
grant resource,connect to find;
grant select any sequence to find;
grant create any table,alter any table,drop any table to find;
grant select any table,insert any table,update any table,delete any table to find;
grant create any trigger,alter any trigger,drop any trigger to find;
grant create any procedure,alter any procedure,drop any procedure,execute any procedure to find;
grant create any view,drop any view to find;
grant create any synonym to find;

imp system/123@orcl fromuser=(scott) touser=(find) buffer=655000
ignore=y commit=y file=e:\scott.dmp log=e:\scott_imp.log

1.3 全库方式(Full方式),将数据库中的所有对象导出。
exp system/123@orcl file=e:\full.dmp log=e:\full_exp.log full=y buffer=655000 compress=y

--一般不用
imp system/123@orcl full=y buffer=655000 ignore=y commit=y file=e:\full.dmp log=e:\full_imp.log

2、增量导出/导入
增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。
导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。
增量导出包括三种类型:
2.1“完全”增量导出(Complete)
即备份完整的数据库信息,
比如:
exp system/system@orcl inctype=complete file=e:\complete.dmp log=e:\complete_exp.log
2.2“增量型”增量导出
备份上一次备份后改变的数据,
比如:
exp system/manager inctype=incremental file=e:\incremental.dmp log=e:\incremental_exp.log
2.3“累积型”增量导出
累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。
比如:
exp system/manager inctype=cumulative file=e:\cumulative.dmp log=e:\cumulative_exp.log
数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
比如数据库的被封任务可以做如下安排:
星期一:完全备份(A)
星期二:增量导出(B)
星期三:增量导出(C)
星期四:增量导出(D)
星期五:累计导出(E)
星期六:增量导出(F)
星期日:增量导出(G)
如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:
第一步:用命令create database重新生成数据库结构;
第二步:创建一个足够大的附加回滚。
第三步:完全增量导入:
imp system/manager inctype=restore full=y file=e:\complete.dmp
第四步:累计增量导入:
imp system/manager inctype=restore full=y file=e:\cumulative.dmp
第五步:最近增量导入:
imp system/manager inctype=restore full=y file=e:\incremental.dmp

二、冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。
冷备份是将关键性文件拷贝到另外的位置的一种说法。
对于备份Oracle信息而言,冷备份是最快和最安全的方法。
冷备份的优点是:
1.是非常快速的备份方法(只需拷文件)
2.容易归档(简单拷贝即可)
3.容易恢复到某个时间点上(只需将文件再拷贝回去)
4.能与归档方法相结合,做数据库“最佳状态”的恢复。
5.低度维护,高度安全。
但冷备份也有如下不足:
1.单独使用时,只能提供到“某一时间点上”的恢复。
2.再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3.若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
4.不能按表或按用户恢复。
冷备份中必须拷贝的文件包括:
1.所有数据文件
2.所有控制文件
3.所有联机REDO LOG文件
4.Init.ora文件(可选)
值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
下面是作冷备份的完整例子。
(1) 关闭数据库
sqlplus /nolog
sql>connect / as sysdba
--sql>shutdown normal;
sql>shutdown immediate;
(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件
sql>cp
(3) 重启Oracle数据库
sql>startup

startup nomount --加载参数文件
alter database mount
recover datafile 'E:\app\oradata\orcl\FIND.DBF';
alter database open

三、热备份
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。
热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。
1. 检查数据库模式:
sqlplus /nolog
conn /as sysdba
archive log list (查看数据库是否处于归档模式中)

若为非归档,则修改数据库归档模式。
shutdown immediate; --立即关闭数据库
startup mount; --启动数据库到mount状态
alter database noarchivelog;--设置非归档模式
alter database archivelog;--设置归档模式
alter database open;--打开数据库
alter system set log_archive_start=true scope=spfile; --将数据库设置成自动归档
alter tablespace ts_find begin backup; --开启备份
host copy F:\app\oracle\oradata\orcl\FIND.DBF e:\FIND.DBF --拷贝文件(包括数据文件和控制文件)
alter tablespace ts_find end backup; --结束备份

--备份日志
select * from v$backup;

四、RMAN
1.启动日志归档模式:
sql> alter database archivelog;
2.手工创建操作系统目录:E:\rman\
3.备份语句
run {
configure retention policy to recovery window of 2 days;
configure controlfile autobackup on;
configure controlfile autobackup format for device type disk to 'E:/rman/%F';
allocate channel ch1 device type disk format 'E:/rman/data_%T_%U';
backup database skip inaccessible filesperset 10
plus archivelog filesperset 20
delete all input;
release channel ch1;
}
allocate channel for maintenance device type disk;
crosscheck backupset;
delete noprompt obsolete;

说明:
通过 configure retention policy to recovery window of 7 days;来设置备份的保留天数,如果是“每天一次全备份”,备份保留2天即可。
通过 crosscheck backupset;检查备份是否过期。
通过 delete noprompt obsolete; 删除过期的备份。

4.建表、插数据
create table backup_sales
(
product_id number(10),
sales_date date,
sales_cost number(10,2),
status varchar2(20)
);
insert into backup_sales values (1,sysdate-10,18.23,'inactive');
commit;

5.启用rman做全库备份
运行第3步的备份语句
从日志文件中看出:
Control File and SPFILE:E:\RMAN\C-1275904369-20110429-00
数据文件:E:\RMAN\DATA_20110429_1DMB01T6_1_1
日志文件:E:\RMAN\DATA_20110429_1CMB01T2_1_1 和 E:\RMAN\DATA_20110429_1EMB022O_1_1
备份检查完成。
6.再插数据
insert into backup_sales values (2,sysdate-5,18,'inactive');
commit;

--切换日志(手动触发检查点)
connect sys/123@orcl as sysdba;
alter system switch logfile;

--继续插数据
insert into backup_sales values (3,sysdate-3,88.23,'inactive');
commit;
insert into backup_sales values (4,sysdate-1,8.23,'inactive');

--全库恢复
1.连接rman
rman target /
2.启动数据库到加载状态
rman> shutdown immediate;
rman> startup mount;
3.执行修复、恢复操作
rman> restore database;
rman> recover database;
4.打开数据库(恢复完成退出rman)
rman> alter database open;
rman> exit;
5.校验
SQL> select * from backup_sales;

三条数据齐全,说明数据库在恢复时启用日志文件对数据进行了恢复。
增量备份已现多余,检查点也无需用户手动触发,
oracle在备份前会归档一次日志文件,在备份后也会归档一次日志文件,这也是为什么备份时生成两个日志文件的原因。

Oracle_高级功能(10) 备份恢复的更多相关文章

  1. Oracle_高级功能(7) 数据字典视图和动态性能视图

    oracle数据字典 1.概念数据字典是oracle数据库用来存储数据库结构信息的地方.数据字典是用来描述数据库数据的组织方式的,由表和视图组成.数据字典基表是在任何 Oracle 数据库中创建的第一 ...

  2. Oracle_高级功能(4) 数据库存储结构

    数据库存储结构分为:物理存储结构和逻辑存储结构.物理结构和逻辑结构分开,对物理数据的存储不会影响对逻辑结构的访问.1.物理存储结构 数据库文件 os block2.逻辑存储结构 tablespace ...

  3. Oracle_高级功能(9) 性能优化

    1.oracle优化器 优化目标分为4种: choose (选择性) rule (基于规则) first rows(第一行) all rows(所有行) Description:描述sql的执行计划 ...

  4. Oracle_高级功能(6) 分区

    oracle分区表1.分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区. 表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上 ...

  5. Oracle_高级功能(8) 事务和锁

    Oracle数据库事务1. 事务定义在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元 ...

  6. Oracle_高级功能(5) 用户、角色、权限

    一.用户(模式)1.定义用户:对数据库的访问,需要以适当用户身份通过验证,并具有相关权限来完成一系列动作模式(schema):是某个用户所拥有的对象的集合.具有创建对象权限并创建了对象的用户称为拥有某 ...

  7. Oracle_高级功能(3) synonym和database link

    一.同义词synonymconnect sys/123 as sysdba;select * from emp;ORA-00942: 表或视图不存在create synonym emp for sco ...

  8. Oracle_高级功能(2) 索引

    1.oracle优化器 优化目标分为4种: choose (选择性) rule (基于规则) first rows(第一行) all rows(所有行) Description:描述sql的执行计划 ...

  9. Oracle_高级功能(1) 数据库设计

    1.三范式规范化关系模式称为范式.第一范式:在一个关系模型R中,如果R的每一个属性的值域中的值都是不可再分的最小数据单位, 则称R为第一范式(1NF).第二范式:如果一个关系模型R属于1NF,并且R的 ...

随机推荐

  1. wParam与lParam的区别

    wParam与lParam的区别 lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数. LRESULT CALLBACK WindowProc(H ...

  2. JSP页面中的小知识

    1.<%…%>和<%!…%>的区别? <%…%>用于在JSP页面中嵌入Java脚本,即代码块 <%!…%>用于在JSP页面中申明变量或方法,可以在该页面 ...

  3. numpy-Randow

    Randow使用 http://blog.csdn.net/pipisorry/article/details/39508417 概率相关使用 转:http://www.cnblogs.com/Nau ...

  4. Hibernate 再接触 组件映射

    将另外一个类嵌入到另外一个类 从而合并生成一张表 Husband.java package com.bjsxt.hibernate; import javax.persistence.Embedded ...

  5. ztree根据treeId展开指定节点并触发单击事件

    ztree.expandNode(ztree.getNodeByParam("id",treeId,null));//展开指定节点 ztree.selectNode(ztree.g ...

  6. centos7防火墙以设置以及关闭selinux

    一.CentOS 7.X 关闭SELinux 1.查看 getenforce permissive 或者 enforcing模式 2.临时设置 setenforce 1 成为permissive模式 ...

  7. love is ... ...

    16 years old, love is dream.20 years old, love is sex.30 years old, love is marriage. 40 years old, ...

  8. scrapy 异步存储mysql

    1.在setting中设置MySQL连接信息 HOST='101.201.70.139'MYSQL_DBNAME='anttest'MYSQL_PASSWORD='Myjr678!@#'MYSQL_U ...

  9. Python全栈开发 列表, 元组 数据类型知识运用及操作 range知识

    一.列表 1.什么是列表? 列表是一个可变类型,由  [ ] 表示,每一项元素用逗号隔开.列表能够装大量的数据,可以装对象的对象. 2.列表的索引和切片. 列表和字符串一样,也有索引和切片.只不过列表 ...

  10. Python Flask学习

    开了一个新坑..一直以来对web的前端后端了解比较模糊,所以打算学一个后端框架,写个小博客什么的增长一下姿势水平. 初学嘛,选个相对轻量级一点的,就决定学习flask啦.