oracle 备份与恢复学习总结
发布时间:2020-12-12 15:05:20 所属栏目:百科 来源:网络整理
导读:Oracle数据库的备份与恢复 http://jingyan.baidu.com/article/b2c186c8eb7713c46ef6ff22.html Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。 导出/导入(Export/Imp
Oracle数据库的备份与恢复http://jingyan.baidu.com/article/b2c186c8eb7713c46ef6ff22.htmlOracle数据库有三种标准的备份方法,它们分别是导出/导入(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.htmlOracle数据库导出操作 导入导出都要进行目录创建与授权。 在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:appAdministratoradminecampusdpdump 下面了),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:IGSOracleIGSC.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,前者不能读取大文件,后者可以。 ========(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |