文档详情

Oracle数据库的备份方法

沈***
实名认证
店铺
DOC
71KB
约17页
文档ID:157116732
Oracle数据库的备份方法_第1页
1/17

逻辑备份:EXP,IMP物理备份:1.脱机备份: 拷贝数据文件,日志文件,控制文件,(参数文件,可选) 2.联机备份:备份任何运行在ARCHIVELOG方式下的数据库(提供了完全的时间点的恢复)Oracle数据库的备份方法 1、引言 Oracle数据库的备份方法很多,无论使用那种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统比如使用export实用程序导出数据库对象、使用Oracle备份数据库、使用Oracle对称复制、使用Oracle并行服务器、使用Oracle冷备份、使用Oracle热备份等各种备份方法都有其优缺点、适用的场合和相应的软硬件要求本文主要就用export实用程序导出数据库对象、Oracle冷备份、Oracle热备份这三种最基本的备份方法进行详细的探讨,分析各自的优缺点和适用的场合,并给出自动执行这些备份方案的脚本文件 2、三种备份方案的比较 备份方案 综述 优点 缺点 冷备份 冷备份是Oracle最简单的一种备份;执行冷备份前必须关闭数据库;然后使用操作系统实用工具或者第三方工具备份所有相关的数据库文件 能简单快速地备份能简单快速地恢复。

执行简单 必须关闭数据库 不能进行点恢复 热备份 热备份是当数据库正在运行时进行数据备份的过程执行热备份的前提是:数据库运行在可归档日志模式适用于24X7不间断运行的关键应用系统 备份时数据库可以是打开的热备份可以用来进行点恢复初始化参数文件、归档日志在数据库正常运行时是关闭的,可用操作系统命令拷贝 执行过程复杂由于数据库不间断运行,测试比较困难不能用操作系统实用工具拷贝打开的文件必须使用Oracle提供的ocopy工具来拷贝打开的文件热备份可能造成CPU、I/O过载,应在数据库不太忙时进行 Export导出数据库对象 冷备份和热备份都备份物理数据库文件,因而被称为物理备份而export备份的是数据库对象,因此被称为逻辑备份 能执行对象或者行恢复备份和恢复速度更快能够跨操作系统平台迁移数据库数据库可一直运行 export并不是冷备份和热备份的替代工具冷、热备份可保护介质失效export备份可保护用户或应用错误 3、冷备份方案的实施 3.1 冷备份数据库的步骤 (1)关闭数据库; (2)备份所有相关的数据库文件:初始化参数文件、控制文件(可用select name from v$controlfile;列出所有控制文件)、数据文件(可用select name from v$datafile;列出所有数据文件)、Redo日志(可用select member from v$logfile;列出所有redo日志文件)、归档的Redo日志(可用select sequence#,first_time from v$loghist;列出所有归档redo日志文件的顺序号和产生时间)。

3.2 冷备份数据库的脚本文件coldbak.cmd rem Oracle数据库冷备份脚本文件名coldbak.cmd rem 用于Windows NT/2000 平台,已经过严密的测试,大家可以试验!!! rem 该脚本执行后,在c:\temp目录中产生db_restrict.sql、db_shut.sql、db_start.sql、 rem cold.sql、cold.cmd等5个脚本文件,冷备份的核心命令在cold.cmd中 rem 设置SID set oracle_sid=tmq rem 设置初始化参数文件 set my_pfile=e:\oracle\ora81\database\inittmq.ora set my_ifile=E:\Oracle\ADMIN\tmq\pfile\init.ora rem 设置归档日志目录 set my_archive_dir=E:\Oracle\ORADATA\tmq\archive rem 设置internal帐户的密码 set my_password=oracle rem 建立临时目录 mkdir c:\temp set my_temp=c:\temp rem 建立备份目录,该目录必须有足够大的空间用于存放数据库的备份文件 mkdir e:\backup set my_bakdir=e:\backup rem ==== (1) create script file db_restrict.sql===== echo connect internal/%my_password%; > %my_temp%\db_restrict.sql echo shutdown immediate; >> %my_temp%\db_restrict.sql echo startup restrict pfile=%my_pfile%; >>%my_temp%\db_restrict.sql echo exit >> %my_temp%\db_restrict.sql rem ==== (2) create script file db_shut.sql ===== echo connect internal/%my_password%; >%my_temp%\db_shut.sql echo shutdown immediate; >>%my_temp%\db_shut.sql echo exit >>%my_temp%\db_shut.sql rem ==== (3) create script file db_start.sql ===== echo connect internal/%my_password%; >%my_temp%\db_start.sql echo startup pfile=%my_pfile%; >>%my_temp%\db_start.sql echo exit >>%my_temp%\db_start.sql svrmgrl @%my_temp%\db_restrict.sql rem ==== (4) create script file cold.sql ===== echo set heading off; >%my_temp%\cold.sql echo set feedback off; >>%my_temp%\cold.sql echo spool %my_temp%\cold.cmd; >>%my_temp%\cold.sql echo 在这里设计冷备份的命令,备份控制文件、数据文件和日志文件 echo select 'copy ' ^|^| name ^|^| ' %my_bakdir%' from v$controlfile; >>%my_temp%\cold.sql echo select 'copy ' ^|^| member ^|^| ' %my_bakdir%' from v$logfile; >>%my_temp%\cold.sql echo select 'copy ' ^|^| file_name ^|^| ' %my_bakdir%' from dba_data_files; >>%my_temp%\cold.sql echo spool off; >>%my_temp%\cold.sql echo exit >>%my_temp%\cold.sql rem ===== (5) run cold.sql to genrate cold.cmd ======== sqlplus internal/%my_password% @%my_temp%\cold.sql echo 在这里设计冷备份的命令,备份参数文件、归档日志文件 echo. >> %my_temp%\cold.cmd echo copy %my_pfile% %my_bakdir% >> %my_temp%\cold.cmd echo copy %my_ifile% %my_bakdir% >> %my_temp%\cold.cmd echo. >> %my_temp%\cold.cmd echo copy %my_archive_dir%\*.* %my_bakdir% >> %my_temp%\cold.cmd rem ===== shut down database ======== svrmgrl @%my_temp%\db_shut.sql rem ====== run cold.cmd to perform the cold backup 开始执行冷备份 ====== call %my_temp%\cold.cmd rem ====== start up the database ======= svrmgrl @%my_temp%\db_start.sql echo ===== the cold backup is completed!!! ====== 4、热备份方案的实施 4.1 热备份数据库的前提条件:数据库运行在归档模式 Oracle数据库的redo日志记录在数据库上进行的所有活动。

LGWR后台进程以一种循环方式写这些日志文件,从第一个redo日志到下一个,直到该组的最后一个,然后由从第一个日志写起 在非归档模式下,当循环写到最后一个日志文件后,就重写第一个日志因此,非归档模式下唯一的数据库恢复办法就是使用冷备份 在归档模式下,当redo日志满时,一个ARCH后台进程就读取全部redo日志,然后将其写到归档日志因此,可以使用热备份和点恢复在归档日志模式下,如果归档日志目的空间已满,数据库活动将暂时停止,只有释放一些空间后,数据库才能继续运行通常,background_dump_destination将产生一个跟踪文件来显示归档方面的问题 Oracle数据库安装默认运行在非归档模式,通过以下步骤可以从非归档模式转换为归档模式: (1)编辑参数文件init.ora,设置以下参数 # 设置数据库自动归档 log_archive_start = true # 设置归档日志文件的目录,该目录必须事先已建立,并有大量可利用的空间 log_archive_dest_1="location=%oracle_base%\ oradata\%oracle_sid%\archive" # 设置归档日志文件名的格式。

s表示顺序号,%t表示线程号 log_archive_format = "%oracle_sid%%T%S.ARC" (2)在svrmgrl上运行以下命令 svrmgrl>connect internal/YOUR_PASSWORD svrmgrl>shutdown immediate; svrmgrl>startup mount exclusive; svrmgrl>alter database archivelog; svrmgrl>alter database open; svrmgrl>shutdown immediate; (3)执行数据库冷备份 当数据库运行在归档模式下,数据库恢复过程要求使用冷备份时,归档日志是必需的 (4)正常启动数据库,并确认数据库运行在归档模式 svrmgrl > startup; svrmgrl > select * from v$database; 其log_mode会显示数据库是否归档模式 svrmgrl > archive log list; 也会显示数据库是否归档模式 如果Oracle数据库运行在归档模式,当进行数据库维护时,可能需要暂停数据库的归档,在完成维护后,再重新启动归档模式。

通过以下步骤可以从归档模式转换为非归档模式: svrmgrl>connect internal/YOUR_PASSWORD svrmgrl>shutdown immediate; svrmgrl>startup mount exclusive; svrmgrl>alter database noarchivelog; svrmgrl>alter database open; svrmgrl > select * from v$database; 其log_mode会显示数据库是否归档模式 svrmgrl > archive log list; 也会显示数据库是否归档模式 4.2 热备份数据库的步骤 (1)拷贝init.ora文件到备份目录(参数文件在数据库启动后处于关闭状态) (2)将需要备份的某个表空间置于开始备份模式 (3)使用ocopy.exe拷贝表空间,然后将该表空间置于结束备份模式中(ocopy.exe不能用于直接拷贝联机的数据库文件) (4)对数据库中的每个表空间执行步骤2和3(可以通过视图dba_tablespaces和v$datafile查看数据库中有哪些表空间和数据文件)。

(5)通过在svrmgrl上执行archive log list命令获取当前的日志顺序号,从oldest online log sequence开始到current log sequence的联机redo日志应该是热备份的一部分 (6)在svrmgrl上执行alter system switch logfile;命令来强迫日志切换,以便所有的日志都被归档 (7)使用alter database backup controlfile to trace;命令获得控制文件的一个备份,可以到%oracle_base%\admin\%oracle_sid%\udump目录中寻找最新的跟踪文件,其中有重建控制文件的全部命令 (8)使用windows nt的命令从%log_archive_dest%中拷贝归档的日志文件到备份目录 4.3 热备份数据库的脚本文件hotbak.cmd rem Oracle数据库热备份脚本文件名hotbak.cmd rem 用于Windows NT/2000 平台,已经过严密的测试,大家可以试验!!! rem 该脚本执行后,在c:\temp目录中产生minlog.sql、minlog.cmd、 rem tblspc01.sql、tblspc02.sql、control01.sql、control02.sql、 rem maxlog.sql、maxlog.cmd、archive.sql、archive.cmd等10个脚本文件。

rem 设置SID set oracle_sid=tmq rem 设置初始化参数文件 set my_pfile=e:\oracle\ora81\database\inittmq.ora set my_ifile=E:\Oracle\ADMIN\tmq\pfile\init.ora rem 设置归档日志目录 set my_archive_dir=E:\Oracle\ORADATA\tmq\archive rem 设置internal帐户的密码 set my_password=oracle rem 建立临时目录 mkdir c:\temp set my_temp=c:\temp rem 建立备份目录,该目录必须有足够大的空间用于存放数据库的备份文件 mkdir e:\backup set my_bakdir=e:\backup rem ===== (1) 开始备份参数文件 ======= echo Backing up the init.ora file copy %my_pfile% %my_bakdir% copy %my_ifile% %my_bakdir% rem ===== (2) 创建minlog.sql脚本获取最小的online redo日志顺序号 ===== echo set heading off; >%my_temp%\minlog.sql echo set feedback off; >>%my_temp%\minlog.sql echo spool %my_temp%\minlog.cmd; >>%my_temp%\minlog.sql echo select 'set minlog_value=' ^|^| min(sequence#) from v$log where upper(status)=upper('INACTIVE'); >>%my_temp%\minlog.sql echo spool off; >>%my_temp%\minlog.sql echo select 'exit;' from dual; >>%my_temp%\minlog.sql echo exit; >>%my_temp%\minlog.sql rem ===== (3) run minlog.sql to genrate minlog.cmd ======== sqlplus internal/%my_password% @%my_temp%\minlog.sql rem ===== (4) run minlog.cmd to set minlog_value ======== call %my_temp%\minlog.cmd rem === (5) 创建tblspc01.sql脚本用于生成备份数据文件的脚本文件tblspc02.sql === echo set heading off; >%my_temp%\tblspc01.sql echo set feedback off; >>%my_temp%\tblspc01.sql echo spool %my_temp%\tblspc02.sql; >>%my_temp%\tblspc01.sql echo select 'connect internal/%my_password%;' from dual; >>%my_temp%\tblspc01.sql echo select 'alter tablespace ' ^|^| tablespace_name ^|^| ' begin backup;' from dba_tablespaces; >>%my_temp%\tblspc01.sql echo select 'host start/wait ocopy ' ^|^| file_name ^|^| ' %my_bakdir%;' from dba_data_files; >>%my_temp%\tblspc01.sql echo select 'alter tablespace ' ^|^| tablespace_name ^|^| ' end backup;' from dba_tablespaces; >>%my_temp%\tblspc01.sql echo spool off; >>%my_temp%\tblspc01.sql echo select 'exit;' from dual; >>%my_temp%\tblspc01.sql echo exit; >>%my_temp%\tblspc01.sql rem ===== (6) run tblspc01.sql to genrate tblspc02.sql ======== sqlplus internal/%my_password% @%my_temp%\tblspc01.sql rem ===== (7) on svrmgrl run tblspc02.sql to backup the datafiles ======== svrmgrl @%my_temp%\tblspc02.sql rem ===== (8) 创建maxlog.sql脚本获取最大的online redo日志顺序号 ===== echo set heading off; >%my_temp%\maxlog.sql echo set feedback off; >>%my_temp%\maxlog.sql echo spool %my_temp%\maxlog.cmd; >>%my_temp%\maxlog.sql echo select 'set maxlog_value=' ^|^| max(sequence#) from v$log where upper(status)=upper('CURRENT'); >>%my_temp%\maxlog.sql echo spool off; >>%my_temp%\maxlog.sql echo select 'alter system switch logfile;' from dual; >> %my_temp%\maxlog.sql echo select 'exit;' from dual; >>%my_temp%\maxlog.sql echo exit; >>%my_temp%\maxlog.sql rem ===== (9) run maxlog.sql to genrate maxlog.cmd ======== sqlplus internal/%my_password% @%my_temp%\maxlog.sql rem ===== (10) run maxlog.cmd to set maxlog_value ======== call %my_temp%\maxlog.cmd rem == (11) 创建control01.sql脚本用于生成备份控制文件的脚本文件control02.sql === echo set heading off; >%my_temp%\control01.sql echo set feedback off; >>%my_temp%\control01.sql echo spool %my_temp%\control02.sql; >>%my_temp%\control01.sql echo select 'connect internal/%my_password%;' from dual; >>%my_temp%\control01.sql echo select 'alter database backup controlfile to trace;' from dual; >>%my_temp%\control01.sql echo spool off; >>%my_temp%\control01.sql echo select 'exit;' from dual; >>%my_temp%\control01.sql echo exit; >>%my_temp%\control01.sql rem ===== (12) run control01.sql to genrate control02.sql ======== sqlplus internal/%my_password% @%my_temp%\control01.sql rem ===== (13) on svrmgrl run control02.sql to backup the datafiles ======== svrmgrl @%my_temp%\control02.sql rem ===== (14) 创建archive.sql脚本用于生成备份归档日志文件的脚本文件archive.cmd ===== echo set heading off; >%my_temp%\archive.sql echo set feedback off; >>%my_temp%\archive.sql echo spool %my_temp%\archive.cmd; >>%my_temp%\archive.sql rem 仅备份与本次热备份相关的日志文件 echo select 'copy ' ^|^| name ^|^| ' %my_bakdir%' from V_$ARCHIVED_LOG where sequence# between %minlog_value% and %maxlog_value%+1; >>%my_temp%\archive.sql echo spool off; >>%my_temp%\archive.sql echo select 'exit;' from dual; >>%my_temp%\archive.sql echo exit; >>%my_temp%\archive.sql rem ===== (15) run archive.sql to genrate archive.cmd ======== sqlplus internal/%my_password% @%my_temp%\archive.sql rem ===== (16) run archive.cmd to backup the archive log files ======== call %my_temp%\archive.cmd rem ===== the end ====== echo ===== the hot backup is completed!!! ======5、使用export作为备份策略 5.1 export的命令选项说明 Oracle数据库的exp工具提供tables、users、full database、tablespace四种级别的导出方式,把指定的数据库内容导出到一个或者多个oracle二进制文件中,该文件只允许用imp工具来读取,imp的命令选项可用imp help=y来查阅。

您可以通过输入 EXP 命令以及各种自变量来控制“导出”的运行方式要指定参数,您可以使用关键字: 格式:EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN) 实例:EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR) 或 TABLES=(T1:P1,T1:P2),如果 T1 是分区表 USERID 必须是命令行中的第一个参数 下列关键字仅用于可传输的表空间 TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N) TABLESPACES 将传输的表空间列表 5.2 export备份数据库的脚本文件expbak.cmd rem Oracle数据库export备份脚本文件名expbak.cmd rem 用于Windows NT/2000 平台 rem 设置SID set oracle_sid=tmq rem 设置system帐户的密码 set my_password=manager rem 建立备份目录 mkdir c:\temp set my_temp=c:\temp mkdir e:\backup set my_bakdir=e:\backup rem 如果是表级备份,请设置tables参数;如果是用户级备份,要设置owner参数;全库备份,设置full=y。

rem 下面以用户级备份为例加以说明 set my_owner=(scott,system) exp system/%my_password% file=%my_bakdir%\myexp.dat log=%my_bakdir%\myexp.log buffer=1024000 owner=%my_owner% rem ===== the end ====== echo ===== the export backup is completed!!! ====== 6、各种备份策略的自动执行方法 不管是冷备份、热备份,还是export备份;不管是unix平台,还是windows平台,都可以利用at命令来定时、自动执行上述备份策略AT 命令安排在特定日期和时间运行命令和程序,在windows nt平台上必须首先运行调度服务(schedule),才能使用at命令 AT命令用法如下: AT [\\computername] [ [id] [/DELETE] | /DELETE [/YES]] AT [\\computername] time [/INTERACTIVE] [ /EVERY:date[,...] | /NEXT:date[,...]] "command" \\computername 指定远程计算机。

如果省略这个参数,会计划在本地计算机上运行命令 id 指定给已计划命令的识别号 /delete 删除某个已计划的命令如果省略 id,计算机上所有已计划的命令都会被删除 /yes 不需要进一步确认时,跟删除所有作业的命令一起使用 time 指定运行命令的时间 /interactive 允许作业在运行时,与当时登录的用户桌面进行交互 /every:date[,...] 每个月或每个星期在指定的日期运行命令如果省略日期,则默认为在每月的本日运行 /next:date[,...] 指定在下一个指定日期(如,下周四)运行命令如果省略日期,则默认为在每月的本日运行 "command" 准备运行的 Windows NT 命令或批处理程序 举例如下: (1) 每周五19:00执行冷备份 at 19:00 /every:F "coldbak.cmd" (2) 每周二20:00执行热备份 at 20:00 /every:T "coldbak.cmd" (3) 每周一、二、三、四、五21:00执行export备份 at 20:00 /every:M,T,W,Th,F "expbak.cmd"以下是另外一篇文章:ORACLE数据库有两类备份方法。

第一类为物理备份,该方法实现数据库的完整恢复,但 数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部 存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方 法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备 数据库逻辑备份方法 ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份 表模式 备份某个用户模式下指定的对象(表)业务数据库通常采用这种备份方式 若备份到本地文件,使用如下命令: exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=exp_icdmain_csd_yyyymmdd.dmp log=exp_icdmain_csd_yyyymmdd.log tables=moninformation,icdmain.serviceinfo,icdmain.dealinfo 若直接备份到磁带设备,使用如下命令: exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=/dev/rmt0 log=exp_icdmain_csd_yyyymmdd.log tables=moninformation,icdmain.serviceinfo,icdmain.dealinfo 注:在磁盘空间允许的情况下,应先备份到本地服务器,然后再拷贝到磁带。

出于速度 方面的考虑,尽量不要直接备份到磁带设备 用户模式 备份某个用户模式下的所有对象业务数据库通常采用这种备份方式 若备份到本地文件,使用如下命令: exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=exp_icdmain_yyyymmdd.dmp log=exp_icdmain_yyyymmdd.log 若直接备份到磁带设备,使用如下命令: exp icdmain/icd owner=icdmain rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=/dev/rmt0 log=exp_icdmain_yyyymmdd.log 注:如果磁盘有空间,建议备份到磁盘,然后再拷贝到磁带如果数据库数据量较小, 可采用这种办法备份 完全模式 备份完整的数据库业务数据库不采用这种备份方式备份命令为: exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0) log=exp_fulldb_yyyymmdd.log 对于数据库备份,建议采用增量备份,即只备份上一次备份以来更改的数据。

增量备份 命令: exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 full=y inctype=incremental file=exp_fulldb_yyyymmdd.dmp(磁带设备则为/dev/rmt0) log=exp_fulldb_yyyymmdd.log 注:关于增量备份必须满足下列条件: 1. 只对完整数据库备份有效,且第一次需要full=y参数,以后需要inctype=increment al参数 2. 用户必须有EXP_FULL_DATABASE的系统角色 3. 话务量较小时方可采用数据库备份 4. 如果磁盘有空间,建议备份到磁盘,然后再备份到磁带 业务数据库备份方法及周期 用EXP进行备份前,先在SYS用户下运行CATEXP.SQL文件(如果以前已运行该文件,则不 要执行这个脚本) 没有特殊说明,不允许在客户端执行备份命令 备份命令参照表模式下的备份命令 从磁盘文件备份到磁带 如果首先备份到本地磁盘文件,则需要转储到磁带设备上 1. 若需查看主机上配置的磁带设备,使用如下命令: lsdev -Cc tape 显示的结果如下例所示: rmt0 Available 30-58-00-2,0 SCSI 4mm Tape Drive rmt1 Defined  30-58-00-0,0 SCSI 4mm Tape Drive 标明Available的设备是可用的磁带设备。

2. 若需查看磁带存储的内容,使用如下命令: tar -tvf /dev/rmt0 显示的结果如下例所示: -rw-r--r-- 300 400 8089600 Jan 11 14:33:57 2001 exp_icdmain_20010111.dmp 如果显示类似如下内容,则表示该磁带存储的备份数据是从数据库直接备份到磁带上, 而非从本地磁盘转储到磁带的备份文件,因此操作系统无法识别 tar: 0511-193 An error occurred while reading from the media. There is an input or output error. 或 tar: 0511-169 A directory checksum error on media; -267331077 not equal to 2 5626. 3. 对于新磁带或无需保留现存数据的磁带,使用如下命令: tar -cvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp 注:A. 该命令将无条件覆盖磁带上的现存数据   B. 文件名不允许包含路径信息,如:/backup/exp_icdmain_yyyymmdd.dmp。

4. 对于需要保留现存数据的磁带,使用如下命令: tar -rvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp 注:该命令将文件exp_icdmain_yyyymmdd.dmp追加到磁带的末端,不会覆盖现存的数据 特别强调:如果备份时是从数据库直接备份到磁带上,则不可再向该磁带上追加复制任 何其他文件,否则该备份数据失效 5. 若需将转储到磁带上的备份文件复制到本地硬盘,使用如下命令: A. 将磁带上的全部文件复制到本地硬盘的当前目录 tar -xvf /dev/rmt0 B. 将磁带上的指定文件复制到本地硬盘的当前目录 tar -xvf /dev/rmt0 exp_icdmain_yyyymmdd.dmp 备份时间安排 由于备份时对系统I/O有较大影响,所以,建议在晚上11点以后进行备份工作 业务数据库Oracle版本的恢复 恢复方案需根据备份方案确定由于业务数据库采用表备份和用户备份相结合的方案, 所以业务数据库的恢复需根据实际情况采用表恢复和用户恢复相结合的方案 恢复方案 数据库的逻辑恢复分为表恢复、用户恢复、完全恢复三种模式 表模式 此方式将根据按照表模式备份的数据进行恢复。

A. 恢复备份数据的全部内容 若从本地文件恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_cs d_yyyymmdd.dmp log=imp_icdmain_csd_yyyymmdd.log 若从磁带设备恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0 log=imp_icdmain_csd_yyyymmdd.log B. 恢复备份数据中的指定表 若从本地文件恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_cs d_yyyymmdd.dmp log=imp_icdmain_csd_yyyymmdd.log tables=commoninformation,serviceinfo 若从磁带设备恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0 log=imp_icdmain_csd_yyyymmdd.log tables=commoninformation,serviceinfo 用户模式 此方式将根据按照用户模式备份的数据进行恢复。

A. 恢复备份数据的全部内容 若从本地文件恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_yy yymmdd.dmp log=imp_icdmain_yyyymmdd.log 若从磁带设备恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0 log=imp_icdmain_yyyymmdd.log B. 恢复备份数据中的指定表 若从本地文件恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=exp_icdmain_yy yymmdd.dmp log=imp_icdmain_yyyymmdd.log tables=commoninformation,serviceinfo 若从磁带设备恢复,使用如下命令: imp icdmain/icd fromuser=icdmain touser=icdmain rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=n volsize=0 file=/dev/rmt0 log=imp_icdmain_yyyymmdd.log tables=commoninformation,serviceinfo 完全模式 如果备份方式为完全模式,采用下列恢复方法: 若从本地文件恢复,使用如下命令: imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 full=y file=exp_icdmain_yyyymmdd.dmp log=imp_icdmain_yyyymmdd.log 若从磁带设备恢复,使用如下命令: imp system/manager rows=y indexes=n commit=y buffer=65536 feedback=100000 ignore=y volsize=0 full=y file=/dev/rmt0 log=imp_icdmain_yyyymmdd.log 参数说明 1. ignore参数 Oracle在恢复数据的过程中,当恢复某个表时,该表已经存在, 就要根据ignore参数的设置来决定如何操作。

若ignore=y,Oracle不执行CREATE TABLE语句,直接将数据 插入到表中,如果插入的记录违背了约束条件,比如主键约束, 则出错的记录不会插入,但合法的记录会添加到表中 若ignore=n,Oracle不执行CREATE TABLE语句,同时也不会 将数据插入到表中,而是忽略该表的错误,继续恢复下一个表 2. indexes参数 在恢复数据的过程中,若indexes=n,则表上的索引不会被恢复 ,但是主键对应的唯一索引将无条件恢复,这是为了保证数据 的完整性 字符集转换 对于单字节字符集(例如US7ASCII),恢复时,数据库自动转 换为该会话的字符集(NLS_LANG参数);对于多字节字符集 (例如ZHS16CGB231280),恢复时,应尽量使字符集相同 (避免转换),如果要转换,目标数据库的字符集应是输出数 据库字符集的超集 恢复方法 业务数据库采用表恢复方案在用IMP进行恢复前,先在SYS 用户下运行CATEXP.SQL文件(如果以前已运行该文件,则 不要执行这个脚本),然后执行下列命令: IMP ICDMAIN/ICD FILE=文件名 LOG=LOG文件名 ROWS=Y COMMIT=Y BUFFER=Y IGNORE=Y TABLES=表名 注:要恢复的表名参照备份的表名   。

恢复是在原表基础上累加数据   没有特殊说明,不允许在客户端执行恢复命令 将一个数据库的某用户的所有表导到另外数据库的一个用户下面的例子   exp userid=system/manager owner=username1 file=expfile.dmp imp userid=system/manager fromuser=username1 touser=username2 ignore=y file=expfile.dmp将一个数据库的某用户的所有表导到另外数据库的一个用户下面的例子   exp userid=system/manager owner=username1 file=expfile.dmp imp userid=system/manager fromuser=username1 touser=username2 ignore=y file=expfile.dmp   ORACLE数据库有两类备份方法第一类为物理备份,该方法实现数据库的完整恢复,但 数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部 存储设备,例如磁带库;第二类备份方式为逻辑备份,业务数据库采用此种方式,此方 法不需要数据库运行在归挡模式下,不但备份简单,而且可以不需要外部存储设备。

数据库逻辑备份方法 ORACLE数据库的逻辑备份分为三种模式:表备份、用户备份和完全备份 表模式 备份某个用户模式下指定的对象(表)业务数据库通常采用这种备份方式 若备份到本地文件,使用如下命令: exp icdmain/icd rows=y indexes=n compress=n buffer=65536 feedback=100000 volsize=0 file=exp_icdmain_csd_yyyy。

下载提示
相关文档
正为您匹配相似的精品文档