Oracle数据库的备份与恢复
http://jingyan.baidu.com/article/b2c186c8eb7713c46ef6ff22.html
Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。
导出/导入(Export/Import)
利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。
1、 简单导出数据(Export)和导入数据(Import)
Oracle支持三种方式类型的输出:
(1)、表方式(T方式),将指定表的数据导出。
(2)、用户方式(U方式),将指定用户的所有对象及数据导出。
(3)、全库方式(Full方式),瘵数据库中的所有对象导出。
数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。
2、 增量导出/导入
增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。
增量导出包括三种类型:
(1)、“完全”增量导出(Complete)
即备份三个数据库,比如:
exp system/manager inctype=complete file=040731.dmp
(2)、“增量型”增量导出
备份上一次备份后改变的数据,比如:
exp system/manager inctype=incremental file=040731.dmp
(3)、“累积型”增量导出
累计型导出方式是导出自上次“完全”导出之后数据库中变化了的信息。比如:
exp system/manager inctype=cumulative file=040731.dmp
数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
比如数据库的被封任务可以做如下安排:
星期一:完全备份(A)
星期二:增量导出(B)
星期三:增量导出(C)
星期四:增量导出(D)
星期五:累计导出(E)
星期六:增量导出(F)
星期日:增量导出(G)
如果在星期日,数据库遭到意外破坏,数据库管理员可按一下步骤来回复数据库:
第一步:用命令CREATE DATABASE重新生成数据库结构;
第二步:创建一个足够大的附加回滚。
第三步:完全增量导入A:
imp system/manager inctype=RESTORE FULL=y FILE=A
第四步:累计增量导入E:
imp system/manager inctype=RESTORE FULL=Y FILE=E
第五步:最近增量导入F:
imp system/manager inctype=RESTORE FULL=Y FILE=F
冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将关键性文件拷贝到另外的位置的一种说法。对于备份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;
(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数文件
sql>cp
(3) 重启Oracle数据库
sql>startup
热备份
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。所以,如果你有昨天夜里的一个冷备份而且又有今天的热备份文件,在发生问题时,就可以利用这些资料恢复更多的信息。热备份要求数据库在Archivelog方式下操作,并需要大量的档案空间。一旦数据库运行在archivelog状态下,就可以做备份了。热备份的命令文件由三部分组成:
1. 数据文件一个表空间一个表空间的备份。
(1) 设置表空间为备份状态
(2) 备份表空间的数据文件
(3) 回复表空间为正常状态
2. 备份归档log文件
(1) 临时停止归档进程
(2) log下那些在archive rede log目标目录中的文件
(3) 重新启动archive进程
(4) 备份归档的redo log文件
3. 用alter database bachup controlfile命令来备份控制文件
热备份的优点是:
1. 可在表空间或数据库文件级备份,备份的时间短。
2. 备份时数据库仍可使用。
3. 可达到秒级恢复(恢复到某一时间点上)。
4. 可对几乎所有数据库实体做恢复
5. 恢复是快速的,在大多数情况下爱数据库仍工作时恢复。
热备份的不足是:
1. 不能出错,否则后果严重
2. 若热备份不成功,所得结果不可用于时间点的恢复
3. 因难于维护,所以要特别仔细小心,不允许“以失败告终”。
========
ORACLE数据库备份与还原命令
http://blog.csdn.net/rowisdom/article/details/8994318
简介:
数据泵使用指南
10g开始引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个Oracle数据库中.
数据泵导出导入(EXPDP和IMPDP)的作用
1,实现逻辑备份和逻辑恢复.
2,在数据库用户之间移动对象.
3,在数据库之间移动对象
4,实现表空间搬移.
数据泵导出导入与传统导出导入的区别
在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP.使用EXPDP和IMPDP时应该注意的事项;
EXP和IMP是客户段工具程序,它们既可以在可以客户端使用,也可以在服务端使用.
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用
IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件.
数据泵导出包括导出表,导出方案,导出表空间,导出数据库4种方式.
导出功能
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.
因此,使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
CREATE DIRECTORY dump dir AS '/home/oracle/dump_dir';
GRANT READ, WIRTE ON DIRECTORY dump_dir TO public;
注意:这个目录赋权限给oracle用户
1,导出表
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp logfile=tab.log TABLES=dept,emp
2,导出方案
Expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=system,scott
3.导出表空间
Expdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01,user02
4,导出数据库
Expdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=Y
我们经常用到的是第二种
expdp system/**** directory=dump_dir dumpfile=ngboss_yueyang20130514.dmp logfile=expyueyang20130514.log schemas=ngboss_yueyang
对参数功能不了解请expdp -help查看
导入功能
和导出一样,先要建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.
CREATE DIRECTORY dump dir AS '/home/oracle/dump_dir';
GRANT READ, WIRTE ON DIRECTORY dump_dir TO public;
注意:这个目录赋权限给oracle用户
将dmp文件copy到对应的目录
同样有四种情况
1, 导入表
Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=dept,emp
Impdp system/manage DIRECTORY=dump_dir DUMPFILE=tab.dmp TABLES=scott.dept,scott.emp REMAP_SCHEMA=SCOTT:SYSTEM
第一种方法表示将DEPT和EMP表导入到SCOTT方案中,第二种方法表示将DEPT和EMP表导入的SYSTEM方案中.
注意,如果要将表导入到其他方案中,必须指定REMAP SCHEMA选项.
2,导入方案
Impdp scott/tiger DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=schema.dmp SCHEMAS=scott REMAP_SCHEMA=scott:system
3,导入表空间
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=tablespace.dmp TABLESPACES=user01
4,导入数据库
Impdp system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y
针对我们系统的特点有两种情况
1.导入库的用户名和表空间跟导出的库一致,例如从201上的ngboss_yueyang导入到196上的ngboss_yueyang用户上,两边的表空间名也一样
impdp system/**** directory=dump_dir dumpfile=ngboss_yueyang20130514.dmp logfile=impngboss_yueyang20130514.log schemas=ngboss_yueyang
2.导入库的用户名和表空间跟导出的库不一致
例如:从岳阳的生产库上导出的库导入到公司201上ngboss_yueyang用户上
用户名和表空间名都不一样
impdp system/**** directory=dump_dir dumpfile=ngboss20130513.dmp logfile=impyueyang20130514.log remap_schema=ngboss:ngboss_yueyang remap_tablespace=ngboss_data:ngboss_yy_data,NGBOSS_DATA_CRM1:NGBOSS_YY_DATA_CRM1,NGBOSS_DATA_CRM2:NGBOSS_YY_DATA_CRM2,NGBOSS_DATA_HIST:NGBOSS_YY_DATA_HIST,NGBOSS_DATA_HIST_CRM:NGBOSS_YY_DATA_HIST_CRM,NGBOSS_INDX:NGBOSS_YY_INDX,NGBOSS_INDX_CRM:NGBOSS_YY_INDX_CRM,NGBOSS_WORK:NGBOSS_YY_WORK
对参数功能不了解请impdp -help查看
注意事项:用dba账户导出的dmp文件必须要用dba账户导入。
推荐文章:
ORACLE数据库备份与还原命令 http://www.blogjava.net/paulwong/archive/2013/05/12/399172.html
========
Oracle数据库备份与还原操作具体步骤
http://www.cnblogs.com/newlooker/p/3564939.html
Oracle数据库导出操作
导入导出都要进行目录创建与授权。
在pl/sql里面编写也可以
select * from dba_directories(这个是查看创建的目录)
drop directory exp_dir(删除指定名称的目录)
create or replace directory expdp_dir as ‘E:/exp’
grant read ,write on directory expdp_dir to public
如图(图片网上找的):
查询创建了那些子目录:SELECT * FROM dba_directories;
1.如下是bat命令导出
@echo off
echo 备份执行开始!
set filename=%date:~8,2% ::设置获取当前系统日期
expdp gdxaorcl/gdxadb2013@ECAMPUS schemas=gdxaorcl dumpfile=%filename%.dmp DIRECTORY=expdp_dir
::使用expdp导出,schemas指定用户名,dumpfile指定导出文件名称,DIRECTORY即指导到指定目录下
echo 备份执行完成!
2.Oracle数据库导入操作
数据库导入bat命令:
@echo
set /a tui = %date:~8,2%-1 ::设置系统日期前一天的数据库备份文件
impdp gdxaorcl/gdxadb2013@localhost/ecampus file=%tui%.dmp log=%tui%.log full=y TABLE_EXISTS_ACTION=replace ::(file指定要导入的备份文件注意:已经把%tui%.dmp复制到F:\app\Administrator\admin\ecampus\dpdump 下面了),log即日志文件,full=y ( 全库导出): 导出除ORDSYS,MDSYS,CTXSYS,ORDPLUGINS,LBACSYS 这些系统用户之外的所有用户的数据。replace参数先drop表,然后创建表,最后插入数据。
========
Oracle数据库备份、恢复及常见问题
http://www.cnblogs.com/Joanna-Yan/p/5070658.html
通常我们都是使用PL/SQL Developer来对Oracle中的数据对象和数据进行管理。如果我们想方便快速还原或者部署Oracle到新机器上,怎么进行数据库的备份、导入恢复呢?
这里我们必须要考虑的:如何创建Oracle表空间、创建Oracle数据库;如何把Oracle对象、表数据导出到sql脚本中。
1、数据库备份
(1)导出数据库对象
Tools-->ExportUser Objects,选择需要导出的数据库对象,包括:表、序列、存储过程、视图、函数等。
(2)导出表数据
Tools-->Export Tables,导出数据到PL/SQL数据库脚本中。
2、新建表空间和Oracle数据库
File-->New-->SQL Window,打开SQL窗口输入:
表空间、用户名都为IGSC。
create tablespace IGSC datafile 'E:\IGSOracle\IGSC.dbf' size 10240M;
--DROP TABLESPACE IGSC INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
create user IGSC identified by IGSC default tablespace IGSC;
grant connect,resource to IGSC;
grant dba to IGSC;
--Revoke dba from IGSC;
复制代码
点击执行sql。此时,数据库表空间、表结构、表数据齐全,可以开始迁移出一个完整的数据库了。
3、导入数据库及对象
Tools-->Import Tables,先导入数据库对象,再导入表数据,此时,你的表数据文件可以分几个文件导入也是不会报错的,因为表结构已经存在。
执行过程中会出现如下界面:
到这,整个oracle数据库的迁移工作已完成。注意:我们导出的Oracle对象和数据库默认还是原来Oracle数据库的表空间和数据库用户名。如果想在新的数据库服务器中指定不同的表空间和数据库用户,则需要替换生成的sql脚本中的表空间和用户名的设置,并且第二步指定合理的表空间和数据库用户。
4、常见问题
(1)就是上面说的注意
我遇到的问题:新环境的数据库中存在IGS表空间,我导出的数据库文件IGSOracle.sql表空间默认也为IGS,结果在导入数据库对象到新表空间IGSC时,没有导入成功,却导入到了已存在的IGS表空间中。查看IGSOracle.sql:
发现导出的Oracle对象和数据库默认还是原来Oracle数据库的表空间和数据库用户名,我们要将表空间和用户名都改为IGSC,重新导入。
(2)ORACLE initialization or shutdown in progress
想删除不想要了的数据库和dbf文件,停掉服务后删除,重启服务启动数据库实例时报错。
解决:
开始-->输入,sqlplus /nolog
SQL> connect system/hope;
ERROR:
ORA-01033: ORACLE initialization or shutdown in progress【就是这个错误】
SQL> connect sys/hope as sysdba
已连接。
SQL> shutdown normal
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> start mount
SP2-0310: 无法打开文件 "mount.sql"
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1332348 bytes
Variable Size 183151492 bytes
Database Buffers 423624704 bytes
Redo Buffers 4259840 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 8: 'C:\TYKM.DBF'
SQL> alter database datafile 8 offline drop;【8是数据文件中的8】
数据库已更改。
SQL> alter database open;【一直循环这个语句,直至不再提示错误】
数据库已更改。
SQL> shutdown normal
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 1332348 bytes
Variable Size 187345796 bytes
Database Buffers 419430400 bytes
Redo Buffers 4259840 bytes
数据库装载完毕。
数据库已经打开。
(3)ORA-1658 无法为表空间的段创建initial区
原因:表空间大小
解决:因为表数据比较大,我这里将步骤二中的size改为了10240M。
(4)PL/SQL导入表数据报错Error reading file
当表数据文件很大时,选择Use Command Window方式导入报错。对大量数据的导入选择Use SQL*Plus,前者不能读取大文件,后者可以。
========