ITPub博客

备份与恢复(网文摘录)

原创 Linux操作系统 作者:浪漫双鱼 时间:2007-12-27 21:59:50 0 删除 编辑
1. 在不同的数据库使用条件(如联机与脱机、归档与非归档)下需要使用不同的备份和恢复方法。某
种条件下的备份信息只能由对应方法进行还原或恢复。
2. 数据库恢复的方法取决于故障的类型。一般分为 实例恢复 与 介质恢复 。
3. 实例恢复:主要用于数据库实例故障引起的数据库停机。
实例故障是当发生操作系统错误、意外掉电、后台进程故障、使用ShutDown Abort 终止数
据库实例时发生的故障。 实例恢复在再次启动数据库时,由数据库系统根据重作日志文件记录的
内容(如未提交的事务、已提交但未完成的事务)自动完成恢复。 但如果在联机备份时发生实例
故障,则需要进行介质恢复。
4. 介质恢复:主要用于介质故障引起的数据库文件的破坏。
介质故障是当一个文件、一个文件的某一部分或一个磁盘不能读写时发生的故障。 介质恢
复必须由数据库管理员手工完成最新数据库备份和日志文件备份的装入,并执行各种恢复命令才
能恢复。
5. 备份与恢复的方法
备份与恢复主要有如下三种方法:脱机备份与恢复、联机备份与恢复、逻辑备份与恢复。
6. 脱机备份与恢复
有时也称冷备份与恢复,是在关闭数据库的情况下对数据库文件的物理备份与恢复
脱机备份与恢复是在通过Shutdown normal、shutdown immediate 或shutdown transaction
关闭数据库后进行的。此时对数据库所使用的必要文件都可以用操作系统的复制命令进行备份与恢
复。
注:不要在shutdown abort 后进行脱机备份与恢复,因为这是一种不干净的关闭数据库的
方式,很有可能包含未提交的事务和不一致的数据。如果必须执行shutdown abort ,则应该重新
启动数据库,由数据库先自动对未提交的事务和不一致的数据进行处理,然后执行shutdown
normal ,shutdown immediate 或shutdown transaction 关闭数据库,最后在进行脱机备份与恢复 。
7. 联机备份与恢复
有时也称热备份与恢复,是在数据库处于打开状态下对数据库进行的备份与恢复。要进行联机
备份与恢复,数据库必须处于归档模式(archivelog)下。使用联机备份与恢复的好处(或归档模
式的好处)是,当一个数据文件或表空间处于备份与恢复状态时,用户仍然可以访问其他数据库。
只有能进行联机备份与恢复的数据库才能实现7x24 小时的运行,即不停机的使用数据库。
8. 逻辑备份与恢复
是指利用Oracle 提供的工具,如导出导入工具(exp,imp)、数据泵工具(expdp,impdp),
将数据库中的数据进行卸出与装入。
物理备份与恢复是对操作系统文件的备份与恢复,无论文件中有无数据,有无需要备份的
数据,都必须备份。 而逻辑备份只是数据的备份,不用复制物理文件,可以按需要进行数据库
级、方案(或用户)级、表级的逻辑备份与恢复,可以节省空间。
9. 备份策略
◆ 如果不必7x24 小时工作,可以在Noarchivelog 模式下操作数据库; 如果是7x24 小时工
作,则需要在Archivelog 模式下操作数据库。
◆ 如果不必7x24 小时工作,则根据数据库操作的频繁程度,适当进行脱机备份,如每周或每
月 ;如果是7x24 小时工作,则要在脱机备份之后,适当的穿插进行联机备份,如每周两次或每月两
次。
◆ 在重要的修改以前或以后,执行适当的数据库备份。
◆ 选择适当的备份工具。如果企业有多个Oracle 数据库,则应该使用具有恢复目录的恢复管
理器(Rman)进行备份。
10. 数据库的脱机备份与恢复
脱机备份书在数据库处于“干净”关闭状态下进行的操作系统备份,是对于构成数据库的全
部文件的备份,不得漏掉一个。这些要备份的文件有如下几类:
◆ 参数文件
◆ 所有控制文件
◆ 所有数据文件
◆ 所有联机重做日志文件
启动数据库的过程中,上述文件的使用顺序是:参数文件、控制文件、数据文件和重做日志文
件。只有这些文件都被正常的读取和使用后,数据库才能正常的启动,用户才能使用数据库。
脱机备份后,将所有备份文件复制回原来的位置后,不需要进行数据库恢复就可以正常使用。
脱机备份是联机备份的基础,即某些联机备份(如增量备份)是以某个脱机备份为参考的。
脱机备份后,如果数据库由于误操作、硬件故障等受到损害,就可以利用备份文件将数据库恢
复到备份时刻的状态。例如,如果安装Oracle 的硬盘坏了,可以换个硬盘,重装Oracle,只要目
录不变,就可以在关闭数据库的情况下,将备份文件全部复制到原来的位置,重新启动数据库即可。
11. 备份文件的位置与清单
◆ 参数文件
D:\oracle\product\10.2.0\db_1\database\spfileoamissid.ora
D:\oracle\product\10.2.0\db_1\database\pwdoamissid.ora
D:\oracle\product\10.2.0\db_1\database\pflieoamissid.ora
◆ 查询数据字典视图v$control 可以确定控制文件的位置与清单。
Sql>select status , name from v$controlfile ;
◆ 查询数据字典视图dba_data_files 可以确定数据文件的位置与清单。
Sql>select status , file_name from dba_data_files ;
◆ 查询数据字典视图v$logfile 可以确定联机重做日志文件的位置与清单。
Sql>select group# , status , member from v$logfile ;
12. 脱机备份
脱机备份的方法或步骤如下:
Step 1 :在数据库服务器上,进入DOS 方式。
Step 2 :以不连接数据库的方式启动SQL*PLUS
C:\sqlplus /nolog
Sql>
Step 3 :以具有SYSDBA 或SYSOPER 权限的数据库用户帐户(如SYSTEM 或SYS)、SYSDBA
的连接身份连接到Oracle 。
SQL>connect system/password as sysdba
已连接 。
Step 4 :以immediate 方式关闭数据库,以便进行脱机备份。
Sql>shutdown immediate
数据库已关闭。
已经卸载数据库。
Oracle 例程已经关闭。
Step 5 :使用操作系统命令或工具,按照备份文件清单备份所有需要备份的文件,不得漏掉一
个。(cp)
如拷贝数据文件:
Xcopy d:\oracle\oradata\test\*.dbf d:\database/H/R
拷贝控制文件:
Xcopy d:\oracle\pradata\test\*.ctl d:\database/H/R
拷贝日志文件:
Xcopy d:\oracle\oradata\test\*.log d:\database/H/R
Step 6 :备份完毕后,以OPEN 方式启动数据库,以便用户可以继续使用数据。
Sql>startup open
Oracle 例程已经启动。
13. 脱机恢复
脱机恢复的方法或步骤如下:
Step 1 :以immediate 方式关闭数据库。
Sql>shutdown immediate
Step 2 :将备份文件全部复制到原来所在的位置,不得漏掉一个,以便恢复备份时刻数据
库的镜像。
注意:为了保证数据的同步和一致性,必须将所有的备份文件全部复制到原来的位置,
而并非是某个单独的文件。
Step 3 :恢复完成后,以OPEN 方式启动数据库。用户可以继续使用数据库了。
Sql>startup open
Oracle 例程已经启动。
14. 使用数据泵进行逻辑备份与恢复
Oracle 引用最新的数据泵技术,即expdp 和impdp 实用程序。
在10g 以前通常使用exp 和imp 实用程序进行导入导出数据。
补充:expdp 和impdp 是服务器端实用程序,只能在服务器端使用。而exp 和imp 是客户端实用程
序,既可以在客户端使用,也可以在服务器端使用 。
15. 导出数据是指将数据库中的数据导出到一个操作系统文件(即转储文件)中,导入文件是指将转储文件中
的数据导入到数据库中。
16. 使用expdp 和impdp 实用程序时,其转储文件只能存放在Directory 对象指定的OS 目录中,而不能
直接指定OS 目录。因此,实用时必须首先创建Directory 对象,并且为运行expdp 和impdp 实用程序的数
据库用户授予使用Directory 对象的权限,如下所示:
Sql> connect sys/password as sysdba ;
已连接 。
Sql> create directory dump_dir as ‘e:\dump’ ;
目录已创建 。
Sql> grant read , write on directory dump_dir to system , myuser ;
授权成功 。
17. 使用exppd 导出数据 (导出表)
命令语法是:expdp username/password parameter1[, parameter2 ,……….]
其中,username 表示用户名;password 表示用户口令;parameter1,parameter2 …….表示参数。
一.估计转储文件的大小
C:\expdp system/password full=y estimate_only=y estimate=statistics nologfile=y
二.导出表
是指将一个或多个表的结构及其数据导出到转储文件中。导出表时,每次只能导出一个方
案中的表 。
例:导出myuser 方案的department 和student 表的过程
C:\expdp myuser/password directory=dump_dir dumpfile=myusertab.Dmp
logfile=myusertab.log tables=department,student
18. 导出方案
是指将一个或多个方案的所有对象结构及数据导出到转储文件中。
例:导出myuser 方案的过程。
C:\expdp myuser/password directory=dump_dir dumpfile=myuser.dmp logfile=myuser.log
schemas=myuser job_name=exp_myuser_schema
19. 导出数据库
是指将数据库的所有对象及数据导出到转储文件中。
为了使用参数文件导出数据库,先在e:\dump 目录创建myparfile.txt 参数文件,其内容如下:
Dumpfile=dump_dir:mydb_%U.dmp
Logfile=dump_dir:mydb.log
Filesize=100m
Job_name=exp_full
Full=y
该参数文件表示,所有转储文件和日志文件都存储在dump_dir 所指定的目录中,转储文件的命
名方式是mydb_%U.dmp,日志文件的名称是 mydb.log ;每个转储文件都不超过100mb;该作业的
名称是exp_full ;导出的是整个数据库。
C:\expdp system/password parfile=e:\dump\myparfile.txt
执行命令后,会将数据库的所有对象导出到转储文件mydb_01.dmp 中,该转储文件位于dump_dir
指定的OS 目录中。在该OS 目录中还有导出日志文件mydb.log ,它记录了上述整个导出过程的屏幕
输出信息,可以从中看到输出的内容。
注意:导出整个数据库的时间比较长,且不易完全成功,所以建议不要导出导入整个数据库。
20.
21. 使用impdp 导入数据
格式是: impdp username/password parameter1 [, parameter2, ……….]
其中,username 是用户名。Password 是用户密码,paramter1,paramter2…..表示参数
22. 导入数据
如果不小心删除了某个表中的数据,如下所示:
Sql>connect scott/password
Sql>delete from student ;
已删除 3 行 。
可以从转储文件中将其导入 。
[例] 导入scott 方案的student 表数据的过程 。
Step 1:提交事务 。
Sql>commit ;
Step 2:从转储文件中导入数据 。
C:\impdp scott/password directory=dump_dir dumpfile=scott.dmp logfile=sacott.log
Content=data_only tables=student
23. 导入表
如果不小心删除了某个表, 如:
Sql>drop table student CASCADE constraints ;
表已删除 。
Sql>desc student
对象不存在 。
可从转储文件中将其导入
[例] 导入scott 方案的student 表的过程 。
C:\impdp scott/password directory=dump_dir dumpfile=scott.dmp logfile=scott.log
Tables=student
24. 导入方案
如果不小心删除了某个方案,即用户,如:
Sql>connect system/password
Sql>drop user myuser cascade ;
可以从转储文件中将其导入 。
[例] 导入myuser 方案的过程 。
Step1:创建用户。
Sql>grant connect , resource to myuser identified by password ;
Sql>
Sql>alter user myuser default tablespace xxzqb temporary tablespace temp ;
用户已更改 。
Step2:从转储文件中导入方案:
C:\impdp system/password directory=dump_dir dumpfile=scott.dmp logfile=scott.log
schemas=scott job_name=imp_schemas
25. 545
26. 数据库OS 热备份
Step1: c:\sqlplus /nolog
Step2: sql>connect sys/password as sysdba ;
Step3: 改变为归档模式
Sql>alter system archive log current ;
Step4:
27. 545
28. 案例一。 非归档模式下的备份与恢复
备份方案 : 采用OS 冷备份
1. 连接数据库,并创建测试表
Sql>connect sys/password as sysdba;
Sql>create table test (a int);
Sql>insert into test values(1);
Sql>commit ;
2. 备份数据库
Sql>@colbak.sql 或在 DOS 下 SVRGRL @colbak.sql
补充:colbak.sql 脚本的内容
--connect database
Connect sys/3245326 as sysdba;
--shutdown database
Shutdown immediate ;
--Copy datafile
!xcopy d:\oracle\oradata\test\*.dbf d:\database/H/R ;
--copy controlfile
!xcopy d:\oracle\oradata\test\*.ctl d:\database/H/R
--copy logfile
!xcopy d:\oracle\oradata\test\*.log d:\database/H/R
--startup database
startup
3. 再插入数据
Sql>insert into test values(2);
Sql>commit ;
4. 关闭数据库
Sql>shutdown immediate ;
5. 损坏一个或多个数据文件,如删除user01.Dbf
C:\del d:\oracle\oradata\test\user01.dbf
6. 重新启动数据库,会出现错误。在报警文件(在bdump 目录下)中,会有更详细的信息。
7. 拷贝备份到原来位置(restore 过程)
C:\xcopy d:\database\*.* d:\oracle\oradata\test/H/R/S
8. 打开数据库,检查数据
Sql>alter database open ;
Sql>select * from test ;
可以发现,数据库恢复成功,但在备份之后与崩溃之前的数据丢失了。
29. 案例二。 归档模式下丢失或损坏一个数据文件
1. 连接数据库,创建测试表并插入数据
Sql>connect sys/3245326 as sysdba ;
Sql>create table test (a int) tablespace users;
Sql>insert into test values(1);
Sql>commit ;
2. 备份数据库
Sql>@hotbak.sql 或在DOS 下 svrmgrl @hotbak.sql
补充:hotbak.sql 脚本的内容:
--connect database
Connect sys/3245326 as sysdba
--archive
Alter system archive log current;
--start
Alter tablespace system begin backup;
!xcopy d:\oracle\oradata\test\system01.dbf d:\database/H/R
Alter tablespace system end backup ;
Alter tablespace xxzqb begin backup ;
!xcopy d:\oracle\oradata\test\xxzqb01.dbf d:\database/H/R
Alter tablespace xxzqb end backup ;
Alter tablespace users begin backup ;
!xcopy d:\oracle\oradata\test\user01.dbf d:\database/H/R
Alter tablespace users end backup ;
Alter tablespace tools begin backup ;
!xcopy d:\oracle\oradata\test\tool01.dbf d:\database/H/R
Alter tablespace tools end backup ;
Alter tablespace indx begin backup ;
!xcopy d:\oracle\oradata\test\indx01.dbf d:\database/H/R
Alter tablespace indx end backup ;
---end
--Bak control file
--binary
Alter database backup controlfile to ‘d:\database\controlbinbak.000’;
--ascii
Alter database backup controlfile to trace;
Alter system archive log current ;
3. 再在测试表中插入数据
Sql>insert into test values (2);
Sql>commit ;
Sql>alter system switch logfile;
Sql>alter system switch logfile ;
4. 关闭数据库,模拟丢失数据文件
Sql>shutdown immediate ;
C:\del d:\oracle\oradata\test\user01.dbf
5. 启动数据库错误,脱机该数据文件。
Sql>startup ;
出现错误信息。可以查看bdump 目录下的报警日志文件,更详细。或:
Sql>select * from v$recover_file ;
脱机数据文件:
Sql>alter database datafile 3 offline drop ;
6. 打开数据库,拷贝备份回来(restore),恢复(recover)该数据文件,并联机。
Sql>alter database open ;
从备份处拷贝备份
Copy d:\database\user01.dbf d:\oracle\oradata\test
恢复该数据据文件
Sql>recover datafile 3 ;
恢复成功,联机该数据文件
Sql>alter database datafile 3 online ;
7. 检查数据库的数据(完全恢复)
Sql>select * from test ;
说明:1. 采用热备份,需要运行在归档模式下(archive),可以实现数据库的完全恢复,也就是说从
备份后到数据库崩溃是的数据都不会丢失。
2. 可以采用全备份数据库的方式,对于特殊情况,也可以只备份特定的数据文件,乳汁备份
用户表空间。
3. 如果在恢复过程中,发现损坏的是多个数据文件,即可以采用一个一个数据文件的恢复方
法(第5 步中需要对数据文件一一脱机,第6 步中需要对数据文件分别恢复),也可以采用
整个数据库的恢复方法。
4. 如果是系统表空间的损坏,不宜采用此方法。
30.
31. RMAN 备份方案
RMAN 也可以进行联机备份,而且备份与恢复方法将比OS 备份更简单可靠。
1. 连接数据库,创建测试表并插入数据
Sql>connect sys/3245326 as sydba ;
Sql>create tables test (a int ) tablespace users ;
Sql>insert into test values (1);
Sql>commit ;
2. 备份数据表空间 users
C:\rman
32. 丢失多个数据文件,实现整个数据库的恢复
OS 备份方案
OS 备份归档模式下损坏(丢失)多个数据文件,进行整个数据库的恢复
1. 连接数据库,创建测试表并插入记录
Sql>connect sys/3245326 as sysdba
Sql>create table test(a int)
Sql>insert into test values(1)
Sql>commit ;
2. 备份数据库。备份除临时数据文件后的所有数据文件
Sql>@hotbak.sql 或sql>start hotbak.sql 或在DOS 下 svrmgrl @hotbak.sql
3. 继续在测试表中插入记录
Sql>insert into test values (2);
Sql>commit ;
Sql>alter system switch logfile ;
Sql>alter system switch logfile ;
4. 关闭数据库,模拟丢失数据文件
Sql>shutdown immediate ;
C:\del d:\oracle\oradata\test\system01.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
可以看到出现错误信息。
详细信息可查看报警文件(bdump 目录下)
通过查询V$recover_file 可以看到
Sql>select * from v$recover_file ;
有四个文件需要恢复。
6. 拷贝备份回到原点(restore),并且开始恢复数据库(recover)
Restore 过程:
C:\copy d:\database\system01.dbf d:\oracle\oradata\test\
C:\copy d:\database\indx01.dbf d:\oracle\oradata\test\
C:\copy d:\database\tools01.dbf d:\oracle\oradata\test\
C:\copy d:\database\rbs01.dbf d:\oracle\oradata\test\
Recover 过程:
Sql>recover database ;
7. 打开数据库,检查数据库的数据(完全恢复)
Sql>alter database open ;
Sql>select * from test ;
说明: 1. 只要有备份与归档存在,就可以实现数据库的完全恢复(不丢失数据);
2. 适合于丢失大量数据文件,或包含系统数据文件在内的数据库的恢复;
3. 恢复过程在Mount 下进行,如果恢复成功,再打开数据库,down 机时间可能要长一些。
33. RMAN 备份方案。
34. 545
35. 4545454
36. 54545
37. 454545
38. 45454
39. 54
40. 54
41. 5
42. 45
43. 454
44. 54
45. 5
46. 45
47. 4
48. 54
49. 5
50. 4

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11088128/viewspace-15516/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-12-10

  • 博文量
    91
  • 访问量
    219267