逻辑备份与恢复实战数据库教程

时间:2023年02月10日

/

来源:小猪收割机

/

编辑:本站小编

收藏本文

下载本文

下面是小编为大家整理的逻辑备份与恢复实战数据库教程,本文共9篇,欢迎大家借鉴与参考,希望对大家有所帮助。本文原稿由网友“小猪收割机”提供。

篇1:逻辑备份与恢复实战数据库教程

逻辑备份与恢复的前提

1. 数据库工作在归档状态

2. 给数据库管理员授予角色权限

(1)如图12.2所示的编辑用户的【角色】选项卡,

(2)在【可用】下拉列表框里选中EXP FULL DATABASE和IMP FULL DATABASE角色,单击按钮,在【已授予】列表框里出现已经授予的角色权限。

3. 给NT管理员授予批处理作业权限

(1)如图12.3所示的本地安全设置界面。

(2)出现如图12.4所示的【本地安全策略设置】界面。

(3)出现如图12.5所示的【选择用户或组】界面。

4. 设置节点的首选身份证明

(1)如图12.6所示。

(2)切换到如图12.7所示的编辑管理员首选项的【首选身份证明】选项卡。

5. 设置数据库的首选身份证明

用exp命令文件实现逻辑备份

(1)数据库连接成功后出现如图12.9所示界面。

(2)出现如图12.10所示界面。

(3)开始逻辑备份过程,出现如图12.11所示界面。

(4)在c:\\oracle\\ora90\\bin目录下已经有名为EXPDAT.DMP的二进制文件存在。

用imp命令文件实现逻辑恢复

(1)数据库连接成功后出现如图12.12所示界面。

(2)出现如图12.13所示界面,

(3)出现如图12.14所示界面表明利用imp命令文件成功完成逻辑恢复,

(4)出现如图12.15所示的界面显示其参数配置。

用导出向导实现逻辑备份

(1)如图12.16所示。

(2)出现如图12.17所示的导出向导的【简介】界面。

(3)出现如图12.18所示的导出向导的【导出文件】界面。

(4)出现如图12.19所示的导出向导的【导出类型】界面,有3种导出类型。

(5)出现如图12.20所示的导出向导的【关联对象】界面,指定要导出的关联对象。

(6)出现如图12.21所示的导出向导的【调度】界面,包括6种调度方式。

(7)出现如图12.22所示的导出向导的【作业信息】界面。

(8)出现如图12.23所示的导出向导的【概要】界面。

(9)出现如图12.24所示界面。

(10)成功完成的备份作业如图12.25所示。

用导入向导实现逻辑恢复

(1)如图12.26所示。

(2)出现导入向导的【简介】界面。

(3)出现如图12.27所示的导入向导的【导入文件】界面。

(4)出现如图12.28所示的导入向导的【进度】界面。

(5)出现如图12.29所示的导入向导的【导入类型】界面。

(6)出现如图12.30所示的导入向导的【用户选择】界面。

(7)出现如图12.31所示的导入向导的【用户映射】界面。

(8)出现如图12.32所示的导入向导的【关联对象】界面,用于设置要导入的关联对象,包括。

(9)出现导入向导的【调度】界面。

(10)出现导入向导的【作业信息】界面。

(11)出现导入向导的【概要】界面。

(12)出现作业成功提交界面。

篇2:脱机备份与恢复实战数据库教程

脱机备份

(1)在【企业管理器】里关闭数据库例程,

(2)利用计算机的【资源管理器】查找与数据库有关的文件,

如图12.1所示。

(3)数据库的初始化文件位于c:\\oracle\\ora90\\database目录下,名为initmyoracle.ora,将其拷贝到指定目录下。

脱机恢复

(1)在【企业管理器】里关闭数据库例程。

(2)将上述拷贝的文件重新覆盖原来的同路径同名文件就可以。

篇3:备份和恢复概述数据库教程

理主要是为防止非法登录者或非授权用户对SQL Server 数据库或数据造成破坏,但在有些情况下这种安全管理机制显得力不从心,

备份和恢复概述数据库教程

。例如合法用户不小心对数据库数据做了不正确的操作或者保存数据库文件的磁盘遭到损坏或者运行SQL Server 的服务器因某种不可预见

的事情而导致崩溃。所以我们需要提出另外的方案即数据库的备份和恢复来解决这种问题。本章的主要目的就是介绍备份、恢复的含

义,数据库备份的种类以及备份设备等基本的概念,以及如何创建备份和恢复数据库,使读者对其有全面的了解和认识,能够自主制定自己的备份和恢复计划。

15.1.1 备份和恢复

备份和恢复组件是SQL Server 的重要组成部分。备份就是指对SQL Server 数据库或事务日志进行拷贝,数据库备份记录了在进行备份这一操作时数据库中所有数据的状态,如果数据库因意外而损坏,这些备份文件将在数据库恢复时被用来恢复数据库。

由于SQL Server 支持在线,备份所以通常情况下可一边进行备份,一边进行其它操作,但是,在备份过程中不允许执行以下操作:

创建或删除数据库文件;

创建索引;

执行非日志操作;

自动或手工缩小数据库或数据库文件大小。如果以上各种操作正在进行当中,且准备进行备份则备份,处理将被终止;如果在备份过程中,打算执行以上任何操作,则操作将失败而备份继续进行。

恢复就是把遭受破坏或丢失数据或出现错误的数据库恢复到原来的正常状态,这一状态是由备份决定的,但是为了维护数据库的一致性,在备份中未完成的事务并不进行恢复。

进行备份和恢复的工作主要是由数据库管理员来完成的。实际上数据库管理员日常比较重要、比较频繁的工作就是对数据库进行备份和恢复。

注意:如果在备份或恢复过程中发生中断,则可以重新从中断点开始执行备份或恢复。这在备份一个大型数据库时极有价值。

15.1.2 数据库备份的类型

在SQL Server 中有四种备份类型,分别为;

数据库备份(Database Backups)

事务日志备份(Transaction Log Backup)

差异备份(Differential Database Backups)

文件和文件组备份(File and File Group Backup)下面我们将详细介绍其所表述的内容,并涉及到一些使用时注意事项。

1 数据库备份(Database Backups)

数据库备份是指对数据库的完整备份,包括所有的数据以及数据库对象。实际上备份数据库过程就是首先将事务日志写到磁盘上,

然后根据事务创建相同的数据库和数据库对象以及拷贝数据的过程。由于是对数据库的完全备份,所以这种备份类型不仅速度较慢,

而且将占用大量磁盘空间。正因为如此,在进行数据库备份时,常将其安排在晚间,因为此时整个数据库系统几乎不进行其它事务操作,从而可以提高数据库备份的速度。

在对数据库进行完全备份时,所有未完成的事务或者发生在备份过程中的事务都不会被备份。如果您使用数据库备份类型,

则从开始备份到开始恢复这段时间内发生的任何针对数据库的修改将无法恢复。所以我们总是在一定的要求或条件下才使用这种备份类型,比如:

数据不是非常重要,尽管在备份之后恢复之前数据被修改,但这种修改是可以忍受的;

通过批处理或其它方法,在数据库恢复之后可以很容易地重新实现在数据损坏前发生的修改;

数据库变化的频率不大。在进行数据库备份时,如果您在备份完成之后又进行了事务日志备份,则在数据库备份过程中发生的事务将被备份:但若只进行数据库备份,常将数据库选项“trunc.log onchkpt” 设置为true, 这样每次在运行到检查点(checkpoint) 时,都会将事务日志截断。

注意:如果对数据一致性要求较高(将数据库恢复到发生损坏的刻),则不应使用数据库备份。

2 事务日志备份(Transaction Log Backup)

事务日志备份是指对数据库发生的事务进行备份,包括从上次进行事务日志备份、差异备份和数据库完全备份之后,所有已经完成的事务。在以下情况下我们常选择事务日志备份。

不允许在最近一次数据库备份之后发生数据丢失或损坏现象;

存储备份文件的磁盘空间很小或者留给进行备份操作的时间有限,例如兆字节级的数据库需要很大的磁盘空间和备份时间;

准备把数据库恢复到发生失败的前一点;

数据库变化较为频繁。由于事务日志备份仅对数据库事务日志进行备份,所以其需要的磁盘空间和备份时间都比数据库备份(备份数据和事务)少得多,这是它的优点所在。正是基于此,我们在备份时常采用这样的策略,即每天进行一次数据库备份,而以一个或几个小时的频率备份事务日志。这样利用事务日志备份,我们就可以将数据库恢复到任意一个创建事务日志备份的时刻。

但是,创建事务日志备份却相对比较复杂。因为在使用事务日志对数据库进行恢复操作时,还必须有一个完整的数据库备份,而且事务日志备份恢复时必须要按一定的顺序进行。比如在上周末对数据库进行了完整的数据库备份,在从周一到本周末的每一天都进行一次事务日志备份,那么若要打算对数据库进行恢复,则首先恢复数据库备份,然后按照顺序恢复从周一到本周末的事务日志备份。

有些时侯数据库事务日志会被中断,例如数据库中执行了非日志操作(如创建索引、创建或删除数据库文件、自动或手工缩小数据库文件大小),此时应该立即创建数据库或差异备份,然后再进行事务日志备份。以前进行的事务日志备份也没有必要了。

3 差异备份(Differential Database Backups)

差异备份是指将最近一次数据库备份以来发生的数据变化备份起,来因此差异备份实际上是一种增量数据库备份,

与完整数据库备份相比,差异备份由于备份的数据量较小,所以备份和恢复所用的时间较短。通过增加差异备份的备份次数,可以降低丢失数据的风险,将数据库恢复至进行最后一次差异备份的时刻,但是它无法像事务日志备份那样提供到失败点的无数据损失备份。

但在实际中为了最大限度地减少数据库恢复时间以及降低数据损失数量,我们常一起使用数据库备份、事务日志备份和差异备份,而采用的备份方案是这样的;

首先有规律地进行数据库备份,比如每晚进行备份;

其次以较小的时间间隔进行差异备份,比如三个小时或四个小时;

最后在相临的两次差异备份之间进行事务日志备份,可以每二十或三十分钟一次。

这样在进行恢复时,我们可先恢复最近一次的数据库备份,接着进行差异备份,最后进行事务日志备份的恢复。

但是,在更多的情况下我们希望数据库能恢复到数据库失败那一时刻,那么我们该怎样做呢?下面的方法也许会有大帮助。

首先如果能够访问数据库事务日志文件则应备份当前正处于活动状态的事务日志;

其次恢复最近一次数据库备份;

接着恢复最近一次差异备份;

最后按顺序恢复自差异备份以来进行的事务日志备份。当然,如果无法备份当前数据库正在进行的事务,则只能把数据库恢复到最后一次事务日志备份的状态,而不是数据库失败点。

4 文件和文件组备份(File and File Group Backup)

文件或文件组备份是指对数据库文件或文件夹进行备份,但其不像完整的数据库备份那样同时也进行事务日志备份。使用该备份方法可提高数据库恢复的速度,因为其仅对遭到破坏的文件或文件组进行恢复。

但是在使用文件或文件组进行恢复时,仍要求有一个自上次备份以来的事务日志备份来保证数据库的一致性。所以在进行完文件或文件组备份后应再进行事务日志备份。否则备份在文件或文件组备份中所有数据库变化将无效。

如果需要恢复的数据库部分涉及到多个文件或文件组,则应把这些文件或文件组都进行恢复。例如,如果在创建表或索引时,表或索引是跨多个文件或文件组,则在事务日志备份结束后应再对表或索引有关的文件或文件组进行备份,否则在文件或文件组恢复时将会出错。

15.1.3 备份和恢复的策略

通常而言,我们总是依赖所要求的恢复能力(如将数据库恢复到失败点) 、备份文件的大小(如完成数据库备份或只进行事务日志的备份或是差异数据库备份)以及留给备份的时间等来决定该使用哪种类型的备份。常用的备份选择方案有:仅仅进行数据库备份、或在进行数据库备份的同时进行事务日志备份,或使用完整数据库备份和差异数据库备份。

选用怎样的备份方案将对备份和恢复产生直接影响,而且也决定了数据库在遭到破坏前后的一致性水平。所以在做出该决策时,您必须认识到以下几个问题:

如果只进行数据库备份,那么将无法恢复自最近一次数据库备份以来数据库中所发生的所有事务。这种方案的优点是简单,而且在进行数据库恢复时操作也很方便;

如果在进行数据库备份时也进行事务日志备份,那么可以将数据库恢复到失败点,那些在失败前未提交的事务将无法恢复,但如果您在数据库失败后立即对当前处于活动状态的事务进行备份,则未提交的事务也可以恢复。

从以上可以看出,对数据库一致性的要求程度成为我们选择这样或那样的备份方案的主要的普遍性原因。但在某些情况下对数据库备份提出更为严格的要求,例如在处理比较重要业务的应用环境中,常要求数据库服务器连续工作,至多只留有一小段时间来执行系统维护任务,在该情况下一旦出现系统失败,则要求数据库在最短时间内立即恢复到正常状态,以避免丢失过多的重要数据,由此可见备份或恢复所需时间往往也成为我们选择何种备份方案的重要影响因素。

那么如何才能减少备份和恢复所花费时间呢?SQL Server 提供了几种方法来减少备份或恢复操作的执行时间。

使用多个备份设备来同时进行备份处理。同理,可以从多个备份设备上同时进行数据库恢复操作处理;

综合使用完整数据库备份、差异备份或事务日志备份来减少每次的需要备份的数据数量;

使用文件或文件组备份以及事务日志备份,这样可以只备份或恢复那些包含相关数据的文件,而不是整个数据库。

另外需要注意的是,在备份时我们也要决定该使用哪种备份设备如磁盘或磁带,并且决定如何在备份设备上创建备份,比如将备份添加到备份设备上或将其覆盖。在SQL Server 2000 中,有三种数据库恢复模式,它们分别是:简单恢复(SimpleRecovery)、完全恢复(Full Recovery)、批日志恢复(Bulk-logged Recovery)。

1 简单恢复(Simple Recovery)

所谓简单恢复就是指在进行数据库恢复时仅使用了数据库备份或差异备份,而不涉及事务日志备份。简单恢复模式可使数据库恢复到上一次备份的状态,但由于不使用事务日志备份来进行恢复,所以无法将数据库恢复到失败点状态。当选择简单恢复模式时常使用的备份策略是:首先进行数据库备份,然后进行差异备份。

2 完全恢复(Full Recovery)

完全数据库恢复模式是指通过使用数据库备份和事务日志备份将数据库恢复到发生失败的时刻,因此几乎不造成任何数据丢失,这成为对付因存储介质损坏而数据丢失的最佳方法。为了保证数据库的这种恢复能力,所有的批数据操作比如SELECT INGO、创建索引都被写入日志文件。选择完全恢复模式时常使用的备份策略是:

首先进行完全数据库备份;

然后进行差异数据库备份;

最后进行事务日志的备份。

如果准备让数据库恢复到失败时刻必须对数据库失败前正处于运行状态的事务进行备份。3 批日志恢复(Bulk-logged Recovery)

批日志恢复在性能上要优于简单恢复和完全恢复模式,它能尽最大努力减少批操作所需要的存储空间。这些批操作主要是:SELECT INTO 批装载操作(如bcp 操作或批插入操作)、创建索引针对大文本或图像的操作(如WRITETEXT、UPDATETEXT)。选择批日志恢复模式所采用的备份策略与完全恢复所采用的恢复策略基本相同。

从以上的论述中我们可以看到,在实际应用中,备份策略和恢复策略的选择不是相互孤立的,而是有着紧密的联系。我们并不仅仅是因为数据库备份为数据库恢复提供了 “原材料”这一事实,以便在采用何种数据库恢复模式的决策中考虑该怎样进行数据库备份,更多是因为在选择该使用哪种备份类型时我们必须考虑到当使用该备份进行数据库恢复时,它能把遭到损坏的数据库“带”到怎样的状态(是数据库失败的时刻,还是最近一次备份的时刻)。但有一点我们必须强调,即备份类型的选择和恢复模式的确定都应服从于这一目标:尽最大可能,以最快速度减少或消灭数据丢失。

篇4:逻辑备份与恢复

oracle227

逻辑备份与恢复备份与恢复简介:

备份是数据库中数据的副本,它可以保护数据在出现意外

损失时最大限度的恢复,

Oracle数据库的备份包括以下两种类型:

物理备份是对数据库的操作系统物理文件(如数据文件、控制文件和日志文件等)的备份:RMAN备份

逻辑备份是对数据库逻辑组件(如表、视图和存储过程等数据库对象)的备份:imp[dp]/exp[dp]

故障类型:

导致数据库操作中止的故障包括四种类型:

语句故障:在执行 SQL 语句无效可导致语句故障。

用户进程故障:当用户程序出错而无法访问数据库时发生用户进程故障。导致用户进程故障的原因是异常断开连接或异常终止进程

实例故障:当 Oracle 的数据库实例由于硬件或软件问题而无法继续运行时,就会发生实例故障

介质故障:在数据库无法正确读取或写入某个数据库文件时,会发生介质故障

语句故障select * from aa;//假如aa表并不存在的情况不需要处理用户进程故障用户(死机、用户进程消失了)<――>连接<――>服务器(pmon进程处理,监测到客户端进程消失后马上就把serverPro杀死掉)不需要处理实例故障oracle服务器死机、坏掉了,通过重启oracle就可以解决实例故障不需要处理介质故障硬盘坏了导致数据文件丢失或者损坏了需要dba来进行处理

传统的导入导出:

简介:传统的导出导入程序用于实施数据库的逻辑备份和恢复导出程序将数据库中的对象定义和数据备份到一个操作系统二进制文件中导入程序读取二进制导出文件并将对象和数据载入数据库中传统的导出导入程序是客户端工具。

导出和导入实用程序的特点有:可以按时间保存表结构和数据允许导出指定的表,并重新导入到新的数据库中可以把数据库迁移到另外一台异构服务器上在两个不同版本的Oracle数据库之间传输数据在联机状态下进行备份和恢复可以重新组织表的存储结构,减少链接及磁盘碎片

使用以下三种方法调用导出和导入实用程序:

1,交互提示符:以交互的方式提示用户逐个输入参数的值。

2,命令行参数:在命令行指定执行程序的参数和参数值。

3,参数文件:允许用户将运行参数和参数值存储在参数文件中,以便重复使用参数

导出和导入数据库对象的四种模式是:四种模式独立互斥的,不能同时存在

1,数据库模式:导出和导入整个数据库中的所有对象

2,表空间模式:导出和导入一个或多个指定的表空间中的所有对象

3,用户模式:导出和导入一个用户模式中的所有对象

4,表模式:导出和导入一个或多个指定的表或表分区表的高水位线可以使用导入导出来下降

导出操作的基本命令参数:

参数

说明

USERID

确定执行导出实用程序的用户名和口令

BUFFER

确定导出数据时所使用的缓冲区大小,其大小用字节表示

FILE

指定导出的二进制文件名称,默认的扩展名是.dmp

FULL

指定是否以全部数据库方式导出,只有授权用户才可使用此参数

OWNER

要导出的数据库用户列表

HELP

指定是否显示帮助消息和参数说明

ROWS

确定是否要导出表中的数据

TABLES

按表方式导出时,指定需导出的表和分区的名称

PARFILE

指定传递给导出实用程序的参数文件名

TABLESPACES

按表空间方式导出时,指定要导出的表空间名

[root@ localhost ~]# su - oracle[oracle@ localhost ~]$ clear[oracle@ localhost ~]$ cd $ORACLE_BASE[oracle@ localhost oracle]$ lsadmin archive cfgtoollogs checkpoints diag flash_recovery_area oradata pl_sql_pacakge[oracle@ localhost oracle]$ mkdir - p test_imp_exp[oracle@ localhost oracle]$ cd test_imp_exp/[oracle@ localhost test_imp_exp]$ ls[oracle@ localhost test_imp_exp]$ pwd/u01 /app /oracle /test_imp_exp[oracle@ localhost test_imp_exp]$ sqlplus hr/ hr@ jiagulun

SQL*Plus: Release 11.2.0.1.0 Production on Tue Jan 20 23: 50: 52

Copyright ( c) 1982 , , Oracle. All rights reserved.

Connected to :Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

SQL>select * from student;

ID NAMEAGE---------- -------------------- ----------

SQL>select * from address;

XH ZZ---------- ----------

SQL>exit;Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options[oracle@ localhost test_imp_exp]$ exp help =y--通过这个来查看关于exp命令的解释

Export: Release 11.2.0.1.0 - Production on Tue Jan 20 23:51:56 2015

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

You can let Export prompt you for parameters by entering the EXPcommand followed by your username/password :

Example: EXP SCOTT/TIGER

Or, you can control how Export runs by entering the EXP command followedby various arguments. To specify parameters, you use keywords:

Format: EXP KEYWORD= value or KEYWORD =(value1 ,value2 ,... ,valueN ) Example: EXP SCOTT/TIGER GRANTS=Y TABLES=( EMP, DEPT, MGR) or TABLES=( T1: P1, T1: P2), if T1 is partitioned table

USERID must be the first parameter on the command line.

Keyword Description (Default )KeywordDescription (Default )--------------------------------------------------------------------------USERID username/password FULL export entire file (N )BUFFER size of data buffer OWNER list of owner usernamesFILE output files (EXPDAT.DMP ) TABLES list of table namesCOMPRESS import into one extent (Y ) RECORDLENGTH length of IO recordGRANTS export grants (Y) INCTYPEincremental export typeINDEXES export indexes (Y ) RECORD track incr. export (Y )DIRECT direct path (N )TRIGGERS export triggers (Y )LOG log file of screen output STATISTICS analyze objects (ESTIMATE )ROWS export data rows (Y ) PARFILEparameter filenameCONSISTENT cross- table consistency (N ) CONSTRAINTS export constraints (Y )

OBJECT_CONSISTENT transaction set to read only during object export (N )FEEDBACK display progress every x rows (0 )FILESIZE maximum size of each dump fileFLASHBACK_SCN SCN used to set session snapshot back toFLASHBACK_TIME time used to get the SCN closest to the specified timeQUERY select clause used to export a subset of a tableRESUMABLEsuspend when a space related error is encountered (N )RESUMABLE_NAME text string used to identify resumable statementRESUMABLE_TIMEOUT wait time for RESUMABLETTS_FULL_CHECK perform. full or partial dependency check for TTSVOLSIZE number of bytes to write to each tape volumeTABLESPACES list of tablespaces to exportTRANSPORT_TABLESPACE export transportable tablespace metadata (N)TEMPLATE template name which invokes iAS mode export

[oracle@ localhost test_imp_exp]$ exp hr/ hr@ jiagulun tables =student file=/u01/app/oracle/test_imp_exp/hr_student_file.dbf log=/u01/app/oracle/test_imp_exp/hr_student_log.log

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 00:05:42 2015--上面的命令为通过导出表的模式导出student表

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing optionsExport done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path .... . exporting tableSTUDENT 4 rows exportedExport terminated successfully without warnings.[oracle@ localhost test_imp_exp]$ ! ls - als - a. .. expdat.dmp hr_student_file.dbf hr_student_log.log

[oracle@ localhost test_imp_exp]$ exp hr/ hr@ jiagulun tablespaces= users file=/u01/app/oracle/test_imp_exp/hr_tbs_users_file.dbf log=/u01/app/oracle/test_imp_exp/hr_tbs_users_log.log

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 00:08:23 2015--导出表空间

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing optionsEXP-00023 : must be a DBA to do Full Database or Tablespace export--假如是导出数据库或者恶表空间需要dba来做(2) U( sers), or ( 3) T( ables): ( 2) U >u--自动跳到了交互提示符模式:exp

Export grants (yes /no ): yes >yes

Export table data (yes /no ): yes >yes

Compress extents (yes /no ): yes >yes

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export selected tablespaces ...

. exporting referential integrity constraints. exporting triggersExport terminated successfully with warnings.[oracle@ localhost test_imp_exp]$ lsexpdat.dmp hr_student_file.dbf hr_student_log.log hr_tbs_users_file.dbf hr_tbs_users_log.log[oracle@ localhost test_imp_exp]$ lltotal 40-rw -r--r-- 1 oracle oinstall 0 Jan 21 00:02 expdat.dmp-rw -r--r-- 1 oracle oinstall 16384 Jan 21 00:05 hr_student_file.dbf-rw -r--r-- 1 oracle oinstall 427 Jan 21 00:05 hr_student_log.log-rw -r--r-- 1 oracle oinstall 16384 Jan 21 00:10 hr_tbs_users_file.dbf-rw -r--r-- 1 oracle oinstall 463 Jan 21 00:10 hr_tbs_users_log.log[oracle@ localhost test_imp_exp]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 00: 11: 22 2015

Copyright ( c) 1982 , 2009, Oracle. All rights reserved.

Connected to :Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

SQL>create user test1 identified by test1;

User created.

SQL>grant connect, resource to test1 ;

Grant succeeded.

SQL> create table test_export_tab(id number (20 ),name varchar2 (20 ));

Table created.

SQL>insert into test_export_tab values( 1, ‘zhangsan‘);

1 row created.

SQL>exit;Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options[oracle@ localhost test_imp_exp]$ exp hr/ hr@ jiagulun tables=test1.test_export_tab file=/u01/app/oracle/test_imp_exp/hr_test1_tab_file.dbf log=/u01/app/oracle/test_imp_exp/hr_test1_tab_log.log

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 00:20:07 2015--导出不同用户的表

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing optionsExport done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...EXP-00009 : no privilege to export TEST1 ‘s table TEST_EXPORT_TABExport terminated successfully with warnings.--导出不同用户的数据信息必须有权限[oracle@localhost test_imp_exp]$ exp system/oracle@jiagulun tables=test1.test_export_tab file=/u01/app/oracle/test_imp_exp/hr_test1_tab_file.dbf log=/u01/app/oracle/test_imp_exp/hr_test1_tab_log.log

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 00:23:48 2015--system用户可以导出不同用户数据

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsExport done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...Current user changed to TEST1. . exporting table TEST_EXPORT_TAB 1 rows exportedExport terminated successfully without warnings.

导入操作的基本命令参数:

参数

说明

USERID

指定执行导入的用户名和密码

BUFFER

指定用来读取数据的缓冲区大小,以字节为单位

COMMIT

指定是否在每个数组(其大小由BUFFER参数设置)插入后进行提交

FILE

指定要导入的二进制文件名

FROMUSER

指定要从导出转储文件中导入的用户模式

TOUSER

指定要将对象导入的用户名。FROMUSER与TOUSER可以不同

FULL

指定是否要导入整个导出转储文件

TABLES

指定要导入的表的列表

ROWS

指定是否要导入表中的行

PARFILE

指定传递给导入实用程序的参数文件名,此文件可以包含这里列出的所有参数

IGNORE

导入时是否忽略遇到的错误,默认为N

TABLESPACES

按表空间方式导入,列出要导入的表空间名

[oracle@ localhost test_imp_exp]$ exp hr/ hr@ jiagulun tables = student,address file = $ORACLE_BASE /test_imp_exp /hr_stu_add log = $ORACLE_BASE/test_imp_exp /hr_stu_add

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 00:56:30 2015--导出文件的表不是table=(tab1,tab2)而是如上面所示

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing optionsExport done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path .... . exporting tableSTUDENT 4 rows exported. . exporting tableADDRESS 4 rows exportedExport terminated successfully without warnings.[oracle@ localhost test_imp_exp]$ lshr_stu_add.dmp hr_stu_add.log[oracle@ localhost test_imp_exp]$ sqlplus hr/ hr

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 00: 57: 04 2015

Copyright ( c) 1982 , 2009, Oracle. All rights reserved.

Connected to :Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

SQL>drop table address;

Table dropped.

SQL>drop table student;

Table dropped.

SQL>commit;

Commit complete.

SQL>purge recyclebin;--清除回收站

Recyclebin purged.

SQL>exitDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options[oracle@ localhost test_imp_exp]$ imp hr/hr@jiagulun file=$ORACLE_BASE/test_imp_exp/hr_stu_add.dmp

Import: Release 11.2 .0.1.0 - Production on Wed Jan 21 00 :59 :27 2015--导入表到自己当中去

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

Export file created by EXPORT: V11.02.00 via conventional pathimport done in ZHS16GBK character set and AL16UTF16 NCHAR character set. importing HR‘s objects into HR. importing HR‘ s objects into HR. . importing table “STUDENT” 4 rows imported. . importing table “ADDRESS” 4 rows importedAbout to enable constraints...Import terminated successfully without warnings.[oracle@ localhost test_imp_exp]$ imp hr/hr@jiagulun file=$ORACLE_BASE/test_imp_exp/hr_stu_add.dmp fromuser =hr touser=test1

Import: Release 11.2 .0.1.0 - Production on Wed Jan 21 01 :00 :31 2015--通过其他用户把表导入到另外用户中去

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

Export file created by EXPORT: V11.02.00 via conventional pathimport done in ZHS16GBK character set and AL16UTF16 NCHAR character setIMP- 00007: must be a DBA to import objects to another user ‘s accountIMP-00000: Import terminated unsuccessfully--通过其他用户把表导入到另外用户中去,这是不行的[oracle@localhost test_imp_exp]$ imp test1/test1@jiagulun file=$ORACLE_BASE/test_imp_exp/hr_stu_add.dmp fromuser=hr touser=test1 tables=student

Import: Release 11.2.0.1.0 - Production on Wed Jan 21 01:01:26 2015--自己导入其他用户的表到自己当中去

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.02.00 via conventional path

Warning: the objects were exported by HR, not by you--可以导入,但是会有警告

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set. importing HR‘ s objects into TEST1. . importing table “STUDENT” 4 rows importedImport terminated successfully without warnings.[oracle@ localhost test_imp_exp]$ imp system/ oracle@ jiagulun file=$ORACLE_BASE/test_imp_exp/hr_stu_add.dmp fromuser =hr touser=test1 tables= address

Import: Release 11.2 .0.1.0 - Production on Wed Jan 21 01 :02 :00 2015--通过system导入其他表到另外用户中可以

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

Export file created by EXPORT: V11.02.00 via conventional path

Warning: the objects were exported by HR , not by you--通过system导入其他表到另外用户中可以但也会有警告出现

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set. importing HR‘s objects into TEST1. . importing table “ADDRESS” 4 rows importedAbout to enable constraints...Import terminated successfully without warnings.[oracle@localhost test_imp_exp]$ sqlpus test1/test1-bash: sqlpus: command not found[oracle@localhost test_imp_exp]$ sqlplus test1/test1

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 01:02:22 2015

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>select * from tab;

TNAME TABTYPE CLUSTERID------------------------------ ------- ----------ADDRESSTABLESTUDENTTABLETEST_EXPORT_TAB TABLE

SQL>假如我想导入用户已经存在的表:需要添加ignore参数下面是通过交互提示符的方式导入的:没有添加ignore

[oracle@localhost test_imp_exp]$ imp

Import: Release 11.2.0.1.0 - Production on Wed Jan 21 01:33:00 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Username: test1

Password:

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Import data only (yes/no): no >

Import file: expdat.dmp >hr_stu_add.dmp

Enter insert buffer size (minimum is 8192) 30720>

Export file created by EXPORT:V11.02.00 via conventional path

Warning: the objects were exported by HR, not by you

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

List contents of import file only (yes/no): no >

Ignore create error due to object existence (yes/no): no >

Import grants (yes/no): yes >

Import table data (yes/no): yes >

Import entire export file (yes/no): no >

Username: hr

Enter table(T) or partition(T:P) names. Null list means all tables for user

Enter table(T) or partition(T:P) name or . if done: .

. importing HR‘s objects into TEST1

. importing HR‘s objects into TEST1

IMP-00015: following statement failed because the object already exists:

“CREATE TABLE ”STUDENT“ (”ID“ NUMBER(10, 0), ”NAME“ VARCHAR2(20), ”AGE“ NUMB”

“ER(10, 0)) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 6”

“5536 NEXT 1048576 MINEXTENTS 1 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DE”

“FAULT) LOGGING NOCOMPRESS”

IMP-00015: following statement failed because the object already exists:

“CREATE TABLE ”ADDRESS“ (”XH“ NUMBER, ”ZZ“ VARCHAR2(10)) PCTFREE 10 PCTUSED”

“ 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1”

“ FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) LOGG”

“ING NOCOMPRESS”

Import terminated successfully with warnings.下面是通过参数文件的方式导入的:添加ignore

file=$ORACLE_BASE/test_imp_exp/hr_stu_add.dmp

ignore=y

fromuser=hr

touser=test1

[oracle@localhost test_imp_exp]$ imp test1/test1@jiagulun parfile=imp_by_spfile

Import: Release 11.2.0.1.0 - Production on Wed Jan 21 01:46:58 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.02.00 via conventional path

Warning: the objects were exported by HR, not by you

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set

. importing HR‘s objects into TEST1

. . importing table “STUDENT”

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_STUDENT) violated

Column 1 1

Column 2 ????

Column 3 20

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_STUDENT) violated

Column 1 2

Column 2 ????

Column 3 25

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_STUDENT) violated

Column 1 3

Column 2 ????

Column 3 30

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_STUDENT) violated

Column 1 4

Column 2 ????

Column 3 30 0 rows imported

. . importing table “ADDRESS”

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_ADDRESS) violated

Column 1 3

Column 2 ????

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_ADDRESS) violated

Column 1 2

Column 2 ???

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_ADDRESS) violated

Column 1 1

Column 2 ????

IMP-00019: row rejected due to ORACLE error 1

IMP-00003: ORACLE error 1 encountered

ORA-00001: unique constraint (TEST1.PK_ADDRESS) violated

Column 1 4

Column 2 ???? 0 rows imported

About to enable constraints...

Import terminated successfully with warnings.

[oracle@localhost test_imp_exp]$

之所以会出现建表语句是因为exp操作就是把数据库中的表的建表信息,数据信息,对象信息全部转换成sql语句当使用Imp的其实也就是执行里面的sql语句。当ignore设置为Y时,oracle会忽略其中的错误重新执行一遍建表操作,数据插入操作等

可传输表空间:下面模拟两个不同主机下的不同数据库进行表空间的传输操作:

明确什么事自包含?

就是要传输的表空间的对象中被建立的对象存放在其他表空间中:例如表,可以把表的索引建立在其他的表空间中,这样就不是自包含了。

在Linux下进行的传输表空间:

[oracle@ localhost imp_tran_file]$ sqlplus / as sysdba--sys登录oracle数据库

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 18: 06: 45 2015

Copyright ( c) 1982 , 2009, Oracle. All rights reserved.

Connected to :Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

SQL>create tablespace test_tran_ts datafile ‘/u01/app/oracle/oradata/jiagulun/test_tran_ts_file.dbf‘ size 10 m;

Tablespace created.--创建表空间

SQL>create table test_tran_tab1 (id number ,name varchar2 (20 )) tablespace test_tran_ts ;

Table created.--在该表空间中创建表

SQL> alter tablespace test_tran_ts read only;

Tablespace altered.--修改表空间为只读的状态

[oracle@ localhost imp_tran_file]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 18: 18: 58 2015

Copyright ( c) 1982 , 2009, Oracle. All rights reserved.

Connected to :Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

SQL>exec dbms_tts.transport_set_check (test_tran_ts ,true );BEGIN dbms_tts.transport_set_check (test_tran_ts ,true ); END;

*ERROR at line 1:ORA-06550 : line 1, column 36 :PLS-00201 : identifier ‘TEST_TRAN_TS‘ must be declaredORA-06550 : line 1, column 7 :PL/SQL: Statement ignored

SQL>exec dbms_tts.transport_set_check (‘test_tran_ts‘ ,true );--检查表空间的是否是自包含

PL/SQL procedure successfully completed.

SQL>SELECT * FROM TRANSPORT_SET_VIOLATIONS ;--检查表空间的是否是自包含

no rows selected

SQL>exit;Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

[oracle@ localhost test_imp_exp]$ exp \\‘system/oracle@jiagulun as sysdba\\‘ tablespaces=test_tran_ts transport_tablespace =y file=/u01/app/oracle/test_imp_exp/exp_tran_file.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 18:25:37 2015

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

EXP-00056 : ORACLE error 1031 encounteredORA-01031 : insufficient privilegesUsername:Password:

EXP-00056 : ORACLE error 1017 encounteredORA-01017 : invalid username /password ; logon deniedUsername:Password:

EXP-00056 : ORACLE error 1017 encounteredORA-01017 : invalid username /password ; logon deniedEXP-00005 : all allowable logon attempts failedEXP-00000 : Export terminated unsuccessfully[oracle@ localhost test_imp_exp]$ exp \\‘sys/oracle@jiagulun as sysdba\\‘ tablespaces=test_tran_ts transport_tablespace =y file=/u01/app/oracle/test_imp_exp/exp_tran_file.dmp--必须使用sys用户而且是as sysdba才可以--在Linux中需要对‘进行转义才可以Export: Release 11.2.0.1.0 - Production on Wed Jan 21 18:25:49 2015

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing optionsExport done in ZHS16GBK character set and AL16UTF16 NCHAR character setNote: table data ( rows) will not be exportedAbout to export transportable tablespace metadata...For tablespace TEST_TRAN_TS .... exporting cluster definitions. exporting table definitions. exporting referential integrity constraints. exporting triggers. end transportable tablespace metadata exportExport terminated successfully without warnings.[oracle@ localhost test_imp_exp]$ lsexp_tran_file.dmp hr_stu_add.dmp hr_stu_add.log imp_by_spfile[oracle@ localhost test_imp_exp]$ mkdir -p imp_tran_file--之所以建立一个文件夹是因为模拟是从另外一台主机拷贝过来的,统一放在该目录下[oracle@ localhost test_imp_exp]$ lsexp_tran_file.dmp hr_stu_add.dmp hr_stu_add.log imp_by_spfile imp_tran_file[oracle@ localhost test_imp_exp]$ cp - avf /u01 /app /oracle /oradata /jiagulun /test_tran_tstest_tran_ts01.dbf test_tran_ts_file.dbf[oracle@ localhost test_imp_exp]$ cp - avf /u01 /app /oracle /oradata /jiagulun /test_tran_ts_file.dbf . /imp_tran_file /`/ u01/ app/ oracle/ oradata/ jiagulun/ test_tran_ts_file.dbf‘ ->`./imp_tran_file/test_tran_ts_file.dbf‘[oracle@ localhost test_imp_exp]$ cd imp_tran_file/[oracle@ localhost imp_tran_file]$ lsexp_tran_file.dmp test_tran_ts_file.dbf[oracle@ localhost imp_tran_file]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 18: 29: 38 2015

Copyright ( c) 1982 , 2009, Oracle. All rights reserved.

Connected to :Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

SQL>drop tablespace test_tran_ts including contents;--删除刚刚创建的表空间,因为实际上是在同一个oracle中进行传输表空间的

Tablespace dropped.

SQL>exitDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options[oracle@ localhost imp_tran_file]$ imp \\‘sys/oracle@jiagulun as sysdba\\‘ tablespaces=test_tran_ts transport_tablespace =y file=/u01/app/oracle/test_imp_exp/imp_tran_file/exp_tran_file.dmp datafiles=/u01/app/oracle/test_imp_exp/imp_tran_file/test_tran_ts_file.dbf--导入表空间Import: Release 11.2 .0.1.0 - Production on Wed Jan 21 18 :32 :15 2015

Copyright ( c) 1982 , 2009, Oracle and /or its affiliates. All rights reserved.

Connected to : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

Export file created by EXPORT: V11.02.00 via conventional pathAbout to import transportable tablespace (s ) metadata...import done in ZHS16GBK character set and AL16UTF16 NCHAR character set. importing SYS‘s objects into SYS. importing SYS‘ s objects into SYSImport terminated successfully without warnings.[oracle@ localhost imp_tran_file]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 18: 32: 25 2015

Copyright ( c) 1982 , 2009, Oracle. All rights reserved.

Connected to :Oracle Database 11 g Enterprise Edition Release 11.2 .0.1.0 - 64 bit ProductionWith the Partitioning , OLAP , Data Mining and Real Application Testing options

SQL>set linesize 10000 pagesize 10000;SQL>select dt.tablespace_name ,dt.block_size ,dt.status ,dt.contents from dba_tablespaces dt;

TABLESPACE_NAME BLOCK_SIZE STATUS CONTENTS------------------------------ ---------- --------- ---------SYSTEM 8192 ONLINE PERMANENTSYSAUX 8192 ONLINE PERMANENTUNDOTBS1 8192 ONLINE UNDOTEMP 8192 ONLINE TEMPORARYUSERS 8192 ONLINE PERMANENTUNDOTBS2 8192 ONLINE UNDOEXAMPLE8192 ONLINE PERMANENTTESTTS 8192 ONLINE PERMANENTTEMP2 8192 ONLINE TEMPORARYTEMP3 8192 ONLINE TEMPORARYTEST_TRAN_TS 8192 READ ONLY PERMANENT

11 rows selected.

SQL>alter tablespace TEST_TRAN_TS read, write;alter tablespace TEST_TRAN_TS read, write *ERROR at line 1:ORA-02142 : missing or invalid ALTER TABLESPACE option

SQL>alter tablespace TEST_TRAN_TS read write;--修改表空间的状态

Tablespace altered.

SQL>insert into test_tran_tab values( 1, ‘张三‘);insert into test_tran―n_tab values( 1, ‘张三‘)*ERROR at line 1:ORA-00942 : table or view does not exist

SQL>insert into test_tran_tab values( 1, ‘zs‘);

1 row created.

SQL>select * from test_tran_tab;

ID NAME---------- --------------------1 zs

SQL>

使用数据泵的方式导入导出:

exp/imp的缺点是速度太慢,在大型生产库中尤其明显。从10g开始,oracle设计了数据泵,这是一个服务器端的工

具,它为Oracle数据提供高速并行及大数据的迁移。imp/exp可以在客户端调用,但是expdp/impdp只能在服

务端,因为在使用expdp/impdp以前需要在数据库中创建一个 Directory 。

在expdp进行导出时,先创建了MT表,并把对象的信息插入到MT表,之后进行导出动作;导出完成后,MT表也导

出到转储文件中;导出任务完成后、或者删除了导出任务后,MT表自动删除;如果导出任务异常终止,MT表仍然保留。

expdp也具有四种模式:表、用户、可传输表空间、全库。

数据泵的导出:1,部分的exp中的参数仍然可用,有的不能使用,如index。

2,directory:供转储文件和日志文件使用的目录对象。

3,job_name:指定的任务的名称。

4,content:指定要导出的数据, 其中有效关键字值为: (ALL), DATA_ONLY 和 METADATA_ONLY,当设置content为ALL 时,将导出对象定义及其所有数据;

DATA_ONLY时,只导出对象数据;为METADATA_ONLY时,只导出对象定义 。

5,reuse_dumpfiles:如果导出文件已经存在,是否覆盖。

6,compression:压缩导出文件。

7,estimate:指定估算被导出表所占用磁盘空间分方法.默认值是BLOCKS

8, estimate_only:是否只估算导出占用的磁盘空间,而不进行真正的导出,默认是N。

9,exclude:用于指定执行操作时要排除对象类型或相关对象,用法:EXCLUDE=object_type[:name_clause] [,….]

10,include:用于指定执行操作时要包含的对象类型或相关对象,用法:INCLUDE=object_type[:name_clause] [,….]

11,query:导出符合条件的行。

12,attch:连接到现有的作业,可以用在中断导出任务后重新启动导出任务。----------------------------------------------------------------[oracle@localhost oracle]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Jan 21 20:50:29 2015

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create directory test_impdp_expdp as ‘/u01/app/oracle/test_impdp_expdp‘;

Directory created.--创建目录

SQL>grant write,read on directory test_impdp_expdp to hr;

Grant succeeded.--给用户赋予权限

SQL> grant write,read on directory test_impdp_expdp to test1;

Grant succeeded.--给用户赋予权限

SQL>exit

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Productio

With the Partitioning, OLAP, Data Mining and Real Application Testing options

[oracle@localhost oracle]$ cd test_impdp_expdp/

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun directory=TEST_IMPDP_EXPDP dumpfile

--默认是多出用户的所有的对象

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 22:14:04 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “HR”.“SYS_EXPORT_SCHEMA_01”: hr/********@jiagulun directory=TEST_IMPDP_EXPDP dumpfi

Estimate in progress using BLOCKS method...

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 768 KB

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE

Processing object type SCHEMA_EXPORT/CLUSTER/CLUSTER

Processing object type SCHEMA_EXPORT/CLUSTER/INDEX

Processing object type SCHEMA_EXPORT/TABLE/TABLE

Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type SCHEMA_EXPORT/TABLE/COMMENT

Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC

Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE

Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC

Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE

Processing object type SCHEMA_EXPORT/VIEW/VIEW

Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY

Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Processing object type SCHEMA_EXPORT/TABLE/TRIGGER

Processing object type SCHEMA_EXPORT/EVENT/TRIGGER

Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

Processing object type SCHEMA_EXPORT/JOB

. . exported “HR”.“ADDRESS”5.476 KB 2 rows

. . exported “HR”.“COUNTRIES” 6.367 KB25 rows

. . exported “HR”.“DEPARTMENTS” 7.007 KB27 rows

. . exported “HR”.“DEPT” 5.492 KB 3 rows

. . exported “HR”.“DROPPED_OBJ” 6.367 KB21 rows

. . exported “HR”.“EMPLOYEES” 16.81 KB 107 rows

. . exported “HR”.“JOBS” 6.992 KB19 rows

. . exported “HR”.“JOB_HISTORY” 7.054 KB10 rows

. . exported “HR”.“LOCATIONS” 8.273 KB23 rows

. . exported “HR”.“REGIONS”5.476 KB 4 rows

. . exported “HR”.“STUDENT”5.937 KB 3 rows

. . exported “HR”.“TEST_JOB” 24.74 KB 1684 rows

Master table “HR”.“SYS_EXPORT_SCHEMA_01” successfully loaded/unloaded

******************************************************************************

Dump file set for HR.SYS_EXPORT_SCHEMA_01 is:

/u01/app/oracle/test_impdp_expdp/test_exp_01.dmp

Job “HR”.“SYS_EXPORT_SCHEMA_01” successfully completed at 22:16:07

[oracle@localhost test_impdp_expdp]$ ls

export.log test_exp_01.dmp

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun directory=TEST_IMPDP_EXPDP TABLES=Sexp_02.dmp EXCLUDE=INDEX:“=\\‘INDEX_ADDRESS_NAME\\‘”

LRM-00116: syntax error at ‘INDEX:‘ following ‘=‘

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun directory=TEST_IMPDP_EXPDP TABLES=Sexp_02.dmp EXCLUDE=INDEX:“IN\\‘INDEX_ADDRESS_NAME\\‘”

.--通过上面的导出你会发现需要对‘进行转义,而且是IN关键字Export: Release 11.2.0.1.0 - Production on Wed Jan 21 22:25:09 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “HR”.“SYS_EXPORT_TABLE_01”: hr/********@jiagulun directory=TEST_IMPDP_EXPDP TABLES=_exp_02.dmp EXCLUDE=INDEX:IN\\‘INDEX_ADDRESS_NAME\\‘

Estimate in progress using BLOCKS method...

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 128 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX

Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported “HR”.“ADDRESS”5.476 KB 2 rows

. . exported “HR”.“STUDENT”5.937 KB 3 rows

Master table “HR”.“SYS_EXPORT_TABLE_01” successfully loaded/unloaded

******************************************************************************

Dump file set for HR.SYS_EXPORT_TABLE_01 is:

/u01/app/oracle/test_impdp_expdp/test_exp_02.dmp

Job “HR”.“SYS_EXPORT_TABLE_01” successfully completed at 22:25:20

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student,address encryption=dmpfiles=test_exp_encrytion_reuse_01.dmp

LRM-00101: unknown parameter name ‘dumpfiles‘

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student,address encryption=dmpfile=test_exp_encrytion_reuse_01.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 22:32:31 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39002: invalid operation

ORA-39070: Unable to open the log file.

ORA-39145: directory object parameter must be specified and non-null

--对于上面的错误是因为没有打开或者不存在encryption wallet所以需要进行下面操作:

oracle Wallet的使用(即内部加密技术TDE(Transparent Data Encryption ))

1. TDE是Oracle10gR2中推出的一个新功能,使用时要保证Oracle版本是在10gR2或者以上

--查看oracle版本:

select * from v$version;

2、创建一个新目录,并指定为Wallet目录

D:\\oracle\\product\\10.2.0\\admin\\ora10\\ora_wallet

3. 设置wallet目录,在参数文件sqlnet.ora中(window+f,在你安装盘区查找sqlnet.ora),按照下面的格式加入信息:

ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)

(METHOD_DATA=(DIRECTORY=D:\\oracle\\product\\10.2.0\\admin\\ora10\\ora_wallet)))

4. 创建master key文件,指定wallet密码,使用SYS用户登入系统,建立加密文件

SQL>alter system set encryption key identified by “wallet”;

System altered

-- 密码“wallet”不加引号时,后面使用时也不需要用引号

此时在设置的目录下,多出一个Personal Information Exchange类型的文件,相当于我们生成的master key文件,

电脑资料

D:\\oracle\\product\\10.2.0\\admin\\ora10\\ora_wallet\\ewallet.p12

5、启动、关闭Wallet

SQL>ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY “wallet”;

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY “wallet”

ORA-28354: wallet 已经打开

SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE; --关闭

System altered

SQL>ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY “wallet”; --打开

System altered

到此,已经成功配置了Wallet,创建了master key。

--通过上面的创建并且开启encryption wallet后才可以进行如下[oracle@localhost wallet]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMPDP_EXPDP dumpfile=test_exp_encryption_1.dmp encryption=data_only

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:57:01 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “HR”.“SYS_EXPORT_TABLE_01”: hr/********@jiagulun tables=student directory=TEST_IMPDP_EXPDP dumpfile=test_exp_encryption_1.dmp encryption=data_only

Estimate in progress using BLOCKS method...

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 64 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX

Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported “HR”.“STUDENT”5.945 KB 3 rows

Master table “HR”.“SYS_EXPORT_TABLE_01” successfully loaded/unloaded

******************************************************************************

Dump file set for HR.SYS_EXPORT_TABLE_01 is:

/u01/app/oracle/test_impdp_expdp/test_exp_encryption_1.dmp

Job “HR”.“SYS_EXPORT_TABLE_01” successfully completed at 23:57:08

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student compression=data_onl reuse_dumpfiles=y dumpfile=test_exp_01.dmp--reuse_dumpfiles表示可以覆盖原文件

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 22:41:57 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “HR”.“SYS_EXPORT_TABLE_01”: hr/********@jiagulun tables=student compression=data_on reuse_dumpfiles=y dumpfile=test_exp_01.dmp

Estimate in progress using BLOCKS method...

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 64 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX

Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported “HR”.“STUDENT”4.914 KB 3 rows

Master table “HR”.“SYS_EXPORT_TABLE_01” successfully loaded/unloaded

******************************************************************************

Dump file set for HR.SYS_EXPORT_TABLE_01 is:

/u01/app/oracle/test_impdp_expdp/test_exp_01.dmp

Job “HR”.“SYS_EXPORT_TABLE_01” successfully completed at 22:42:02

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMPDP_EXPDP

EXCLUDE=CONSTRAINT:IN\\‘PK_PRIMARY\\‘“ dumpfile=test_exp_jobname.dmp job_name=test_exp_jobname

--需要转义和大写Export: Release 11.2.0.1.0 - Production on Wed Jan 21 22:56:23 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting ”HR“.”TEST_EXP_JOBNAME“: hr/********@jiagulun tables=student directory=TEST_IMPDP_EK_PRIMARY\\‘ dumpfile=test_exp_jobname.dmp job_name=test_exp_jobname

Estimate in progress using BLOCKS method...

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 64 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX

Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported ”HR“.”STUDENT“5.937 KB 3 rows

Master table ”HR“.”TEST_EXP_JOBNAME“ successfully loaded/unloaded

******************************************************************************

Dump file set for HR.TEST_EXP_JOBNAME is:

/u01/app/oracle/test_impdp_expdp/test_exp_jobname.dmp

Job ”HR“.”TEST_EXP_JOBNAME“ successfully completed at 22:56:28

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMPIN\\‘PK_PRIMARY\\‘” dumpfile=test_exp_jobname.dmp job_name=test_exp_jobname

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 22:57:02 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39000: bad dump file specification

ORA-31641: unable to create dump file “/u01/app/oracle/test_impdp_expdp/test_exp_jobname.dmp”

ORA-27038: created file already exists

Additional information: 1

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMPIN\\‘PK_PRIMARY\\‘“ dumpfile=test_exp_jobname.dmp job_name=test_exp_jobname REUSE_DUMPFILES=Y

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:16:05 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting ”HR“.”TEST_EXP_JOBNAME“: hr/********@jiagulun tables=student directory=TEST_IMPDP_EK_PRIMARY\\‘ dumpfile=test_exp_jobname.dmp job_name=test_exp_jobname REUSE_DUMPFILES=Y

Estimate in progress using BLOCKS method...

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 64 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX

Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported ”HR“.”STUDENT“5.937 KB 3 rows

Master table ”HR“.”TEST_EXP_JOBNAME“ successfully loaded/unloaded

******************************************************************************

Dump file set for HR.TEST_EXP_JOBNAME is:

/u01/app/oracle/test_impdp_expdp/test_exp_jobname.dmp

Job ”HR“.”TEST_EXP_JOBNAME“ successfully completed at 23:16:19

[oracle@localhost test_impdp_expdp]$ exp hr/hr@jiagulun TABLES=STUDENT DIRECTORY=test_impdp_etion.dmp

LRM-00101: unknown parameter name ‘DIRECTORY‘

EXP-00019: failed to process parameters, type ‘EXP HELP=Y‘ for help

EXP-00000: Export terminated unsuccessfully

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMP id <2” dumpfile=test_exp_query.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:17:57 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMP id <2“ dumpfile=test_exp_query.dmp reuse_dumpfile=y

LRM-00101: unknown parameter name ‘reuse_dumpfile‘

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMP id <2” dumpfile=test_exp_query.dmp reuse_dumpfiles=y

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:18:28 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMP id <2“ dumpfile=test_exp_query_1.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:18:56 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun directory=TEST_IMPDP_EXPDP query=s=test_exp_query_1.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:19:11 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun directory=TEST_IMPDP_EXPDP query=s=test_exp_query_1.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:19:37 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun directory=TEST_IMPDP_EXPDP query=se=test_exp_query_1.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:21:12 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMP id \\<2” dumpfile=test_exp_query_1.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:21:41 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMP dumpfile=test_exp_query_1.dmp

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:26:04 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMPery_1.dmp query=STUDENT:“WHERE ID < 2”

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:28:16 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMPery_1.dmp query=STUDENT:“WHERE ID \\< 2”

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:28:23 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-39001: invalid argument value

ORA-39035: Data filter SUBQUERY has already been specified.

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun tables=student directory=TEST_IMPery_1.dmp query=STUDENT:\\“WHERE ID \\< 2\\”

--通过上面的错误可以知道符号需要被转义和query的使用方式

Export: Release 11.2.0.1.0 - Production on Wed Jan 21 23:28:30 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “HR”.“SYS_EXPORT_TABLE_01”: hr/********@jiagulun tables=student directory=TEST_IMPDry_1.dmp query=STUDENT:“WHERE ID < 2”

Estimate in progress using BLOCKS method...

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 64 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX

Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT

Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS

Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS

. . exported “HR”.“STUDENT”5.906 KB 1 rows

Master table “HR”.“SYS_EXPORT_TABLE_01” successfully loaded/unloaded

******************************************************************************

Dump file set for HR.SYS_EXPORT_TABLE_01 is:

/u01/app/oracle/test_impdp_expdp/test_exp_query_1.dmp

Job “HR”.“SYS_EXPORT_TABLE_01” successfully completed at 23:28:40

WRL_TYPE

--------------------

WRL_PARAMETER

--------------------------------------------------------------------------------

STATUS

------------------

file

/u01/app/oracle/admin/jiagulun/wallet

CLOSED

数据泵的导入:

1,content:指定要加载的数据, 其中有效关键字值为: (ALL), DATA_ONLY 和 METADATA_ONLY,当设置content为ALL 时,将加载对象定义及其所有数据;

DATA_ONLY时,只加载对象数据;为METADATA_ONLY时,只加载对象定义 。

2,estimate:估算所占用磁盘空间分方法.默认值是BLOCKS

3,remap_schema:用于将对象从一个用户下导入到另一个用户下。

4,remap_tablespace:用于将对象从一个表空间下导入到另一个表空间下。

5,remap_datafile:用于在不同文件系统的平台间,切换数据文件路径。

remap_achema:导入

[oracle@localhost test_impdp_expdp]$ expdp hr/hr@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_01.dmp schemas= hr

Export: Release 11.2.0.1.0 - Production on Thu Jan 22 00:59:42 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “HR”.“SYS_EXPORT_SCHEMA_01”: hr/********@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_01.dmp schemas=

Estimate in progress using BLOCKS method...

[oracle@localhost test_impdp_expdp]$ impdp test1/test1@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_01.dmpREMAP_SCHEMA=HR:TEST1

Import: Release 11.2.0.1.0 - Production on Thu Jan 22 01:10:11 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Master table “TEST1”.“SYS_IMPORT_FULL_01” successfully loaded/unloaded

Starting “TEST1”.“SYS_IMPORT_FULL_01”: test1/********@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_01.dmp REMAP_SCHEMA=HR:TEST1

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

remap_tablespace导入

通过remap_tablespace来变换表所属表空间:SQL>select segment_name,segment_type,tablespace_name from user_extents ;SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME-------------------------------------------------------------------------------- ------------------ ------------------------------REGIONS TABLE EXAMPLELOCATIONS TABLE EXAMPLEDEPARTMENTS TABLE EXAMPLEJOBS TABLE EXAMPLEEMPLOYEES TABLE EXAMPLEJOB_HISTORYTABLE EXAMPLEDEPT TABLE USERSDROPPED_OBJ TABLE USERSTEST_JOBTABLE USERSSTUDENT TABLE TEST_TRAN_TSADDRESS TABLE TEST_TRAN_TS

[oracle@localhost test_impdp_expdp]$ expdp \\‘sys/oracle@jiagulun as sysdba\\‘ directory=test_impdp_expdp dumpfile=exp_04.dmp tablespaces=users--导出表空间

Export: Release 11.2.0.1.0 - Production on Thu Jan 22 01:20:04 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Starting “SYS”.“SYS_EXPORT_TABLESPACE_01”: “sys/********@jiagulun AS SYSDBA” directory=test_impdp_expdp dumpfile=exp_02.dmp tablespaces=users

Estimate in progress using BLOCKS method...

SQL>drop table student purge;

Table dropped.--之所以要先删除再导入表是因为在一个数据库中一个用户中的对象是唯一的,所以先删除再导入

SQL>drop table address purge;

Table dropped.

SQL>commit;

Commit complete.

[oracle@localhost test_impdp_expdp]$ impdp \\‘sys/oracle@jiagulun as sysdba\\‘ directory=test_impdp_expdp dumpfile=exp_04.dmp REMAP_TABLESPACE=test_tran_ts:users--导入表空间到test_tran_ts

Import: Release 11.2.0.1.0 - Production on Thu Jan 22 01:28:45 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Master table “SYS”.“SYS_IMPORT_FULL_01” successfully loaded/unloaded

Starting “SYS”.“SYS_IMPORT_FULL_01”: “sys/********@jiagulun AS SYSDBA” directory=test_impdp_expdp dumpfile=exp_02.dmp REMAP_TABLESPACE=users:test_tran_ts

Processing object type TABLE_EXPORT/TABLE/TABLE

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

. . imported “HR”.“ADDRESS”5.476 KB 2 rows

. . imported “HR”.“STUDENT”5.937 KB 3 rows

Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX

SQL>select segment_name,segment_type,tablespace_name from user_extents ;SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME-------------------------------------------------------------------------------- ------------------ ------------------------------REGIONS TABLE EXAMPLELOCATIONS TABLE EXAMPLEDEPARTMENTS TABLE EXAMPLEJOBS TABLE EXAMPLEEMPLOYEES TABLE EXAMPLEJOB_HISTORYTABLE EXAMPLESTUDENT TABLE USERSADDRESS TABLE USERS

为了把用户按表空间归类,需要把用户所有的当前数据转移到另一个表空间里,那么可以使用impdp的remap_tablespace参数。下面就这一内容进行实验。

SQL>select du.username,du.default_tablespace,du.temporary_tablespace from dba_users du where du.username=‘HR‘;USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE------------------------------ ------------------------------ ------------------------------HR USERS TEMP2

SQL>select segment_name,segment_type,tablespace_name from user_extents where rownum < 10;SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME-------------------------------------------------------------------------------- ------------------ ------------------------------REGIONS TABLE EXAMPLELOCATIONS TABLE EXAMPLEDEPARTMENTS TABLE EXAMPLEJOBS TABLE EXAMPLEEMPLOYEES TABLE EXAMPLEJOB_HISTORYTABLE EXAMPLESTUDENT TABLE USERSADDRESS TABLE USERSDEPT TABLE USERS9 rows selected

SQL>

[oracle@localhost test_impdp_expdp]$ expdp system/oracle@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_03.dmp schemas=hr

Export: Release 11.2.0.1.0 - Production on Thu Jan 22 02:22:28 2015

--导出hr用户对象信息,使用system导出的更加的全

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

[oracle@localhost test_impdp_expdp]$ impdp system/oracle@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_03.dmp remap_tablespace=users:test_tran_ts--导入hr用户中是users表空间的数据到test_tran_ts表空间中

Import: Release 11.2.0.1.0 - Production on Thu Jan 22 05:33:10 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

SQL>select segment_name,segment_type,tablespace_name from user_extents where rownum < 10;SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME-------------------------------------------------------------------------------- ------------------ ------------------------------REGIONS TABLE EXAMPLELOCATIONS TABLE EXAMPLEDEPARTMENTS TABLE EXAMPLEJOBS TABLE EXAMPLEEMPLOYEES TABLE EXAMPLEJOB_HISTORYTABLE EXAMPLESTUDENT TABLE USERSADDRESS TABLE USERSDEPT TABLE USERS9 rows selected--会发现表所在表空间并没有变化,是因为原来的已经存在不会覆盖

SQL>select du.username,du.default_tablespace,du.temporary_tablespace from dba_users du where du.username=‘HR‘;USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE------------------------------ ------------------------------ ------------------------------HR USERS TEMP2注意:经过导入后,用户test_user的缺省表空间被改成了remap_tablespace的目的表空间, 但是这里没有变化也是因为已经存在了。把表和用户删除了,就会发现他们的表空间变额

SQL>drop table student;

Table dropped.

SQL>drop table address;

Table dropped.

SQL>commit;

Commit complete.

SQL>purge recyclebin

2 ;

[oracle@localhost test_impdp_expdp]$ impdp system/oracle@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_03.dmp remap_tablespace=users:test_tran_ts

Import: Release 11.2.0.1.0 - Production on Thu Jan 22 05:48:49 2015

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Master table “SYSTEM”.“SYS_IMPORT_FULL_01” successfully loaded/unloaded

Starting “SYSTEM”.“SYS_IMPORT_FULL_01”: system/********@jiagulun directory=TEST_IMPDP_EXPDP dumpfile=exp_03.dmp remap_tablespace=users:test_tran_ts

Processing object type SCHEMA_EXPORT/USER

ORA-31684: Object type USER:“HR” already exists--由于存在所以直接跳过

Processing object type SCHEMA_EXPORT/SYSTEM_GRANT

Processing object type SCHEMA_EXPORT/ROLE_GRANT

Processing object type SCHEMA_EXPORT/DEFAULT_ROLE

Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE

ORA-31684: Object type SEQUENCE:“HR”.“EMPLOYEES_SEQ” already exists

ORA-31684: Object type SEQUENCE:“HR”.“DEPARTMENTS_SEQ” already exists

ORA-31684: Object type SEQUENCE:“HR”.“LOCATIONS_SEQ” already exists

Processing object type SCHEMA_EXPORT/CLUSTER/CLUSTER

ORA-31684: Object type CLUSTER:“HR”.“CLUSTER1” already exists

Processing object type SCHEMA_EXPORT/CLUSTER/INDEX

ORA-39111: Dependent object type INDEX:“HR”.“CLUSTER_INDEX” skipped, base object type CLUSTER:“HR”.“CLUSTER1” already exists

Processing object type SCHEMA_EXPORT/TABLE/TABLE

ORA-39151: Table “HR”.“COUNTRIES” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“REGIONS” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“LOCATIONS” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“DEPARTMENTS” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“JOBS” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“EMPLOYEES” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“JOB_HISTORY” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“DEPT” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“DROPPED_OBJ” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

ORA-39151: Table “HR”.“TEST_JOB” exists. All dependent metadata and data will be skipped due to table_exists_action of skip

Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

. . imported “HR”.“ADDRESS”5.476 KB 2 rows

. . imported “HR”.“STUDENT”5.937 KB 3 rows

Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT

.. . . . . . . . ..

SQL>select segment_name,segment_type,tablespace_name from user_extents ;SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME-------------------------------------------------------------------------------- ------------------ ------------------------------STUDENT TABLE TEST_TRAN_TSADDRESS TABLE TEST_TRAN_TSCLUSTER1 CLUSTER USERS--你会发现他们的表空间变化了。

注意:一个用户对象是唯一的,即使在不同的表空间中也是一样的

SQL>create table test1(id number);--默认是使用sys

Table created.

SQL>create table test1(id number) tablespace test_tran_ts;--使用test_tran_ts

create table test1(id number) tablespace test_tran_ts

*

ERROR at line 1:

ORA-00955: name is already used by an existing object

SQL>

篇5:Oracle备份与恢复案例数据库教程

oracle|备份|恢复

一. 理解什么是数据库恢复

当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失,因此当发生上述故障后,希望能重构这个完整的数据库,该处理称为数据库恢复。恢复过程大致可以分为复原(Restore)与恢复(Recover)过程。

数据库恢复可以分为以下两类:

1.1实例故障的一致性恢复

当实例意外地(如掉电、后台进程故障等)或预料地(发出SHUTDOUM ABORT语句)中止时出现实例故障,此时需要实例恢复。实例恢复将数据库恢复到故障之前的事务一致状态。如果在在线后备发现实例故障,则需介质恢复。在其它情况Oracle在下次数据库起动时(对新实例装配和打开),自动地执行实例恢复。如果需要,从装配状态变为打开状态,自动地激发实例恢复,由下列处理:

1) 为了解恢复数据文件中没有记录的数据,进行向前滚。该数据记录在在线日志,

包括对回滚段的内容恢复。

2) 回滚未提交的事务,按步1重新生成回滚段所指定的操作。

3) 释放在故障时正在处理事务所持有的资源。

4) 解决在故障时正经历一阶段提交的任何悬而未决的分布事务。

1.2介质故障或文件错误的不一致恢复

介质故障是当一个文件、一个文件的部分或磁盘不能读或不能写时出现的故障。文件错误一般指意外的错误导致文件被删除或意外事故导致文件的不一致。这种状态下的数据库都是不一致的,需要DBA手工来进行数据库的恢复,这种恢复有两种形式,决定于数据库运行的归档方式和备份方式。

(1) 完全介质恢复可恢复全部丢失的修改。一般情况下需要有数据库的备份且数据库运行在归档状态下并且有可用归档日志时才可能。对于不同类型的错误,有不同类型的完全恢复可使用,其决定于毁坏文件和数据库的可用性。

(2) 不完全介质恢复是在完全介质恢复不可能或不要求时进行的介质恢复。重构受损的数据库,使其恢复介质故障前或用户出错之前的一个事务一致性状态。不完全介质恢复有不同类型的使用,决定于需要不完全介质恢复的情况,有下列类型:基于撤消、基于时间和基于修改的不完全恢复。

挥诔废(CANCEL)恢复:在某种情况,不完全介质恢复必须被控制,DBA可撤消在指定点的操作。基于撤消的恢复地在一个或多个日志组(在线的或归档的)已被介质故障所破坏,不能用于恢复过程时使用,所以介质恢复必须控制,以致在使用最近的、未损的日志组于数据文件后中止恢复操作。

挥谑奔(TIME)和基于修改(SCN)的恢复:如果DBA希望恢复到过去的某个指定点,是一种理想的不完全介质恢复,一般发生在恢复到某个特定操作之前,恢复到如意外删除某个数据表之前。

第二章. 数据库恢复案例测试环境

2.1 数据库环境

以下的所有案例都是通过测试经过,环境为:

OS:Windows Server

DB:Oracle 816

DBNAME:TEST

数据文件:

SQL>select file#,status,enabled,name from v$datafile;

FILE# STATUS ENABLED    NAME

----------------------------------------------------------------

1 SYSTEM READ WRITE D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF

2 ONLINE READ WRITE D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF

3 ONLINE READ WRITE D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF

4 ONLINE READ WRITE D:\\Oracle\\ORADATA\\TEST\\TEMP01.DBF

5 ONLINE READ WRITE D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF

6 ONLINE READ WRITE D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF

控制文件:

SQL>select * from v$controlfile;

STATUS NAME

---------------------------------------------------------------------

D:\\Oracle\\ORADATA\\TEST\\CONTROL01.CTL

D:\\Oracle\\ORADATA\\TEST\\CONTROL02.CTL

D:\\Oracle\\ORADATA\\TEST\\CONTROL03.CTL

联机日志:

SQL>select * from v$logfile;

GROUP# STATUS    MEMBER

---------------------------------------------------------------------

1   STALE    D:\\Oracle\\ORADATA\\TEST\\REDO01.LOG

2             D:\\Oracle\\ORADATA\\TEST\\REDO02.LOG

3   STALE    D:\\Oracle\\ORADATA\\TEST\\REDO03.LOG

2.2 数据库备份脚本

冷备份脚本:

rem    script.:coldbak.sql

rem    creater:chenjiping

rem    date:5.8.

rem    desc:offline full backup database

--connect database

connect internal/password;

--shutdown database

shutdown immediate;

--Copy Data file

!xcopy d:\\Oracle\\oradata\\test\\*.dbf d:\\database/H/R;

--Copy Control file

!xcopy d:\\Oracle\\oradata\\test\\*.ctl d:\\database/H/R;

--Copy Log file

!xcopy d:\\Oracle\\oradata\\test\\*.log d:\\database/H/R;

--startup database

startup;

说明:

1、以上脚本在数据库关闭状态下备份数据库所有的数据文件,联机日志,控制文件(在一个目

录下),如果成功备份,所有文件是一致的;

2、没有备份参数文件,参数文件可以另外备份,没有必要每次都备份,只需要在改变设置后备份一次;

3、如果以上命令没有成功依次执行,那么备份将是无效的,如连接数据库不成功,那么肯定关闭数据库也不成功,那么备份则无效;

4、冷备份建议下人工干预下执行。

数据库OS热全备份脚本

rem    script.:hotbak.sql

rem    creater:chenjiping

rem    date:5.8.2003

rem    desc:backup all database datafile in archive

--connect database

connect internal/password;

--archive

alter system archive log current;

--start

alter tablespace system begin backup;

!xcopy d:\\Oracle\\oradata\\test ystem01.dbf d:\\databak/H/R;

alter tablespace system end backup;

alter tablespace rbs begin backup;

!xcopy d:\\Oracle\\oradata\\test\\rbs01.dbf d:\\databak/H/R;

alter tablespace rbs end backup;

alter tablespace users begin backup;

!xcopy d:\\Oracle\\oradata\\test\\users01.dbf d:\\databak/H/R;

alter tablespace users end backup;

alter tablespace tools begin backup;

!xcopy d:\\Oracle\\oradata\\test\\tools01.dbf d:\\databak/H/R;

alter tablespace tools end backup;

alter tablespace indx begin backup;

!xcopy d:\\Oracle\\oradata\\test\\indx01.dbf d:\\databak/H/R;

alter tablespace indx end backup;

--end

--bak control file

--binary

alter database backup controlfile to 'd:\\databak\\controlbinbak.000';

--ascii

alter database backup controlfile to trace;

alter system archive log current;

说明:

1、热备份必须在数据库归档方式下才可以运行;

2、以上脚本可以在数据库运行状态下备份数据库所有的数据文件(除了临时数据文件),没有必要备份联机日志;

3、归档日志至少需要一次完整备份之后的所有日志;

4、如果以上命令没有成功依次执行,那么备份也是无效的,如连接数据库不成功,那么备份则无效。

RMAN备份只讲叙有恢复目录的情况,如果没有恢复目录,情形大致相似。以下是RMAN的热备份全备份的脚本:

#  script.:bakup.rcv

#  creater:chenjiping

#  date:5.8.2003

#  desc:backup all database datafile in archive with rman

# connect database

connect rcvcat rman/rman@back;

connect target internal/virpure;

# start backup database

run{

allocate channel c1 type disk;

backup full tag 'dbfull' format 'd:\\backup\\full%u_%s_%p' database

include current controlfile;

sql 'alter system archive log current';

release channel c1;

}

# end

说明:

1、数据库必须运行在归档模式下;

2、RMAN将自动备份数据文件,运行可靠;

3、归档日志另外备份处理,但至少需要保存一次备份来的日志;

4、没有必要用RMAN做冷备份,效果不好。

以上举例说明了数据库的恢复案例的测试环境与部分备份测试脚本,其它的备份脚本可以根据以上脚本演变而来或在案例中加以说明。

数据库的自动实例将不加以说明,这里只举例说明媒体错误或人为错误造成的恢复可能。

以上包括以下案例都是在WINDOWS+Oracle816上测试验证的,在不同的操作系统与不同的数据库版本中略有差别。

第三章. 了解与恢复相关的信息

1、理解报警日志文件

报警日志文件一般记载了数据库的启动/关闭信息,归档信息,备份信息,恢复信息,常见错误信息,部分数据库修改记录等。一般令名规则为Alrt.log或Alrt.log,如我的测试数据库的报警日志文件的名称为testalrt.log。

报警日志文件的路径是根据初始化参数background_dump_dest来决定的,如在我的机器上,该参数值为 D:\\Oracle\\admin\\test\\bdump,那么,你就可以在该路径下找到该文件。

2、后台进程跟踪文件

后台进程跟踪文件的路径与报警日志文件的路径一致,在某些情况下,你可以通过后台跟踪文件的信息了解更多的需要恢复的信息。如在数据库需要恢复的时候,报警日志文件中常有这样的语句:

Errors in file D:\\Oracle\\admin\\test\\bdump\\testDBW0.TRC:

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

通过提示的DBWR跟踪文件,可以查询到更详细的信息。

3、v$recover_file与v$recovery_log

这是两个动态性能视图,可以在mount下查看,通过这两个视图,你可以了解详细的需要恢复的数据文件与需要使用到的归档日志。

第四章. 数据库恢复案例

4.1非归档模式下的备份与恢复

备份方案:采用OS冷备份

1. 连接数据库并创建测试表

SQL>connect internal/password as sysdba;

Connected.

SQL>create table test(a int);

Table created

SQL>insert into test values(1);

1 row inserted

SQL>commit;

Commit complete

2. 备份数据库

SQL>@coldbak.sql 或在DOS下 svrmgrl @coldbak.sql

3. 再插入记录

SQL>insert into test values(2);

1 row inserted

SQL>commit;

Commit complete

SQL>select * from test;

A

-------------------

1

2

4. 关闭数据库

SQL>shutdown immediate;

Database closed.

Database dismounted.

Oracle instance shut down.

5. 毁坏一个或多个数据文件,如删除user01.dbf

C:\\>del D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF

模拟媒体毁坏。

6. 重新启动数据库,会发现如下错误

SQL>startup

Oracle instance started.

Total System Global Area 10364 bytes

Fixed Size                   70924 bytes

Variable Size             85487616 bytes

Database Buffers          16384000 bytes

Redo Buffers                 77824 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

ORA-01110: data file 3: 'D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF'

在报警文件中,会有更详细的信息

Errors in file D:\\Oracle\\admin\\test\\bdump\\testDBW0.TRC:

ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

ORA-01110: data file 3: 'D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

7. 拷贝备份复原到原来位置(restore过程)

C:\\>xcopy d:\\database\\*.* d:\\Oracle\\oradata\\test/H/R/S

8. 打开数据库,检查数据

SQL>alter database open;

Database altered.

SQL>select * from test;

A

---------------------------------------

1

这里可以发现,数据库恢复成功,但在备份之后与崩溃之前的数据丢失了。

说明:

1、非归档模式下的恢复方案可选性很小,一般情况下只能有一种恢复方式,就是数据库的冷备

份的完全恢复,仅仅需要拷贝原来的备份就可以(restore),不需要recover;

2、这种情况下的恢复,可以完全恢复到备份的点上,但是可能是丢失数据的,在备份之后与崩溃之前的数据将全部丢失;

3、不管毁坏了多少数据文件或是联机日志或是控制文件,都可以通过这个办法恢复,因为这个恢复过程是Restore所有的冷备份文件,而这个备份点上的所有文件是一致的,与最新的数据库没有关系,就好比把数据库又放到了一个以前的“点”上;

4、对于非归档模式下,最好的办法就是采用OS的冷备份,建议不要用RMAN来作冷备份,效果不好,因为RMAN不备份联机日志,restore不能根本解决问题;

5、如果没有备份联机日志,如RMAN的备份,就需要利用不完全恢复(until cancel)的方法来重新创建联机日志文件。

4.2归档模式下丢失或损坏一个数据文件

4.2.1 OS备份方案

在归档方式下损坏或丢失一个数据文件,如果存在相应的备份与该备份以来的归档日志,恢复还是比较简单的,可以作到尽量少的Down机时间,并能作到数据库的完全恢复。

1、连接数据库,创建测试表并插入记录

SQL>connect internal/password as sysdba;

Connected.

SQL>create table test(a int) tablespace users;

Table created

SQL>insert into test values(1);

1 row inserted

SQL>commit;

Commit complete

2、备份数据库

SQL>@hotbak.sql 或在DOS下 svrmgrl @hotbak.sql

3、继续在测试表中插入记录

SQL>insert into test values(2);

1 row inserted

SQL>commit;

Commit complete

SQL>select * from test;

A

--------------------------------------

1

2

SQL>alter system switch logfile;

System altered.

SQL>alter system switch logfile;

System altered.

4、关闭数据库,模拟丢失数据文件

SQL>shutdown immediate;

Database closed.

Database dismounted.

Oracle instance shut down

C:\\>del D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF

模拟媒体毁坏。

5、启动数据库错误,脱机该数据文件:

SQL>startup

Oracle instance started.

Total System Global Area 102020364 bytes

Fixed Size                   70924 bytes

Variable Size             85487616 bytes

Database Buffers          16384000 bytes

Redo Buffers                 77824 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

ORA-01110: data file 3: 'D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF'

还可以查看报警文件(见上一个恢复案例)或动态视图v$recover_file

如SQL>select * from v$recover_file;

FILE# ONLINE ERROR                  CHANGE#   TIME

---------- ------- ------------------ ---------- -----------

3 ONLINE                       1013500  2003-05-07

脱机数据文件

SQL>alter database datafile 3 offline drop;

Database altered.

6、打开数据库,拷贝备份回来(restore),恢复(recover)该数据文件,并联机:

SQL>alter database open;

Database altered.

拷贝备份从备份处

copy d:\\databak\\ users01.dbf d:\\Oracle\\oradata\\test;

恢复该数据文件

SQL>recover datafile 3;

ORA-00279: change 1053698 generated at 05/07/2003 17:51:26 needed for

thread 1

ORA-00289: suggestion :

D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00304.ARC

ORA-00280: change 1053698 for thread 1 is in sequence #304

Specify log: {=suggested | filename | AUTO | CANCEL}

AUTO

ORA-00279: change 1053701 generated at 05/07/2003 17:51:39 needed for

thread 1

ORA-00289: suggestion : D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00305.ARC

ORA-00280: change 1053701 for thread 1 is in sequence #305

ORA-00278: log file 'D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00304.ARC' no longer needed for this recovery Log applied.

Media recovery complete.

恢复成功,联机该数据文件

SQL>alter database datafile 3 online;

Database altered.

7、检查数据库的数据(完全恢复)

SQL>select * from test;

A

--------------------------------

1

2

说明:

1、采用热备份,需要运行在归档模式下,可以实现数据库的完全恢复,也就是说,从备份后到数据库崩溃时的数据都不会丢失;

2、可以采用全备份数据库的方式备份,对于特殊情况,也可以只备份特定的数据文件,如只备份用户表空间(一般情况下对于某些写特别频繁的数据文件,可以单独加大备份频率);

3、如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复方法(第5步中需要对数据文件一一脱机,第6步中需要对数据文件分别恢复),也可以采用整个数据库的恢复方法;

4、如果是系统表空间的损坏,不能采用此方法。

4.2.2 RMAN备份方案

RMAN也可以进行联机备份,而且备份与恢复方法将比OS备份更简单可靠。

1、连接数据库,创建测试表并插入记录

SQL>connect internal/password as sysdba;

Connected.

SQL>create table test(a int) tablespace users;

Table created

SQL>insert into test values(1);

1 row inserted

SQL>commit;

Commit complete

2、备份数据库表空间users

C:\\>rman

Recovery Manager: Release 8.1.6.0.0 - Production

RMAN>connect rcvcat rman/rman@back

RMAN-06008: connected to recovery catalog database

RMAN>connect target internal/virpure

RMAN-06005: connected to target database: TEST (DBID=1788174720)

RMAN>run{

2>allocate channel c1 type disk;

3>backup tag 'tsuser' format 'd:\\backup\\tsuser_%u_%s_%p'

4>tablespace users;

5>release channel c1;

6>}

RMAN-03022: compiling command: allocate

RMAN-03023: executing command: allocate

RMAN-08030: allocated channel: c1

RMAN-08500: channel c1: sid=16 devtype=DISK

RMAN-03022: compiling command: backup

RMAN-03025: performing implicit partial resync of recovery catalog

RMAN-03023: executing command: partial resync

RMAN-08003: starting partial resync of recovery catalog

RMAN-08005: partial resync complete

RMAN-03023: executing command: backup

RMAN-08008: channel c1: starting full datafile backupset

RMAN-08502: set_count=5 set_stamp=494177612 creation_time=16-MAY-03

RMAN-08010: channel c1: specifying datafile(s) in backupset

RMAN-08522: input datafile fno=00003 name=D:\\Oracle\\ORADATA\\TEST\\USER01.DBF

RMAN-08013: channel c1: piece 1 created

RMAN-08503: piece handle=D:\\BACKUP\\TSUSER_05EN93AC_5_1 comment=NONE

RMAN-08525: backup set complete, elapsed time: 00:00:01

RMAN-03023: executing command: partial resync

RMAN-08003: starting partial resync of recovery catalog

RMAN-08005: partial resync complete

RMAN-03022: compiling command: release

RMAN-03023: executing command: release

RMAN-08031: released channel: c1

RMAN>

3、继续在测试表中插入记录

SQL>insert into test values(2);

1 row inserted

SQL>commit;

Commit complete

SQL>select * from test;

A

---------------------------------------

1

2

SQL>alter system switch logfile;

System altered.

SQL>r

1* alter system switch logfile;

System altered.

4、关闭数据库,模拟丢失数据文件

SQL>shutdown immediate;

Database closed.

Database dismounted.

Oracle instance shut down

C:\\>del D:\\Oracle\\ORADATA\\TEST\\USER01.DBF

5、启动数据库,检查错误

SQL>startup

Oracle instance started.

Total System Global Area 102020364 bytes

Fixed Size                   70924 bytes

Variable Size             85487616 bytes

Database Buffers          16384000 bytes

Redo Buffers                 77824 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 3 - see DBWR trace file

ORA-01110: data file 3: 'D:\\Oracle\\ORADATA\\TEST\\USER01.DBF'

6、先打开数据库

SQL>alter database datafile 3 offline drop;

Database altered.

SQL>alter database open;

Database altered.

7、恢复该表空间

恢复脚本可以是恢复单个数据文件

run{

allocate channel c1 type disk;

restore datafile 3;

recover datafile 3;

sql 'alter database datafile 3 online';

release channel c1;

}

也可以是,恢复表空间

run{

allocate channel c1 type disk;

restore tablespace users;

recover tablespace users;

sql 'alter database datafile 3 online';

release channel c1;

}

过程如下:

C:\\>rman

Recovery Manager: Release 8.1.6.0.0 - Production

RMAN>connect rcvcat rman/rman@back

RMAN-06008: connected to recovery catalog database

RMAN>connect target internal/virpure

RMAN-06005: connected to target database: TEST (DBID=1788174720)

RMAN>run{

2>allocate channel c1 type disk;

3>restore datafile 3;

4>recover datafile 3;

5>sql 'alter database datafile 3 online';

6>release channel c1;

7>}

//输出内容冗长,省略--编者

RMAN>

8、检查数据是否完整

SQL>alter database open;

Database altered.

SQL>select * from test;

A

---------------------------------------

1

2

说明:

1、RMAN也可以实现单个表空间或数据文件的恢复,恢复过程可以在mount下或open方式下,如果在open方式下恢复,可以减少down机时间;

2、如果损坏的是一个数据文件,建议offline并在open方式下恢复;

3、这里可以看到,RMAN进行数据文件与表空间恢复的时候,代码都比较简单,而且能保证备份与恢复的可靠性,所以建议采用RMAN的备份与恢复.

4.3丢失多个数据文件,实现整个数据库的恢复.

4.3.1 OS备份方案

OS备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复

1、连接数据库,创建测试表并插入记录

SQL>connect internal/password as sysdba;

Connected.

SQL>create table test(a int);

Table created

SQL>insert into test values(1);

1 row inserted

SQL>commit;

Commit complete

2、备份数据库,备份除临时数据文件后的所数据文件

SQL>@hotbak.sql 或在DOS下 svrmgrl @hotbak.sql

3、继续在测试表中插入记录

SQL>insert into test values(2);

1 row inserted

SQL>commit;

Commit complete

SQL>select * from test;

A

---------------------------------------

1

2

SQL>alter system switch logfile;

System altered.

SQL>alter system switch logfile;

System altered.

4、关闭数据库,模拟丢失数据文件

SQL>shutdown immediate;

Database closed.

Database dismounted.

Oracle instance shut down

C:\\>del D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF

C:\\>del D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF

C:\\>del D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF

C:\\>del D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF

模拟媒体毁坏(这里删除多个数据文件)

5、启动数据库,检查错误

SQL>STARTUP

Oracle instance started.

Total System Global Area 102020364 bytes

Fixed Size                   70924 bytes

Variable Size             85487616 bytes

Database Buffers          16384000 bytes

Redo Buffers                 77824 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

ORA-01110: data file 1: 'D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF'

详细信息可以查看报警文件

ORA-1157 signalled during: ALTER DATABASE OPEN...

Thu May 08 09:39:36 2003

Errors in file D:\\Oracle\\admin\\test\\bdump\\testDBW0.TRC:

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

ORA-01110: data file 1: 'D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

Thu May 08 09:39:36 2003

Errors in file D:\\Oracle\\admin\\test\\bdump\\testDBW0.TRC:

ORA-01157: cannot identify/lock data file 2 - see DBWR trace file

ORA-01110: data file 2: 'D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

Thu May 08 09:39:36 2003

Errors in file D:\\Oracle\\admin\\test\\bdump\\testDBW0.TRC:

ORA-01157: cannot identify/lock data file 5 - see DBWR trace file

ORA-01110: data file 5: 'D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

Thu May 08 09:39:36 2003

Errors in file D:\\Oracle\\admin\\test\\bdump\\testDBW0.TRC:

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file

ORA-01110: data file 6: 'D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

通过查询v$recover_file可以看到

SQL>select * from v$recover_file;

FILE# ONLINE ERROR                CHANGE# TIME

---------- ------- ------------------ ---------- -----------

1 ONLINE FILE NOT FOUND             0

2 ONLINE FILE NOT FOUND             0

5 ONLINE FILE NOT FOUND             0

6 ONLINE FILE NOT FOUND             0

有四个数据文件需要恢复

6、拷贝备份回到原地点(restore),开始恢复数据库(recover)

restore过程:

C:\\>copy D:\\DATABAK YSTEM01.DBF D:\\Oracle\\ORADATA\\TEST\\

C:\\>copy D:\\DATABAK\\TEST\\INDX01.DBF D:\\Oracle\\ORADATA\\TEST\\

C:\\>copy D:\\DATABAK\\TEST\\TOOLS01.DBF D:\\Oracle\\ORADATA\\TEST\\

C:\\>copy D:\\DATABAK\\TEST\\RBS01.DBF.DBF D:\\Oracle\\ORADATA\\TEST\\

Recover过程:

SQL>recover database;

ORA-00279: change 1073849 generated at 05/08/2003 08:58:35 needed for thread 1

ORA-00289: suggestion : D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00311.ARC

ORA-00280: change 1073849 for thread 1 is in sequence #311

Specify log: {=suggested | filename | AUTO | CANCEL}

auto

ORA-00279: change 1073856 generated at 05/08/2003 09:03:27 needed for thread 1

ORA-00289: suggestion : D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00312.ARC

ORA-00280: change 1073856 for thread 1 is in sequence #312

ORA-00278: log file 'D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00311.ARC' no

longer needed for this recovery

ORA-00279: change 1073858 generated at 05/08/2003 09:11:43 needed for thread 1

ORA-00289: suggestion : D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00313.ARC

ORA-00280: change 1073858 for thread 1 is in sequence #313

ORA-00278: log file 'D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00312.ARC' no

longer needed for this recovery

ORA-00279: change 1073870 generated at 05/08/2003 09:11:46 needed for thread 1

ORA-00289: suggestion : D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00314.ARC

ORA-00280: change 1073870 for thread 1 is in sequence #314

ORA-00278: log file 'D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00313.ARC' no

longer needed for this recovery

Log applied.

Media recovery complete.

7、打开数据库,检查数据库的数据(完全恢复)

SQL>alter database open;

Database altered.

SQL>select * from test;

A

---------------------------------------

1

2

说明:

1、只要有备份与归档存在,就可以实现数据库的完全恢复(不丢失数据);

2、适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复;

3、恢复过程在mount下进行,如果恢复成功,再打开数据库,down机时间可能比较长一些。

4.3.2 RMAN备份方案

RMAN备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复

1、连接数据库,创建测试表并插入记录

SQL>connect internal/password as sysdba;

Connected.

SQL>create table test(a int);

Table created

SQL>insert into test values(1);

1 row inserted

SQL>commit;

Commit complete

2、备份数据库

DOS下 C:>\\ rman cmdfile=bakup.rcv msglog=backup.log;

以下是backup.log内容。

Recovery Manager: Release 8.1.6.0.0 - Production

RMAN>#    script.:bakup.rcv

2>#    creater:chenjiping

3>#    date:5.8.2003

4>#    desc:backup all database datafile in archive with rman

5>

6>#connect database

7>connect rcvcat rman/rman@back;

8>connect target internal/virpure;

9>

10>#start backup database

11>run{

12>allocate channel c1 type disk;

13>backup full tag 'dbfull' format 'd:\\backup\\full%u_%s_%p' database

14>include current controlfile;

15>sql 'alter system archive log current';

16>release channel c1;

17>}

18>#end

19>

RMAN-06008: connected to recovery catalog database

RMAN-06005: connected to target database: TEST (DBID=1788174720)

RMAN-03022: compiling command: allocate

RMAN-03023: executing command: allocate

RMAN-08030: allocated channel: c1

RMAN-08500: channel c1: sid=15 devtype=DISK

RMAN-03022: compiling command: backup

RMAN-03023: executing command: backup

RMAN-08008: channel c1: starting full datafile backupset

RMAN-08502: set_count=4 set_stamp=494074368 creation_time=15-MAY-03

RMAN-08010: channel c1: specifying datafile(s) in backupset

RMAN-08522: input datafile fno=00002 name=D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF

RMAN-08522: input datafile fno=00001 name=D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF

RMAN-08011: including current controlfile in backupset

RMAN-08522: input datafile fno=00005 name=D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF

RMAN-08522: input datafile fno=00004 name=D:\\Oracle\\ORADATA\\TEST\\TEMP01.DBF

RMAN-08522: input datafile fno=00006 name=D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF

RMAN-08522: input datafile fno=00003 name=D:\\Oracle\\ORADATA\\TEST\\USER01.DBF

RMAN-08013: channel c1: piece 1 created

RMAN-08503: piece handle=D:\\BACKUP\\FULL04EN5UG0_4_1 comment=NONE

RMAN-08525: backup set complete, elapsed time: 00:01:16

RMAN-03023: executing command: partial resync

RMAN-08003: starting partial resync of recovery catalog

RMAN-08005: partial resync complete

RMAN-03022: compiling command: sql

RMAN-06162: sql statement: alter system archive log current

RMAN-03023: executing command: sql

RMAN-03022: compiling command: release

RMAN-03023: executing command: release

RMAN-08031: released channel: c1

Recovery Manager complete.

到这里表示备份成功。

3、继续在测试表中插入记录

SQL>insert into test values(2);

1 row inserted

SQL>commit;

Commit complete

SQL>select * from test;

A

---------------------------------------

1

2

SQL>alter system switch logfile;

System altered.

SQL>alter system switch logfile;

System altered.

4、关闭数据库,模拟丢失数据文件

SQL>shutdown immediate;

Database closed.

Database dismounted.

Oracle instance shut down

C:\\>del D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF

C:\\>del D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF

C:\\>del D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF

C:\\>del D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF

5、启动数据库,检查错误

SQL>STARTUP

Oracle instance started.

Total System Global Area 102020364 bytes

Fixed Size                   70924 bytes

Variable Size             85487616 bytes

Database Buffers          16384000 bytes

Redo Buffers                 77824 bytes

Database mounted.

ORA-01157: cannot identify/lock data file 1 - see DBWR trace file

ORA-01110: data file 1: 'D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF'

查询v$recover_file

SQL>select * from v$recover_file;

FILE# ONLINE ERROR                CHANGE# TIME

---------- ------- ------------------ ---------- -----------

1 ONLINE FILE NOT FOUND             0

2 ONLINE FILE NOT FOUND             0

5 ONLINE FILE NOT FOUND             0

6 ONLINE FILE NOT FOUND             0

可以知道有四个数据文件需要恢复.

6、利用RMAN进行恢复

C:\\>rman

Recovery Manager: Release 8.1.6.0.0 - Production

RMAN>connect rcvcat rman/rman@back

RMAN-06008: connected to recovery catalog database

RMAN>connect target internal/virpure

RMAN-06005: connected to target database: TEST (DBID=1788174720)

RMAN>run{

2>allocate channel c1 type disk;

3>restore database;

4>recover database;

5>sql 'alter database open';

6>release channel c1;

7>}

RMAN-03022: compiling command: allocate

RMAN-03023: executing command: allocate

RMAN-08030: allocated channel: c1

RMAN-08500: channel c1: sid=17 devtype=DISK

RMAN-03022: compiling command: restore

RMAN-03025: performing implicit partial resync of recovery catalog

RMAN-03023: executing command: partial resync

RMAN-08003: starting partial resync of recovery catalog

RMAN-08005: partial resync complete

RMAN-03022: compiling command: IRESTORE

RMAN-03023: executing command: IRESTORE

RMAN-08016: channel c1: starting datafile backupset restore

RMAN-08502: set_count=4 set_stamp=494074368 creation_time=15-MAY-03

RMAN-08089: channel c1: specifying datafile(s) to restore from backup set

RMAN-08523: restoring datafile 00001 to D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF

RMAN-08523: restoring datafile 00002 to D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF

RMAN-08523: restoring datafile 00003 to D:\\Oracle\\ORADATA\\TEST\\USER01.DBF

RMAN-08523: restoring datafile 00004 to D:\\Oracle\\ORADATA\\TEST\\TEMP01.DBF

RMAN-08523: restoring datafile 00005 to D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF

RMAN-08523: restoring datafile 00006 to D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF

RMAN-08023: channel c1: restored backup piece 1

RMAN-08511: piece handle=D:\\BACKUP\\FULL04EN5UG0_4_1 tag=DBFULL params=NULL

RMAN-08024: channel c1: restore complete

RMAN-03023: executing command: partial resync

RMAN-08003: starting partial resync of recovery catalog

RMAN-08005: partial resync complete

RMAN-03022: compiling command: recover

RMAN-03022: compiling command: recover(1)

RMAN-03022: compiling command: recover(2)

RMAN-03022: compiling command: recover(3)

RMAN-03023: executing command: recover(3)

RMAN-08054: starting media recovery

RMAN-03022: compiling command: recover(4)

RMAN-06050: archivelog thread 1 sequence 327 is already on disk as file D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00327.ARC

RMAN-06050: archivelog thread 1 sequence 328 is already on disk as file D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00328.ARC

RMAN-06050: archivelog thread 1 sequence 329 is already on disk as file D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00329.ARC

RMAN-06050: archivelog thread 1 sequence 330 is already on disk as file D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00330.ARC

RMAN-03023: executing command: recover(4)

RMAN-08515: archivelog filename=D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00327.ARC thread=1 sequence=327

RMAN-08515: archivelog filename=D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00328.ARC thread=1 sequence=328

RMAN-08055: media recovery complete

RMAN-03022: compiling command: sql

RMAN-06162: sql statement: alter database open

RMAN-03023: executing command: sql

RMAN-03022: compiling command: release

RMAN-03023: executing command: release

RMAN-08031: released channel: c1

RMAN>

7、检查数据库的数据(完全恢复)

SQL>select * from test;

A

---------------------------------------

1

2

说明:

1、只要有备份与归档存在,RMAN也可以实现数据库的完全恢复(不丢失数据);

2、同OS备份数据库恢复,适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复;

3、目标数据库在mount下进行,如果恢复成功,再打开数据库;

4、RMAN的备份与恢复命令相对比较简单并可靠,建议有条件的话,都采用RMAN进行数据库的备份,

4.4 不完全恢复案例

4.4.1 OS备份下的基于时间的恢复

不完全恢复可以分为基于时间的恢复,基于改变的恢复与基于撤消的恢复,这里已基于时间的恢复为例子来说明不完全恢复过程。

基于时间的恢复可以不完全恢复到现在时间之前的某一个时间,对于某些误操作,如删除了一个数据表,可以在备用恢复环境上恢复到表的删除时间之前,然后把该表导出到正式环境,避免一个人为的错误。

1、连接数据库,创建测试表并插入记录:

SQL>connect internal/password as sysdba;

Connected.

SQL>create table test(a int);

Table created

SQL>insert into test values(1);

1 row inserted

SQL>commit;

Commit complete

2、备份数据库,这里最好备份所有的数据文件,包括临时数据文件:

SQL>@hotbak.sql 或在DOS下 svrmgrl @hotbak.sql

或冷备份也可以

3、删除测试表,假定删除前的时间为T1,在删除之前,便于测试,继续插入数据并应用到归

档。

SQL>insert into test values(2);

1 row inserted

SQL>commit;

Commit complete

SQL>select * from test;

A

---------------------------------------

1

2

SQL>alter system switch logfile;

Statement processed.

SQL>alter system switch logfile;

Statement processed.

SQL>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2003-05-21 14:43:01

SQL>drop table test;

Table dropped.

4、准备恢复到时间点T1,找回删除的表,先关闭数据库:

SQL>shutdown immediate;

Database closed.

Database dismounted.

Oracle instance shut down.

5、拷贝刚才备份的所有数据文件回来

C:\\>copy D:\\DATABAK\\*.DBF D:\\Oracle\\ORADATA\\TEST\\

6、启动到mount下

SQL>startup mount;

Oracle instance started.

Total System Global Area 102020364 bytes

Fixed Size                   70924 bytes

Variable Size             85487616 bytes

Database Buffers          16384000 bytes

Redo Buffers                 77824 bytes

Database mounted.

7、开始不完全恢复数据库到T1时间

SQL>recover database until time '2003-05-21:14:43:01';

ORA-00279: change 30944 generated at 05/21/2003 14:40:06 needed for thread 1

ORA-00289: suggestion : D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00191.ARC

ORA-00280: change 30944 for thread 1 is in sequence #191

Specify log: {=suggested | filename | AUTO | CANCEL}

auto

Log applied.

Media recovery complete.

8、打开数据库,检查数据

SQL>alter database open resetlogs;

Database altered.

SQL>select * from test;

A

---------------------------------------

1

2

说明:

1、不完全恢复最好备份所有的数据,冷备份亦可,因为恢复过程是从备份点往后恢复的,如果因为其中一个数据文件的时间戳(SCN)大于要恢复的时间点,那么恢复都是不可能成功的;

2、不完全恢复有三种方式,过程都一样,仅仅是recover命令有所不一样,这里用基于时间的恢复作为示例;

3、不完全恢复之后,都必须用resetlogs的方式打开数据库,建议马上再做一次全备份,因为resetlogs之后再用以前的备份恢复是很难了;

4、以上是在删除之前获得时间,但是实际应用中,很难知道删除之前的实际时间,但可以采用大致时间即可,或可以采用分析日志文件(logmnr),取得精确的需要恢复的时间;

5、一般都是在测试机后备用机器上采用这种不完全恢复,恢复之后导出/导入被误删的表回生产系统.

4.4.2 RMAN备份下的基于改变的恢复

以上用OS备份说明了一个基于时间的恢复,现在用RMAN说明一个基于改变的恢复

1、连接数据库,创建测试表并插入记录

SQL>connect internal/password as sysdba;

Connected.

SQL>create table test(a int);

Table created

SQL>insert into test values(1);

1 row inserted

SQL>commit;

Commit complete

2、备份数据库

C:\\>rman

Recovery Manager: Release 8.1.6.0.0 - Production

RMAN>connect rcvcat rman/rman@back

RMAN-06008: connected to recovery catalog database

RMAN>connect target internal/virpure

RMAN-06005: connected to target database: TEST (DBID=874705288)

RMAN>run{

2>allocate channel c1 type disk;

3>backup full tag 'dbfull' format 'd:\\backup\\full%u_%s_%p' database

4>include current controlfile;

5>sql 'alter system archive log current';

6>release channel c1;

7>}

//屏幕输出内容冗长,省略--编辑

RMAN>

3、删除测试表,在删除之前,便于测试,继续插入数据并应用到归档,并获取删除前的scn号。

SQL>insert into test values(2);

1 row inserted

SQL>commit;

Commit complete

SQL>select * from test;

A

---------------------------------------

1

2

SQL>alter system switch logfile;

Statement processed.

SQL>alter system switch logfile;

Statement processed.

SQL>select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe;

SCN

----------

31014

SQL>drop table test;

Table dropped.

4、准备恢复到SCN 31014,先关闭数据库,然后启动到mount下

SQL>shutdown immediate;

Database closed.

Database dismounted.

Oracle instance shut down.

SQL>startup mount;

5、开始恢复到改变点SCN 31014

RMAN>run{

2>     allocate channel c1 type disk;

3>     restore database;

4>     recover database until scn 31014;

5>     sql 'ALTER DATABASE OPEN RESETLOGS';

6>     release channel c1;

7>}

RMAN-03022: compiling command: allocate

RMAN-03023: executing command: allocate

RMAN-08030: allocated channel: c1

RMAN-08500: channel c1: sid=10 devtype=DISK

RMAN-03022: compiling command: restore

RMAN-03022: compiling command: IRESTORE

RMAN-03023: executing command: IRESTORE

RMAN-08016: channel c1: starting datafile backupset restore

RMAN-08502: set_count=1 set_stamp=494613682 creation_time=21-MAY-03

RMAN-08089: channel c1: specifying datafile(s) to restore from backup set

RMAN-08523: restoring datafile 00001 to D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF

RMAN-08523: restoring datafile 00002 to D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF

RMAN-08523: restoring datafile 00003 to D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF

RMAN-08523: restoring datafile 00004 to D:\\Oracle\\ORADATA\\TEST\\TEMP01.DBF

RMAN-08523: restoring datafile 00005 to D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF

RMAN-08523: restoring datafile 00006 to D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF

RMAN-08023: channel c1: restored backup piece 1

RMAN-08511: piece handle=D:\\BACKUP\\FULL01ENMD5I_1_1 tag=DBFULL params=NULL

RMAN-08024: channel c1: restore complete

RMAN-03023: executing command: partial resync

RMAN-08003: starting partial resync of recovery catalog

RMAN-08005: partial resync complete

RMAN-03022: compiling command: recover

RMAN-03022: compiling command: recover(1)

RMAN-03022: compiling command: recover(2)

RMAN-03022: compiling command: recover(3)

RMAN-03023: executing command: recover(3)

RMAN-08054: starting media recovery

RMAN-03022: compiling command: recover(4)

RMAN-06050: archivelog thread 1 sequence 191 is already on disk as file D:\\ORACL

E\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00191.ARC

RMAN-06050: archivelog thread 1 sequence 192 is already on disk as file D:\\ORACL

E\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00192.ARC

RMAN-03023: executing command: recover(4)

RMAN-08515: archivelog filename=D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00191.AR

C thread=1 sequence=191

RMAN-08515:archivelog filename=D:\\Oracle\\ORADATA\\TEST\\ARCHIVE\\TESTT001S00192.ARC

Thread=1 sequence=192

RMAN-08055: media recovery complete

RMAN-03022: compiling command: sql

RMAN-06162: sql statement: ALTER DATABASE OPEN RESETLOGS

RMAN-03023: executing command: sql

RMAN-03022: compiling command: release

RMAN-03023: executing command: release

RMAN-08031: released channel: c1

6、检查数据

Database altered.

SQL>select * from test;

A

---------------------------------------

1

2

可以看到,表依然存在。

说明:

1、RMAN也可以实现不完全恢复,方法比OS备份恢复的方法更简单可靠;

2、RMAN可以基于时间,基于改变与基于日志序列的不完全恢复,基于日志序列的恢复可以指定恢复到哪个日志序列,如

run {

allocate channel ch1 type disk;

allocate channel ch2 type 'sbt_tape';

set until logseq 1234 thread 1;

restore controlfile to '$Oracle_HOME/dbs/cf1.f' ;

replicate controlfile from '$Oracle_HOME/dbs/cf1.f';

alter database mount;

restore database;

recover database;

sql “ALTER DATABASE OPEN RESETLOGS”;

}

3、与所有的不完全恢复一样,必须在mount下,restore所有备份数据文件,需要resetlogs;

4、基于改变的恢复比基于时间的恢复更可靠,但是可能也更复杂,需要知道需要恢复到哪一个改变号(SCN),在正常生产中,获取SCN的办法其实也有很多,如查询数据库字典表(V$archived_log or v$log_history),或分析归档与联机日志(logmnr)等。

第五章 其它恢复案例

5.1 损坏联机日志的恢复方法

5.1.1 损坏非当前联机日志

大家都清楚,联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题。

1、启动数据库,遇到ORA-00312 or ORA-00313错误,如

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: 'D:\\Oracle\\ORADATA\\TEST\\REDO01.LOG'

从这里我们知道日志组1的数据文件损坏了

从报警文件可以看到更详细的信息

2、查看V$log视图

SQL>select group#,sequence#,archived,status from v$log;

GROUP#    SEQUENCE# ARCHIVED STATUS

---------- ---------- -------- ----------------

1         1   YES     INACTIVE

2         2   YES     INACTIVE

3         3   NO      CURRENT

可以知道,该组是非当前状态,而且已经归档。

3、用CLEAR命令重建该日志文件

SQL>alter database clear logfile group 1;

如果是该日志组还没有归档,则需要用

SQL>alter database clear unarchived logfile group 1;

4、打开数据库,重新备份数据库

SQL>alter database open;

说明:

1、如果损坏的是非当前的联机日志文件,一般只需要clear就可以重建该日志文件,但是如果该数据库处于归档状态但该日志还没有归档,就需要强行clear;

2、建议clear,特别是强行clear后作一次数据库的全备份;

3、此方法适用于归档与非归档数据库。

5.1.2 损坏当前联机日志

归档模式下当前日志的损坏有两种情况,

一、是数据库是正常关闭,日志文件中没有未决的事务需要实例恢复,当前日志组的损 坏就可以直接用alter database clear unarchived logfile group n来重建。

二、是日志组中有活动的事务,数据库需要媒体恢复,日志组需要用来同步,有两种补救办法:

A. 最好的办法就是通过不完全恢复,可以保证数据库的一致性,但是这种办法要求在归档方式下,并且有可用的备份

B. 通过强制性恢复,但是可能导致数据库不一致。

下面分别用来说明这两种恢复方法:

5.1.2.1 通过备份来恢复

1、打开数据库,会遇到一个类似的错误

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: 'D:\\Oracle\\ORADATA\\TEST\\REDO01.LOG'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志

SQL>select group#,sequence#,archived,status from v$log;

GROUP#    SEQUENCE# ARCHIVED STATUS

--------- ---------- -------- ----------------

1         1   NO      CURRENT

2         2   YES     INACTIVE

3         3   YES     INACTIVE

3、发现clear不成功

SQL>alter database clear unarchived logfile group 1;

alter database clear unarchived logfile group 1

*

ERROR at line 1:

ORA-01624: log 1 needed for crash recovery of thread 1

ORA-00312: online log 1 thread 1: 'D:\\Oracle\\ORADATA\\TEST\\REDO01.LOG'

4、拷贝有效的数据库的全备份,并不完全恢复数据库:

可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复

recover database until cancel

先选择auto,尽量恢复可以利用的归档日志,然后重新

recover database until cancel

这次输入cancel,完成不完全恢复,也就是说恢复两次。

如:

SQL>recover database until cancel;

Auto

……

SQL>recover database until cancel;

Cancel;

5、利用alter database open resetlogs打开数据库.

说明:

1、这种办法恢复的数据库是一致的不完全恢复,会丢失当前联机日志中的事务数据;

2、这种方法适合于归档数据库并且有可用的数据库全备份;

3、恢复成功之后,记得再做一次数据库的全备份;

4、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

5.1.2.2 如果没有备份,进行强制性恢复

1、打开数据库,会遇到一个类似的错误

ORA-00313: open failed for members of log group 1 of thread 1

ORA-00312: online log 1 thread 1: 'D:\\Oracle\\ORADATA\\TEST\\REDO01.LOG'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件

2、查看V$log,发现是当前日志

SQL>select group#,sequence#,archived,status from v$log;

GROUP# SEQUENCE# ARCHIVED STATUS

---------- ---------- -------- ----------------

1         1 NO      CURRENT

2         2 YES     INACTIVE

3         3 YES     INACTIVE

3、发现clear不成功

SQL>alter database clear unarchived logfile group 1;

alter database clear unarchived logfile group 1

*

ERROR at line 1:

ORA-01624: log 1 needed for crash recovery of thread 1

ORA-00312: online log 1 thread 1: 'D:\\Oracle\\ORADATA\\TEST\\REDO01.LOG'

4、把数据库down掉

SQL>shutdown immediate

5、在init.ora中加入如下参数

_allow_resetlogs_corruption=TRUE

6、重新启动数据库,利用until cancel恢复

SQL>recover database until cancel;

Cancel

如果出错,不再理会,发出

SQL>alter database open resetlogs;

7、数据库被打开后,马上执行一个full export

8、shutdown数据库,去掉_all_resetlogs_corrupt参数

9、重建库

10、import并完成恢复

11、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;

说明:

1、该恢复方法是没有办法之后的恢复方法,一般情况下建议不要采用,因为该方法可能导致数据库的不一致;

2、该方法也丢失数据,但是丢失的数据没有上一种方法的数据多,主要是未写入数据文件的已提交或未提交数据;

3、建议成功后严格执行以上的7到11步,完成数据库的检查与分析;

4、全部完成后做一次数据库的全备份;

5、建议联机日志文件一定要实现镜相在不同的磁盘上,避免这种情况的发生,因为任何数据的丢失对于生产来说都是不容许的。

5.2 损坏控制文件的恢复方法

5.2.1 损坏单个控制文件

损坏单个控制文件是比较容易恢复的,因为一般的数据库系统,控制文件都不是一个,而且所有的控制文件都互为镜相,只要拷贝一个好的控制文件替换坏的控制文件就可以了。

1、控制文件损坏,最典型的就是启动数据库出错,不能mount数据库

SQL>startup

ORA-00205: error in identifying controlfile, check alert log for more info

查看报警日志文件,有如下信息

alter database mount

Mon May 26 11:59:52 2003

ORA-00202: controlfile: 'D:\\Oracle\\oradata\\chen\\control01.ctl'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

2、停止数据库:

SQL>shutdown immediate

3、拷贝一个好的控制文件替换坏的控制文件或修改init.ora中的控制文件参数,取消这个坏的控制文件。

4、重新启动数据:

SQL>startup

说明:

1、损失单个控制文件是比较简单的,因为数据库中所有的控制文件都是镜相的,只需要简单的

拷贝一个好的就可以了;

2、建议镜相控制文件在不同的磁盘上;

3、建议多做控制文件的备份,长期保留一份由alter database backup control file to trace产生的控制文件的文本备份。

5.2.2 损坏全部控制文件

损坏多个控制文件,或者人为的删除了所有的控制文件,通过控制文件的复制已经不能解决问题,这个时候需要重新建立控制文件。

同时注意,alter database backup control file to trace可以产生一个控制文件的文本备份。

以下是详细重新创建控制文件的步骤:

1、关闭数据库

SQL>shutdown immediate;

2、删除所有控制文件,模拟控制文件的丢失

3、启动数据库,出现错误,并不能启动到mount下

SQL>startup

ORA-00205: error in identifying controlfile, check alert log for more info

查看报警日志文件,有如下信息

alter database mount

Mon May 26 11:53:15 2003

ORA-00202: controlfile: 'D:\\Oracle\\oradata\\chen\\control01.ctl'

ORA-27041: unable to open file

OSD-04002: unable to open file

O/S-Error: (OS 2) 系统找不到指定的文件。

4、关闭数据库

SQL>shutdown immediate;

5、在internal或sys下运行如下创建控制文件的脚本,注意完整列出联机日志或数据文件的路径,或修改由alter database backup control file to trace备份控制文件时产生的脚本,去掉多余的注释即可。

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE “TEST” NORESETLOGS NOARCHIVELOG

MAXLOGFILES 32

MAXLOGMEMBERS 2

MAXDATAFILES 254

MAXINSTANCES 1

MAXLOGHISTORY 226

LOGFILE

GROUP 1 'D:\\Oracle\\ORADATA\\TEST\\REDO01.LOG' SIZE 1M,

GROUP 2 'D:\\Oracle\\ORADATA\\TEST\\REDO02.LOG' SIZE 1M,

GROUP 3 'D:\\Oracle\\ORADATA\\TEST\\REDO03.LOG' SIZE 1M

DATAFILE

'D:\\Oracle\\ORADATA\\TEST YSTEM01.DBF',

'D:\\Oracle\\ORADATA\\TEST\\RBS01.DBF',

'D:\\Oracle\\ORADATA\\TEST\\USERS01.DBF',

'D:\\Oracle\\ORADATA\\TEST\\TEMP01.DBF',

'D:\\Oracle\\ORADATA\\TEST\\TOOLS01.DBF',

'D:\\Oracle\\ORADATA\\TEST\\INDX01.DBF'

CHARACTER SET ZHS16GBK;

-- Recovery is required if any of the datafiles are restored backups,

-- or if the last shutdown was not normal or immediate.

RECOVER DATABASE

--if the last shutdown was not normal or immediate

--noarchive

-- RECOVER DATABASE UNTIL CANCELUSING BACKUP CONTROLFILE

--archive

-- RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL

-- Database can now be opened normally.

ALTER DATABASE OPEN;

--if recover database until cancel

--ALTER DATABASE OPEN RESETLOGS;

6、如果没有错误,数据库将启动到open状态下。

说明:

1、重建控制文件用于恢复全部数据文件的损坏,需要注意其书写的正确性,保证包含了所有的数据文件与联机日志;

2、经常有这样一种情况,因为一个磁盘损坏,我们不能再恢复(store)数据文件到这个磁盘,因此在store到另外一个盘的时候,我们就必须重新创建控制文件,用于识别这个新的数据文件,这里也可以用这种方法用于恢复。

5.3 损坏回滚数据文件的恢复方法

回滚段表空间中的一个数据文件丢失或者损坏导致数据库无法识别它,在启动数据库的时候会出现ORA-1157, ORA-1110的错误,或者操作系统级别的错误,例如ORA-7360。在关闭数据库的时候(normal或者immediate)会出现ORA-1116, ORA-1110的错误,或者操作系统级别的错误,例如ORA-7368。

感谢Coolyl的辛勤工作,关于回滚段的大部分内容都是摘自他在itpub的文章。

5.3.1 损坏数据文件,但数据库处于Open状态

如果你发现有回滚段的数据文件丢失或者损坏了,而此时的数据库是处于打开的状态下并且在运行,就千万不要关闭数据库了,因为在大多数的情况下打开的时候比关闭的时候好解决问题一些。

一般也是存在有两种情况:

A、是offline丢失或损坏的数据文件,然后从一个备份中恢复,执行介质恢复以保持一致性。但是这种情况要求数据库是归档方式下才可以采用的。

B、是offline那个存在丢失或损坏的数据文件所在的整个回滚段表空间,然后删除整个回滚段表空间并重建,但是你必须要杀掉那些在回滚段中已经激活的用户进程才可以offline的。

通常第一种情况就比较简单实现,但是更多的用户事务将会出错并且回滚。

A的具体步骤:

1、offline丢失或损坏的数据文件

ALTER DATABASE DATAFILE '' OFFLINE;

2、从一个有效的备份中恢复。

3、执行以下查询:

SELECT V1.GROUP#, MEMBER, SEQUENCE#

FROM V$LOG V1, V$LOGFILE V2

WHERE V1.GROUP# = V2.GROUP# ;

这个将列出你的所有redolog文件以及它们所代表的sequence numbers。

4、恢复数据文件。

RECOVER DATAFILE ''

5、确信你应用了所有的redolog文件,直至出现提示信息“Media recovery complete”。

6、online那个数据文件。

ALTER DATABASE DATAFILE '' ONLINE;

B的具体步骤:

1、offline存在丢失或损坏的数据文件的回滚段表空间中的所有回滚段。

ALTER ROLLBACK SEGMENT OFFLINE;

2、检测当然回滚段的状态。

SELECT SEGMENT_NAME, STATUS FROM DBA_ROLLBACK_SEGS

WHERE TABLESPACE_NAME = '';

3、删除所有offline的回滚段

DROP ROLLBACK SEGMENT ;

4、处理那些online状态的回滚段。

重新执行第二步的查询

如果你已经执行过offline操作的回滚段状态仍然是online,则说明这个回滚段内有活动的事务。你要接着查询

SELECT SEGMENT_NAME, XACTS ACTIVE_TX, V.STATUS

FROM V$ROLLSTAT V, DBA_ROLLBACK_SEGS

WHERE TABLESPACE_NAME = '' AND SEGMENT_ID = USN;

如果没有返回结果,则证明存在丢失或损坏的数据文件的回滚段表空间中的所有回滚段都已经被offline了,然后重新执行第二步,第三步。如果查询有结果返回,则状态应该是“PENDING OFFLINE”.接着查看ACTIVE_TX列,如果值为0,则表明此回滚段中已经没有未处理的事务了,很快就会被offline的,然后等它offline后重新执行2,3步后跳至第六步。如果值大于0,则继续到第五步。

5、强制那些包含活动事务的回滚段offline。

活动的事务应该被提交或者回滚,执行下面的查询看看哪些用户占用了回滚段:

SELECT S.SID, S.SERIAL#, S.USERNAME, R.NAME “ROLLBACK”

FROM V$SESSION S, V$TRANSACTION T, V$ROLLNAME R

WHERE R.NAME IN ('

', ... ,

'

')

AND S.TADDR = T.ADDR AND T.XIDUSN = R.USN;

最好能直接联系到那些user让他们自己去回滚或者提交事务,如果不能做到的话,那就只能强制性的杀掉进程了。

ALTER SYSTEM KILL SESSION ', ';

杀掉进程后再过一段时间后回滚段会自动清除那些事务,然后就可以回到第二步继续查询了。

6、删除回滚段。

DROP TABLESPACE INCLUDING CONTENTS;

7、重建回滚段并online它们。

说明:

1、数据库如果是open状态,就可以直接在open状态下解决问题,没有必要停下数据库,增加down机时间;

2、不管上上面那种恢复方法都是正常性的恢复,不会引起数据的不一致或错误。

5.3.2数据库关闭,但是数据文件中没有活动事务

这种情况下最简单的方法就是offline drop掉这个坏了的或者丢失的数据文件,然后以restricted模式打开数据库然后删除并且重建包含损坏文件的回滚段表空间。

具体步骤如下:

1、确定数据库是正常的关闭的。方法是可以去查看alert文件,到最后看是否有如下信息:

“alter database dismount

Completed: alter database dismount”

如果有的话,就证明数据库是正常关闭的,否则就不能用这个方法去恢复。

2、修改init参数文件,移去ROLLBACK_SEGMENTS中包含的损坏数据文件的回滚段表空间的回滚段,如果你不能确定哪些回滚段是坏的,简单的方法是你可以注释掉整个ROLLBACK_SEGMENTS。

3、以restricted模式去mount数据库。

STARTUP RESTRICT MOUNT

4、offline drop掉那个坏的数据文件

ALTER DATABASE DATAFILE '' OFFLINE DROP;

5、打开数据库

ALTER DATABASE OPEN

如果你看到如下信息“Statement processed”,则跳到第7步,如果你看到ORA-604, ORA-376, and ORA-1110的错误信息,继续第6步。

6、   正常的关闭数据库,然后在init文件中注释掉ROLLBACK_SEGMENTS,并加入隐含参数

_corrupted_rollback_segments = ( ,...., )

然后以restricted模式打开数据库

STARTUP RESTRICT

7、删除掉那个包含损坏文件的回滚段表空间。

DROP TABLESPACE INCLUDING CONTENTS;

8、重建回滚段表空间,记得创建后要把回滚段都online。

9、重新使数据库对所有用户可用。

ALTER SYSTEM DISABLE RESTRICTED SESSION;

10、然后正常关闭数据库,修改init文件,如果开始只是注释掉了ROLLBACK_SEGMENTS的,就去掉注释即可,如果加了隐含参数的,注释掉它,并在ROLLBACK_SEGMENTS加入所有的回滚段。

11、正常启动数据库:

Startup

说明:

1、这种方法的前提条件是数据库是正常关闭(不是abort)可用;

2、这种方法是正常方法,不会引起数据错误。

5.3.3 数据库关闭,数据文件中有活动事务,没有可用备份。

一般造成这种原因的情况是采用了shutdown abort或其它原因异常关机(如断电)导致的。

1、开启一个事务

SQL>set transaction use rollback segment rbs0;

Transaction set.

SQL>insert into test (a) values (1);

1 row created.

2、异常关闭

SQL>shutdown abort;

Oracle instance shut down.

3、删除rbs的一个数据文件

C:>del D:\\Oracle\\oradata\\chen\\rbs01.

4、修改INIT.ora :

rollback_segments=(system)

添加_corrupted_rollback_segments=(rbs0,rbs1,rbs2……)

5、SQL>Startup mount

6、SQL>alter database datafile 'd:\\Oracle\\oradata\\t8i\\rbs01.dbf' offline drop;

数据库已更改。

7、SQL>recover database ;

完成介质恢复。

8、SQL>alter database open ;

数据库已更改。

9、SQL>select * from v$rollname;

USN  NAME

----  -------

0     SYSTEM

10、SQL>select segment_name,tablespace_name,status

FROM dba_rollback_segs;

SEGMENT_NAME TABLESPACE_NAME    STATUS

----------- ------ ------------------------------------

SYSTEM      SYSTEM             ONLINE

RBS0        RBS                NEEDS RECOVERY

RBS1        RBS                NEEDS RECOVERY

RBS2        RBS                NEEDS RECOVERY

11、SQL>drop rollback segment rbs0;

重算段已丢弃。

SQL>drop rollback segment rbs1;

重算段已丢弃。

SQL>drop rollback segment rbs2;

重算段已丢弃。

12、SQL>select segment_name,tablespace_name,status

FROM dba_rollback_segs;

SEGMENT_NAME TABLESPACE_NAME STATUS

-------------------------------------

SYSTEM      SYSTEM          ONLINE

13、SQL>drop tablespace rbs including contents;

表空间已丢弃。

14、重建新的回滚表空间及回滚段,并联机。

15、SQL>shutdown abort

16、再修改INIT.ora :

rollback_segments=(rbs0,rbs1,rbs2)

将_corrupted_rollback_segments=(rbs0,rbs1,rbs2)去掉。

17、SQL>startup

说明:

1、这种办法是万不得以的时候使用的方法,如果有备份,都建议从备份上进行恢复;

2、这种方法恢复的数据库,可能会引起数据库的数据错误;

3、恢复成功以后,建议exp/imp数据,并重新分析检查数据库。

5.3.4 数据库关闭,数据文件中有活动事务,从备份恢复

1、从一个有效的备份中恢复损坏的数据文件。

2、mount数据库。

3、执行以下查询:

SELECT FILE#, NAME, STATUS FROM V$DATAFILE;

如果发现要恢复的文件是offline状态的话,要先online它:

ALTER DATABASE DATAFILE '' ONLINE;

4、执行以下查询

SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#

FROM V$LOG V1, V$LOGFILE V2

WHERE V1.GROUP# = V2.GROUP# ;

这个将列出redlog文件所代表的sequence和first change numbers。

5、如果数据库是非归档情况下,执行以下查询:

SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;

如果CHANGE#大于最小的redolog文件的FIRST_CHANGE#,则数据文件可以被恢复,记得在应用日志的时候要把所有redolog文件全部应用一遍。

如果CHANGE#小于最小的redolog文件的FIRST_CHANGE#,则数据文件就不可以被恢复了,这时候你要从一个有效的全备份中去恢复数据库了,如果没有全备份的话,那你就只能把数据库强制打开到一个不一致的状态去exp出数据,然后重新建库导入数据,因为这种方式的恢复Oracle是不推荐用户自己做的,所以这里我就不详细说明了。

6、恢复数据文件:

RECOVER DATAFILE ''

7、确信你应用了所有的redolog文件,直至出现提示信息“Media recovery complete”。

8、打开数据库。

说明:

1、这种方法要求在归档有备份的方式下进行,而且是建议方式;

2、这种方法不会导致数据库的错误。

5.4 损坏临时数据文件的恢复方法

临时数据文件的恢复是比较简单的,因为临时文件中不涉及到其它的有用的数据,所以可以删除后重建。

1、关闭数据库:

SQL>shutdown immediate

2、删除临时数据文件,模拟媒体失败;

3、启动数据库,检测到文件错误;

4、脱机该数据文件:

SQL>alter database datafile '文件名全名' offline drop;

5、打开数据库

SQL>alter database open

6、删除该临时表空间

SQL>drop tablespace temp(或其它临时表空间名称);

7、重新创建该表空间,并重新分配给用户。

说明:

1、临时数据文件是非重要文件,不保存永久数据,可以随时删除重建,不影响数据库的数据安全;

2、如果重新建立以后,别忘了重新分配给用户。

第六章. 常见恢复误区

1、可以不需要备份,只有归档就能进行数据库的向前的恢复

答:这个在Oracle 9i以前起码是不可能的,在别的数据库我也没有听说过,不完全恢复的主要思路是利用不完全点之前的备份,加上归档日志,恢复到不完全恢复点,9i中出现了一个flashback的特性,这个特性的使用,也是有很多局限的。

2、进行不完全恢复只需要拷贝一个需要恢复的备份数据文件

答:不完全恢复需要拷贝所有的数据文件,最好包括临时数据文件在内,否则需要另外的处理,如果有一个数据文件的SCN大于不完全恢复点,那么这个恢复都将是失败的。

3、使用RMAN目录与目标数据库在同一数据库能很好进行数据库的恢复

答:使用恢复目录与目标数据库在同一个数据库中,将存在很大的恢复局限,如该数据库的系统数据文件的损害,数据库根本不能open,那么RMAN也就无法连接恢复目录,也就不存在恢复了。

第七章. 小结

这里我们反复演示了多种情况下的恢复方案,通过这些演示,我们应该掌握了如下内容:

1、利用OS与RMAN进行各种常规备份与恢复。

2、熟悉没有备份或简单的非常规备份与恢复的方法。

篇6:备份向导数据库教程

我们知道备份和恢复数据库是DBA 的主要工作,但是如果您是一名DBA 新手,我们建议您在没有搞清楚到底如何进行之前,不妨使用备份向导,

备份向导数据库教程

。它能告诉您在备份时应该干些什么使用备份向导的步骤如下:

(1) 启动SQL Server Enterprise Manager, 单击要登录的服务器,此时在主菜单上选择Tools, 在弹出菜单上选择Wizards 后弹出Select Wizard 对话框,如图15-7 所示。

图15-7 Select Wizard 对话框

(2) 单击Management 左边的“+” 标志,然后双击Backup Wizard, 打开Welcometo Create Database Backup Wizard 对话框,如图15-8 所示。

(3) 单击“下一步”按钮,打开Select Database to Backup 对话框,选择要进行备份的数据库,如图15-9 所示。

(4) 单击“下一步”按钮,打开Type Name and Description for Backup 对话框,

为备份输入名字和描述。如图15-10 所示。

(5) 单击“下一步”按钮,打开Select Type of Backup 对话框,选择您所进行的备份的类型,如图15-11 所示。

(6) 单击“下一步”按钮,打开Select Backup Destination and Action 对话框, 选择备份时使用的备份设备,并决定是覆盖原设备还是添加到原设备当中。如图15-12 所示。

图15-11 Select Type of Backup 对话框

(7) 单击“下一步”按钮,打开Backup verification and scheduling 对话框,选择checking media set 表示检查备份介质以确信是否到期而可以被覆盖,如图15-13 所示。

(8) 单击“下一步”按钮,打开Completing the Create Backup wizard 对话框,如图15-14。

(9) 单击“完成”,完成数据库备份。

篇7:InnoDB 中文参考手册 6 备份和恢复 InnoDB 数据库数据库教程

备份|参考|参考手册|恢复|数据|数据库|中文

InnoDB 中文参考手册 --- 犬犬(心帆)翻译 6 备份和恢复 InnoDB 数据库

安全的数据库管理就是使用正规的数据备份,

InnoDB Hot Backup 是一个在线备份工具,你可以在 InnoDB 数据库运行时使用它来实现在线备份。InnoDB Hot Backup 不需要你关闭你的服务器也不需要加任何锁或影响其它普通的数据操作。InnoDB Hot Backup 是一个非免费的附加工具,它的费用为每 MySQL 服务器每年 400 欧元。浏览网页 InnoDB Hot Backup homepage 可获得更多的信息以及程序屏幕截图。

如果你可以关闭你的 MySQL 服务,那么可以通过下面几个步骤进行数据库的“二进制”备份:

关闭 MySQL 数据库服务,并确定在关闭时没有发生任何错误 将你的所有数据文件复制到一个安全的地方 将所有的 InnoDB 日志文件复制到一个安全的地方 将 my.cnf 配置文件复制到一个安全的地方 将所有的 InnoDB 表 .frm 文件复制到一个安全的地方

在需要高性能的数据库服务站点上,可以通过 MySQL 的复制特性来保持数据库的一个副本,MySQL 的复制特性同样适用于 InnoDB 表类型。

除了上面描述的二进制备份方式之外,最好定期地使用 mysqldump 转储数据表。原因是二进制文件可能会在你未注意时而被破坏,而表转储(dump)文件是以文本文件方式保存的,它与二进制文件相比更简单、有更好的的可读性。因为转储文件更简单所以更容易发现表损坏, 重要数据损环的可能性很小。

一个好的主意就是在对数据库做二进制备份的同时也做一个转储(dump)备份。为了得到一致的数据快照,必须关闭所有客户端的连接。然后就可以进行二进制备份,这样你就有了数据一致的两种格式的备份。

如了实现通过上面所述的二进制备份方法将 InnoDB 数据库恢复到当前状态,必须打开 MySQL 的二进制日志(binlogging)开关。这样你就可以二进制日志 与备份数据配合实现分时间点的恢复:

mysqlbinlog yourhostname-bin.123 | mysql

为了恢复一个崩溃了的 MySQL 服务进程,你所能做的唯一一件事就是重新启动。InnoDB 将自动地检查日志并完成数据库的前滚(roll-forward)到当前状态。同时,InnoDB 将自动回滚崩溃前未提交的事务。在恢复过程中,mysqld 将显示如下所示的提示:

heikki@donna:~/mysql-3.23.48/sql>mysqld 04 23:08:31 InnoDB: Database was not shut down normally. InnoDB: Starting recovery from log files... InnoDB: Starting log scan based on checkpoint at InnoDB: log sequence number 0 177573790 InnoDB: Doing recovery: scanned up to log sequence number 0 177638912 InnoDB: Doing recovery: scanned up to log sequence number 0 177704448 InnoDB: Doing recovery: scanned up to log sequence number 0 177769984 InnoDB: Doing recovery: scanned up to log sequence number 0 177835520 InnoDB: Doing recovery: scanned up to log sequence number 0 177901056 InnoDB: Doing recovery: scanned up to log sequence number 0 177966592 InnoDB: Doing recovery: scanned up to log sequence number 0 178032128 InnoDB: Doing recovery: scanned up to log sequence number 0 178097664 InnoDB: Doing recovery: scanned up to log sequence number 0 178163200 InnoDB: Doing recovery: scanned up to log sequence number 0 178228736 InnoDB: After this prints a line for every 10th scan sweep: InnoDB: Doing recovery: scanned up to log sequence number 0 178884096 ... InnoDB: Doing recovery: scanned up to log sequence number 0 19330 InnoDB: Doing recovery: scanned up to log sequence number 0 193957376 InnoDB: Doing recovery: scanned up to log sequence number 0 194612736 020204 23:08:40 InnoDB: Starting an apply batch of log records to the database. .. InnoDB: Progress in percents: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 7 3 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 InnoDB: Apply batch completed InnoDB: Doing recovery: scanned up to log sequence number 0 195268096 InnoDB: Doing recovery: scanned up to log sequence number 0 195923456 ... InnoDB: Doing recovery: scanned up to log sequence number 0 203132416 InnoDB: Doing recovery: scanned up to log sequence number 0 203787776 InnoDB: Doing recovery: scanned up to log sequence number 0 204443136 InnoDB: 5 uncommitted transaction(s) which must be rolled back InnoDB: Trx id counter is 0 129792 InnoDB: Starting rollback of uncommitted transactions InnoDB: Rolling back trx with id 0 129400 InnoDB: Rolling back of trx id 0 129400 completed InnoDB: Rolling back trx with id 0 129217 InnoDB: Rolling back of trx id 0 129217 completed InnoDB: Rolling back trx with id 0 129098 InnoDB: Rolling back of trx id 0 129098 completed InnoDB: Rolling back trx with id 0 128743 InnoDB: Rolling back of trx id 0 128743 completed InnoDB: Rolling back trx with id 0 127939 InnoDB: Rolling back of trx id 0 127939 completed InnoDB: Rollback of uncommitted transactions completed 020204 23:08:51 InnoDB: Starting an apply batch of log records to the database. .. InnoDB: Progress in percents: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 7 3 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 InnoDB: Apply batch completed InnoDB: Last MySQL binlog file offset 0 40418561, file name ./donna-bin.001 020204 23:08:53 InnoDB: Flushing modified pages from the buffer pool... 020204 23:09:03 InnoDB: Started mysqld: ready for connections

如果数据库遭到损坏或磁盘失败,则不得不从一个备份文件恢复,

在损坏的情况下,首先可以恢复一个未损坏的备份文件。然后依照 MySQL 手册提示从一般的日志文件中恢复数据。

在某些数据库损坏的情况下,可能通过转储(dump)、撤销(drop)和重新建立一个或多个损坏的表就足够了。可怜通过 CHECK TABLE SQL 命令检查一个受损的表,虽然 CHECK TABLE 并不能发现所有的损坏类型。你可能使用 innodb_tablespace_monitor 来检查数据文件时的文件空间管理的完整性。

在某些情况下,数据库页面显示损坏,而实际上是由于操作系统的文件高速缓冲损坏,而磁盘上的数据文件还是好的。 这时最好先重起你的系统。这可能解决数据库页面错误。

6.1 强制(Forcing)恢复

如果出现数据库页面损坏,可以通过 SELECT INTO OUTFILE 从数据库中转储出表数据,通常大部分的数据并未受损坏。 但是这些损坏可能引起 SELECT * FROM table 或 InnoDB 后台操作崩溃或中断(assert),甚至是 InnoDB 的前滚(roll-forward)恢复崩溃。从 InnoDB version 3.23.44 开始,在 my.cnf 中有个设置选项可以强制 InnoDB 启动,以及防止后台操作的运行,因而你可以转储数据。例如,你可以 my.cnf 在中加入如下设置:

set-variable = innodb_force_recovery = 4

innodb_force_recovery 代替选择将在下面列出。 这个参数不能用于数据库的其它方面!当设置值大于 0 时,作为安全尺度,InnoDB 禁止用户使用 INSERT, UPDATE, 或 DELETE 。

从 3.23.53 和 4.0.4 开始,即使强制恢复被使用你也可以使用 DROP 或 CREATE 一个表。 如果你确定表如引起回滚崩溃,你可以移除(drop)它。你也可以通过这个停止一个因导入大量数据或 ALTER TABLE 而引起的失控(runaway)回滚。你可以杀死 mysqld 进程,并使用 my.cnf 设置项 innodb_force_recovery=3 不使用回滚。然后就可以 DROP 那个引起失控(runaway)回滚的表。

下面较大的数意味着包含所有较低数所对就的安全防范。为了能够转储表设置至少为 4 ,这是相对安全的,仅仅只有一些损坏的页面数据掉失。Option 6 is more dramatic, because database pages are left in an obsolete state, which in turn may introduce more corruption into B-trees and other database structures. 1 (SRV_FORCE_IGNORE_CORRUPT) 即使发现一个错误也启动服务;试着使用 SELECT * FROM table 跳过损坏的索引记录和页面,这将帮助转储表。 2 (SRV_FORCE_NO_BACKGROUND) prevent the main thread from running: 如果在清理过程中将发生崩溃,这将预防它。 3 (SRV_FORCE_NO_TRX_UNDO) 恢复时不运行事务回滚。 4 (SRV_FORCE_NO_IBUF_MERGE) 防止插入缓冲区的归并操作:如果他们将引起崩溃,最好不要操作他们;不要考虑表统计(table statistics)。 5 (SRV_FORCE_NO_UNDO_LOG_SCAN) 当启动数据库时不撤销日志(undo logs):InnoDB 将未完成的事务已提交。 6 (SRV_FORCE_NO_LOG_REDO) do not do the log roll-forward in connection with recovery.

6.2 检查点(Checkpoints)

InnoDB 通过调用一个模糊的检查点来实现检查点机制。InnoDB 以很小的批量从缓冲池中刷新修改了的数据库页面。这就不需要在一个批量中刷新整个缓冲池,因这个实话上将可能停止用户 SQL 语句运行进程一段时间。

In crash recovery InnoDB 在崩溃修复时会检查记录在日志文件中的检查点标签。它知道,在标签前所有对数据库的修改已被记录到数据库的磁盘镜像中。然后 InnoDB 扫描日志文件中检查点后面的日志并将修改记入数据库。

InnoDB 以一个环形方式记录日志文件。所有使缓冲池中的数据库页面与磁盘镜像不相同已提交了的修改必须记录在日志文件中,以防 InnoDB 需要恢复。 这就意味着 InnoDB 以环形方式重新启用一个日志文件,它必须确定将被重新使用的日志文件中的操作日志结果已被磁盘镜像文件包含。用另一句话来说就是,InnoDB 必须时常地建立检查点并将修改了的数据库页面更新到磁盘中。

上面所述要以解释为什么将日志文件设置和大一点可以减少因建立检查点所用的磁盘 I/O。 这就可以理解设置日志文件的总尺寸与缓冲池一样大或更大。大的日志文件的缺点就是当进行崩溃修复时将需要很长的时间,因为有更多的操作日志需要更新到数据库中。

篇8:sql数据库备份和恢复常用操作

1.新建一个同名的数据库

2.再停掉sql server(注意不要分离数据库)

3.用原数据库的数据文件覆盖掉这个新建的数据库

4.再重启sql server

5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名)

6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用

数据库的脚本创建一个新的数据库,并将数据导进去就行了.

USE MASTER

GO

SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE

GO

UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'

Go

sp_dboption '置疑的数据库名', 'single user', 'true'

Go

DBCC CHECKDB('置疑的数据库名')

Go

update sysdatabases set status =28 where name='置疑的数据库名'

Go

sp_configure 'allow updates', 0 reconfigure with override

Go

sp_dboption '置疑的数据库名', 'single user', 'false'

Go

篇9:sql数据库备份和恢复常用操作

事情的起因

昨天,系统管理员告诉我,我们一个内部应用数据库所在的磁盘空间不足了。我注意到数据库事件日志文件XXX_Data.ldf文件已经增长到了3GB,于是我决意缩小这个日志文件。经过收缩数据库等操作未果后,我犯了一个自进入行业以来的最大最愚蠢的错误:竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道:“无论如何都要保证数据库日志文件存在,它至关重要”,甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的。我真是不知道我那时候是怎么想的?!

这下子坏了!这个数据库连不上了,企业管理器在它的旁边写着“(置疑)”。而且最要命的,这个数据库从来没有备份了。我唯一找得到的是迁移半年前的另外一个数据库服务器,应用倒是能用了,但是少了许多记录、表和存储过程。真希望这只是一场噩梦!

没有效果的恢复步骤

附加数据库

_Rambo讲过被删除日志文件中不存在活动日志时,可以这么做来恢复:

1,分离被置疑的数据库,可以使用sp_detach_db

2,附加数据库,可以使用sp_attach_single_file_db

但是,很遗憾,执行之后,SQL Server质疑数据文件和日志文件不符,所以无法附加数据库数据文件。

DTS数据导出

不行,无法读取XXX数据库,DTS Wizard报告说“初始化上下文发生错误”。

紧急模式

怡红公子讲过没有日志用于恢复时,可以这么做:

1,把数据库设置为emergency mode

2,重新建立一个log文件

3,把SQL Server 重新启动一下

4,把应用数据库设置成单用户模式

5,做DBCC CHECKDB

6,如果没有什么大问题就可以把数据库状态改回去了,记得别忘了把系统表的修改选项关掉

我实践了一下,把应用数据库的数据文件移走,重新建立一个同名的数据库XXX,然后停掉SQL服务,把原来的数据文件再覆盖回来。之后,按照怡红公子的步骤走。

但是,也很遗憾,除了第2步之外,其他步骤执行非常成功。可惜,重启SQL Server之后,这个应用数据库仍然是置疑!

不过,让我欣慰的是,这么做之后,倒是能够Select数据了,让我大出一口气。只不过,组件使用数据库时,报告说:“发生错误:-2147467259,未能在数据库 'XXX' 中运行 BEGIN TRANSACTION,因为该数据库处于回避恢复模式。”

最终成功恢复的全部步骤

设置数据库为紧急模式

停掉SQL Server服务;

把应用数据库的数据文件XXX_Data.mdf移走;

重新建立一个同名的数据库XXX;

停掉SQL服务;

把原来的数据文件再覆盖回来;

运行以下语句,把该数据库设置为紧急模式;

运行“Use Master

Go

sp_configure 'allow updates', 1

reconfigure with override

Go”

执行结果:

DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

已将配置选项 'allow updates' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。

接着运行“update sysdatabases set status = 32768 where name = 'XXX'”

执行结果:

(所影响的行数为 1 行)

重启SQL Server服务;

运行以下语句,把应用数据库设置为Single User模式;

运行“sp_dboption 'XXX', 'single user', 'true'”

执行结果:

命令已成功完成。

ü         做DBCC CHECKDB;

运行“DBCC CHECKDB('XXX')”

执行结果:

'XXX' 的 DBCC 结果。

'sysobjects' 的 DBCC 结果。

对象 'sysobjects' 有 273 行,这些行位于 5 页中。

'sysindexes' 的 DBCC 结果。

对象 'sysindexes' 有 202 行,这些行位于 7 页中。

'syscolumns' 的 DBCC 结果。

………

ü         运行以下语句把系统表的修改选项关掉;

运行“sp_resetstatus “XXX”

go

sp_configure 'allow updates', 0

reconfigure with override

Go”

执行结果:

在 sysdatabases 中更新数据库 'XXX' 的条目之前,模式 = 0,状态 = 28(状态 suspect_bit = 0),

没有更新 sysdatabases 中的任何行,因为已正确地重置了模式和状态。没有错误,未进行任何更改。DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。已将配置选项 'allow updates' 从 1 改为 0。请运行 RECONFIGURE 语句以安装。

重新建立另外一个数据库XXX.Lost;

DTS导出向导

运行DTS导出向导;

复制源选择EmergencyMode的数据库XXX,导入到XXX.Lost;

选择“在SQL Server数据库之间复制对象和数据”,试了多次,好像不行,只是复制过来了所有表结构,但是没有数据,也没有视图和存储过程,而且DTS向导最后报告复制失败;

所以最后选择“从源数据库复制表和视图”,但是后来发现,这样总是只能复制一部分表记录;

于是选择“用一条查询指定要传输的数据”,缺哪个表记录,就导哪个;

视图和存储过程是执行SQL语句添加的

sql数据库备份和恢复常用操作

SYBASE ASA数据库恢复方法数据库

Oracle 9i 约束条件数据库教程

全检索的应用数据库教程

PL/SQL Developer数据库教程

下载逻辑备份与恢复实战数据库教程(精选9篇)
逻辑备份与恢复实战数据库教程.doc
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
点击下载本文文档