• 售前

  • 售后

热门帖子
入门百科

Oracle数据库的备份与规复案例详解

[复制链接]
Abraham30 显示全部楼层 发表于 2022-1-7 21:42:43 |阅读模式 打印 上一主题 下一主题
目录


  • 1 逻辑备份/规复(导出/导入)

    • 1.必备参数
    • 2.owner参数
    • 3.tables参数
    • 4.关于inctype参数

  • 2 物理备份/规复

    • 1.冷备份/规复
    • 2.热备份/规复

  • 3 利用PL/SQL Developer备份数据库
在Oracle数据库的利用过程中,备份与规复是经常遇到的操纵。Oracle中的备份分为两大类:
  1. 逻辑备份
复制代码
  1. 物理备份
复制代码
。此中物理备份又分为两类:
  1. 冷备份
复制代码
  1. 热备份
复制代码
。本节将扼要讲述怎样利用各种备份手段举行Oracle数据库的备份与规复。

1 逻辑备份/规复(导出/导入)

逻辑备份是指利用
  1. exp
复制代码
下令举行备份。利用该下令举行备份,简单易行,也不影响正常的数据库操纵。因此,经常被作为一样平常备份的手段。
  1. exp
复制代码
下令可以添加多个参数选项,以实现差别的导出计谋。可以通过
  1. exp –?
复制代码
下令举行查看。此中,常用参数包括:
  1. owner
复制代码
  1. table
复制代码
  1. inctype
复制代码


1.必备参数

对于一个导出下令,可以只利用必备参数,如范例1所示。
【范例1】演示导出下令的利用。
  1. C:\Documents and Settings\Administrator>exp system/abc123 file=d:/b.dmp
复制代码
【代码分析】
  1. system/abc123
复制代码
为登录数据库时所利用的用户名和暗码;
  1. file=d:/b.dmp
复制代码
指定数据导出所存放的文件完备路径。这里必要注意的是,该下令并未指定登录到哪个数据库实例,因此,将利用体系环境变量
  1. ORACLE_SID
复制代码
所指定的数据库实例。
注意:另外一种特殊环境为,在环境变量列表中找不到
  1. ORACLE_SID
复制代码
,那么,可以在注册表中搜刮
  1. ORACLE_SID
复制代码
项。Oracle也会参考注册表中该项的值来设置环境。

2.owner参数

owner参数,可以指定一个用户名列表。导出时,将只导出用户名列表中用户所拥有的对象,如范例2所示。
【范例2】演示owner参数的利用。
  1. C:\Documents and Settings\Administrator>exp system/abc123 owner=(test, oracle) file=d:/b.dmp
复制代码
【代码分析】
  1. owner=(test, oracle)
复制代码
指定
  1. exp
复制代码
下令仅仅导出
  1. test
复制代码
  1. oracle
复制代码
两个用户所拥有的对象。如果某个用户不存在,例如,本例中用户
  1. oracle
复制代码
不存在,那么将给出相应警告,但不会影响对于用户
  1. test
复制代码
的对象的导出。

3.tables参数

当利用exp下令时,同样可以指定tables参数。该参数用于指定导出哪些数据表。范例3演示了该参数的利用。
【范例3】演示tables参数的利用。
  1. exp system/abc123 tables=(people, employees) file=d:/b.dmp
复制代码
【代码分析】
  1. tables=(people, employees)
复制代码
指定了要导出的数据表列表,在
  1. exp
复制代码
下令实行时,将只导出用户
  1. system
复制代码
  1. people
复制代码
  1. employees
复制代码
表。如果要导出的表不存在,那么将给出警告信息。但不会影响其他表的导出工作。

4.关于inctype参数

在Oracle 9i之前的版本中,可以利用inctype参数指定导出的增量范例。但是,在Oracle 9i及以后的版本中,该参数不再利用。范例4演示了在Oracle 10g中利用该参数的错误信息。
【范例4】Oracle 10g中参数inctype已经废除。
  1. C:\Documents  and  Settings\Administrator>exp  system/abc123  inctype=complete file=d:/b.dmp
复制代码
【代码分析】在
  1. exp
复制代码
下令中利用
  1. inctype
复制代码
参数,Oracle将抛堕落误错误信息,
对于逻辑备份,相应的规复下令为
  1. imp
复制代码
。如果数据库遭到粉碎,可以利用如下下令举行规复:
  1. C:\Documents and Settings\Administrator>imp system/abc123 file=d:/b.dmp
复制代码
  1. imp
复制代码
下令同样可以指定参数。例如,利用
  1. owner
复制代码
参数只导入特定用户的对象;利用
  1. tables
复制代码
参数只导入特定表,代码如下:
  1. C:\Documents   and   Settings\Administrator>imp   system/abc123   file=d:/b.dmp tables=(people, employees)
复制代码
该下令将只导入名为
  1. people
复制代码
  1. employees
复制代码
的表。

2 物理备份/规复

物理备份,是指直接备份数据库的文件。物理备份又分为两种:冷备份和热备份。

1.冷备份/规复

冷备份是指在数据库关闭的状态下,备份所有的数据库文件。这些文件包括:所有数据文件、所有控制文件、所有联机REDO LOG文件和Init.ora文件(可选)。
【范例5】演示数据库冷备份。
(1)起首以管理员身份登录数据库,并将数据库关闭
  1. C:\Documents and Settings\Administrator>sqlplus / as sysdba
  2. SQL> shutdown normal;
  3. Database closed.
  4. Database dismounted.
  5. ORACLE instance shut down.
复制代码
(2)在关闭数据库之后,可以对其物理文件举行备份。这些物理文件默认处于
  1. {ORACLE_HOME}\product\10.1.0\oradata\test
复制代码
,此中
  1. test
复制代码
为数据库名。因此,起首返回到Windows下令行下利用复制下令,大概在SQL下令行中添加
  1. host
复制代码
关键字直接利用主机下令:
  1. SQL> host copy D:\oracle\product\10.1.0\oradata\test  f:\backup\
  2. D:\oracle\product\10.1.0\oradata\test\CONTROL01.CTL
  3. D:\oracle\product\10.1.0\oradata\test\CONTROL02.CTL
  4. D:\oracle\product\10.1.0\oradata\test\CONTROL03.CTL
复制代码
此时,已经实现了整个数据库的冷备份。而冷备份的规复则十分方便,只要数据库处于关闭状态,将备份的文件复制到原来的位置即可。

2.热备份/规复

数据库的热备份是指对处于启动状态下的数据库举行备份。热备份一个数据库,起首要保证数据库运行于归档模式,然后备份表空间的数据文件,末了备份控制文件。
【范例6】演示数据库热备份。
(1)在举行日志模式切换之前,必须将运行的数据库正常关闭。因此,起首应该以管理员身份登录数据库,关闭数据库。
  1. SQL> shutdown immediate;
  2. Database closed.
  3. Database dismounted.
  4. ORACLE instance shut down.
复制代码
(2)重新启动数据库实例,但是并不打开数据库。
  1. SQL> startup mount;
  2. ORACLE instance started.
  3. Total System Global Area  171966464 bytes
  4. Fixed Size               787988 bytes
  5. Variable Size          145488364 bytes
  6. Database Buffers         25165824 bytes
  7. Redo Buffers             524288 bytes
  8. Database mounted.
复制代码
(3)利用alter下令将数据库切换到归档模式。
  1. SQL> alter database archivelog;
  2. Database altered.
复制代码
(4)打开数据库,以便对数据库举行操纵。
  1. SQL> alter database open;
  2. Database altered.
复制代码
(5)利用
  1. archive log list
复制代码
下令确认当前数据库处于归档模式。
  1. SQL> archive log list;
  2. Database log mode         Archive Mode
  3. Automatic archival          Enabled
  4. Archive destination          USE_DB_RECOVERY_FILE_DEST
  5. Oldest online log sequence     538
  6. Next log sequence to archive   540
  7. Current log sequence         540
复制代码
  1. Archive Mode
复制代码
表明当前的数据库处于归档模式。Oracle数据库有联机重做日志,该日志用于记载用户的数据库操纵,如插入、删除或更新数据。一般环境下,每个Oracle数据库至少含有两个联机重做日志组。当一个联机重做日志组被写满的时间,就会发生日志切换。另一个联机日志组成为当前利用的日志,继续记载用户操纵。当前联机日志组写满后,会切换到第一个联机日志组,并覆写此中的数据。
如果数据库处于非归档模式,联机日志在切换时就会抛弃已有信息。而在归档模式下,当发生日志切换时,被切换的日志会起首举行归档,并将信息复制到其他目录。如许,不会造成联机日志信息的丢失。
(6)将数据库中的表空间users设置为备份模式,代码如下:
  1. SQL> alter tablespace users begin backup;
  2. Tablespace altered.
复制代码
(7)复制现实的表空间的数据文件到备份目录下,代码如下:
  1. SQL> host copy D:\oracle\product\10.1.0\oradata\test\users01.dbf d:\back;
  2. 已复制       1 个文件。
复制代码
关闭表空间的备份模式,代码如下:
  1. SQL> alter tablespace users end backup;
  2. Tablespace altered.
复制代码
(8)以同样的方式备份数据库中的其他表空间的数据文件。
(9)备份控制文件,代码如下:
  1. SQL> alter database backup controlfile to 'F:\backup\TEST_BACKUP' reuse;
  2. Database altered.
复制代码
(10)备份控制文件的创建脚本,代码如下:
  1. SQL> alter database backup controlfile to trace;
  2. Database altered.
复制代码
此时会在
  1. {ORACLE_HOME}\admin\{INSTANCE_NAME}\udump
复制代码
目录下生成新的控制文件的跟踪文件。在本例中其路径为
  1. D:\oracle\product\10.1.0\admin\test\udump
复制代码
。在目录中得到最新的跟踪文件,该文件记载了数据库控制文件的创建脚本。以下代码为文件片断:
  1.     -- The following commands will create a new control file and use it
  2.     -- to open the database.
  3.     -- Data used by Recovery Manager will be lost.
  4.     -- The contents of online logs will be lost and all backups will
  5.     -- be invalidated. Use this only if online logs are damaged.
  6.     -- After mounting the created controlfile, the following SQL
  7.     -- statement will place the database in the appropriate
  8.     -- protection mode:
  9.     --  ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE
  10.     STARTUP NOMOUNT
  11.     CREATE CONTROLFILE REUSE DATABASE "TEST" RESETLOGS  ARCHIVELOG
  12.         MAXLOGFILES 16
  13.         MAXLOGMEMBERS 3
  14.         MAXDATAFILES 100
  15.         MAXINSTANCES 8
  16.         MAXLOGHISTORY 454
  17.     LOGFILE
  18.       GROUP 1 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\REDO01.LOG'  SIZE 10M,
  19.       GROUP 2 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\REDO02.LOG'  SIZE 10M,
  20.       GROUP 3 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\REDO03.LOG'  SIZE 10M
  21.     -- STANDBY LOGFI
复制代码
复制该文件,并将该文件复制到备份目录下。至此,热备份的过程竣事。
在备份成功之后,一旦出现数据库故障,即可以利用备份文件举行规复工作。例如,如果数据文件
  1. D:\oracle\product\10.1.0\oradata\test\users01.dbf
复制代码
粉碎,那么在启动数据库时会抛堕落误。
  1. SQL> startup mount;
  2. ORACLE instance started.
  3. Total System Global Area  171966464 bytes
  4. Fixed Size               787988 bytes
  5. Variable Size          145488364 bytes
  6. Database Buffers         25165824 bytes
  7. Redo Buffers             524288 bytes
  8. Database mounted.SQL> alter database open;alter database open*ERROR at line 1:ORA-01157: cannot identify/lock data file 4- see DBWR trace fileORA-01110: data file 4: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\USERS01. DBF'
复制代码
由于无法找到数据文件USERS01.DBF,数据库启动失败。此时,必要将从前备份的数据文件复制到原目录中。
  1. SQL>   host   copy   f:\backup\users01.dbf   D:\ORACLE\PRODUCT\10.1.0\ORADATA\
  2. TEST\USERS01.DBF;
  3.     已复制       1 个文件。
复制代码
此时,重新启动数据库。
  1.   SQL> alter database open;
  2.    alter database open
  3. *
  4.   ERROR at line 1:
  5.    ORA-01113: file 4 needs media recovery
  6.    ORA-01110: data file 4: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\USERS01. DBF'
复制代码
Oracle在启动时,总是会查抄控制文件中的标识(Checkpoint CNT与Checkpoint SCN)与数据文件中的标识是否相同。如果差别,则必要重新规复数据文件,以同步控制文件中的标识与数据文件中的标识。规复的下令如下:
  1. SQL> recover datafile 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\TEST\USERS01. DBF';
复制代码
固然,也可以利用如下语句取代。
  1. SQL> recover datafile 4;
复制代码
此时,Oracle大概会要求用户指定归档日志。归档日志默认存储在
  1. {ORACLE_HOME}\flash_recovery_area\{DATABASE_NAME}\ARCHIVELOG\
复制代码
下,为
  1. recover
复制代码
下令选择近来的归档日志或利用Oracle发起的归档日志,如图所示。

选择归档日志
在选择了归档日志之后,Oracle将利用该归档日志举行规复。规复成功之后,可以成功打开数据库。
  1. SQL> alter database open;
  2. Database altered.
复制代码
备份控制文件的意义在于,当控制文件丢失时,可以将热备份的控制文件还原。而备份跟踪文件的意义在于,当备份的控制文件无法正常利用时,利用跟踪文件重新创建控制文件。

3 利用PL/SQL Developer备份数据库

除了利用各种下令对数据库举行备份之外,还可以利用PL/SQL Developer举行备份。利用该工具举行备份,简单易学,而且不易堕落。利用PL/SQL Developer举行备份的模式包括针对整个数据库、针对某个用户、针对某些特定表等。本节以备份某个用户对象为例,讲述怎样利用PL/SQL Developer举行备份。
【范例7】演示利用PL/SQL Developer备份用户System所有对象。
       
  • (1)打开PL/SQL Developer,并利用System用户登录数据库TEST。   
  • (2)在左侧窗口的下拉菜单中选择【My objects】从而保证所有的操纵都是针对当前用户的对象。   
  • (3)选择菜单栏中的【Tools】菜单下的【Export User Objects】菜单项,将弹出导出窗口,如图所示。

利用PL/SQL Developer备份用户的所有对象
       
  • (4)选择列表中所有对象,并为【Output File】指定导出文件的路径。导出的文件现实上是一个SQL脚本文件。此中记载了当前用户的所有对象的创建脚本。一旦数据库出现故障,可以重修数据库,并在此中创建相应用户(System用户无须创建,为数据库默认用户),然后利用该用户登录数据库,并实行该SQL脚本,即可实现数据库对象的重新创建。   
  • (5)除了备份数据库对象之外,还必要备份数据表中的数据。备份表中数据,必要利用【Tools】菜单下的【Export Tables】功能。
以上所述是小编给各人先容的Oracle数据库的备份与规复案例详解,盼望对各人有所资助。在此也非常感谢各人对草根技能分享网站的支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作