Oracle10g RMAN之nocatalog备份与还原

更新时间:2024-01-15 17:05:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Oracle10g RMAN之nocatalog备份与还原

1. 做RMAN备份的准备工作。

1

Oracle10G的RMAN备份机制一共有三种方式,第一种:将Target Database(主数据库)备份到Auxiliary database(从数据库)。第二种:将Target Database(主数据库)备份到catalog database(备份数据库)。第三种:就是本文将要提到的nocatalog方式备份。Nocatalog方式备份,就是将Targetdatabase控制信息保存在controlfile中,然后将物理备份文件存放到DISK(磁盘空间)或者SBT TAPE(磁带空间)中。 2.

这里讲一下oracle 10g中关于数据备份,都需要备份些什么东西。图上半部分可以不用看,下半部分除了口令文件以及重做日志文件以外,(口令文件可以在数据库中添加所以不用备份,重做日志文件不能被备份所以不用备份。)其他包括数据库的参数文件,数据文件,控制文件,归档日志文件等这些内容都是需要备份的,以便将来可以恢复。

3

我们打开Oracle 10G的web控制台,就可以在他的管理页面中看到他的控制文件,表空间文件,数据文件,以及归档日志文件。

4

5

这个是控制文件。 6

7

这个是表空间文件 8

9

这些是数据文件。 10

这些是归档日志文件。 11

进入SQLPLUS 。在dos命令行中输入SQLPLUS /NOLOG。 12

输入conn /as sysdba连接数据库。 13

输入archive log list检查数据库状态。如果数据库日志模式为非存档模式,这样的状态是不能够做rman备份的,因为归档日志不生效。 14

输入show parameter db_recovery。检查备份文件保存大小以及备份文件存放路径。 15

输入Shutdown immediate,强制停止数据库以及oracle例程。 16

输入Quit退出SQLPLUS. 22

输入rman nocatalog,最好是将路径用CD 方式切换到oracle的BIN目录中,因为如果系统中存在其他的RMAN的执行程序,那么cmd命令行有可能会调用到其他的rman语句,导致ORACLE备份失败。 23

输入CONNECT TARGET / 进行目标数据库的连接。只有rman连接到了对应的数据库才能将对应数据库的数据进行备份。 24

当然,如果输入connect target sbnetdba/sbnetdba@netdb 也可以连接到netdb数据库。这样就是用指定用户名密码连接指定的数据库,之前直接输入/的连接方式,是指使用系统默认的帐户和密码连接默认的数据库,因为目前这个环境中只有NETDB这样一个数据库,所以输入/也是不会出错的。 25

先输入list backup;看看之前是否有做过rman的备份,圈红的地方没有东西,证明之前没有rman日志信息。 26

执行backup database;这个语句指的是全备份以连接的指定数据库,使用这个语句会调用rman的默认值,对指定数据库的数据文件以及控制文件进行备份。 27

标红的第一部分备份的是数据库文件,通过devtype=disk看出备份文件将保存到磁盘中。使用的备份通道为ORA_DISK_1,备份了包括TAB_DATA、IDX_DATA、system01.dbf、等数据文件,备份的文件保存到d:\\oracle\\product\\10.2.0\\flash_recovery_area\\netdb\\backupset\\2009_07_16\\文件夹中。

标红的第二部分备份的是控制文件以及参数文件,也就是control01.ctl、control02.ctl、control03.ctl三个文件和d:\\oracle\\product\\10.2.0\\db1\\dbs\\spfilenetdb.ora文件。同样备份到d:\\oracle\\product\\10.2.0\\flash_recovery_area\\netdb\\backupset\\2009_07_16\\文件夹中。 28

我们也可以用list backup;语句来看看备份日志保存的情况。 29

我们使用SHOW ALL;命令,看看目前RMAN的默认配置参数是什么。可以发现configuer controlfile autobackup off;#default,控制文件的自动备份是出于关闭状态的。这个需要将它改为on的状态,如果不改为ON的状态,那么等到数据库的控制文件出现问题的时候,将无法正确的找到最新的控制文件。从而有可能造成还原数据库失败。所以我们需要将configuer controlfile autobackup off;#default改成on; 30

执行语句configuer controlfile autobackup on;就可以了。这一步其实可以在备份数据库之前就执行。

我们现在可以到d:\\oracle\\product\\10.2.0\\flash_recovery_area\\netdb\\backupset\\2009_07_16\\中去看看数据库备份的情况。图上这个是归档日志的备份。 31

这个是控制文件以及数据文件的备份。 33

34

理解了全备份以后,我们在引入增量备份的概念,这里我们使用backup incremental level=0 database。可以对数据库进行增量备份。LEVEL=0的增量其实相当于就是全备份。只不过,如果需要做LEVEL=1的增量就只能在LEVEL=0的基础上来做。在全备份的基础上是不能惊醒增量备份的。语句中添加了PLUS ARCHIVELOG这个参量,其实就是在做0级备份的时候将ARCHIVELOG归档日志也做备份。加上这句参数就可以实现数据库的参数文件,数据文件,控制文件,归档日志文件的全部备份。 35

我们用list backup;语句来看看我们的rman备份情况。由于之前做了全备份,全备份就已经生成了两个备份文件,一个数据备份文件,一个是控制备份文件。所以新的备份参数就是从3开始的。图中第一部分是归档日志的备份,第二部分是数据文件的备份,第三部分也是存档日志的备份,因为我们之前已经开始了存档模式的自动备份,所以随着备份时间的进行,也会生成新的存档日志备份。 36

这个部分显示的是保存的控制文件和参量文件SPFILE。 37

我们现在可以到d:\\oracle\\product\\10.2.0\\flash_recovery_area\\netdb\\archivelog\\2009_07_16\\中看到存档日志备份的文件。 38

我们执行backup incremental level=1 database plus archivelog delete input;语句,执行增量1的备份,这个备份就是基于增量0的备份。Delete imput语句就是在完成备份的时候删除原来的存档日志,以节约生产数据库的空间。这个语句可以添加也可以不添加。 39

我们用list backup;可以看到因为是基于增量0的备份,所以数据文件的增量只有1.13M,而如果我们用全备份的话,数据文件的增量似乎514M,当然如果在实际应用中可能更大。所以做增量备份是很有必要的。 40

下面我们在提一下关于数据文件的单独备份,或者说是表空间的单独备份。

我们执行REPORT SCHEMA;语句通过这个语句我们可以看到我们的数据文件在数据库结构中的大小,位置,以及对应的名称代号。我们做数据文件备份的时候可以直接通过名称代号来备份还原数据文件。 41

我们执行backup tablespace tab_data;可以备份数据库tab_data表空间。 42

通过list backup;我们看到关于TAB_DATA数据表空间的备份和控制文件的备份。

3. Rman的还原。

43

这个是SPFILE参量文件,如果该文件出现问题。下面我们来将下应该怎么还原该文件。 44

我们先把该文件重命名,这样模拟该文件不存在。我们来还原。 45

首先我们进入RMAN程序。怎么进前面已经说了。然后连接指定数据库。这些准备工作完成以后,我们执行SHUTDOWN IMMEDIATE;语句,强制关闭数据库。SPFILE是数据库参量文件,是非常重要的文件,所以重新还原必须是在nomount模式下。nomount模式就是无数据库的实例状态。所以我们先退出数据库,关闭实例。 46

然后我们执行STARTUP NOMOUNT;语句,由于没有spfile数据库参量文件,所以只能连接到目标数据库,不能检索到SPFILE信息。所以现在登陆的实例状态并不能找到数据库的信息。STARTUP NOMOUNT;执行连接数据库以后,我们需要将数据库的ID号分配给数据库认识。所以执行set dbid 3835078233,“3835078233”在连接数据库的时候就可以看到,见 图23。这个是数据库的唯一ID号。通过这个ID号才能还原原来的数据库参量信息。 47

我们执行RESTORE SPFILE FROM AUTOBACKUP;语句,通过自动查找进行还原spfile文件。这里提示说他自动找了7月10日到7月16日之间的所有备份文件,没有找到关于SPFILE的备份,因为spfile的备份是和控制文件备份在一起的。所以没有识别到。没有识别到没有关系。我们将最新的控制文件的备份指派给他。 48

49

我们执行restore spfile from ‘d:\\oracle\\product\\10.2.0\\flash_recovery_area\\netdb\\autobackup\\2009_07_16\\01_MF_S_692337955_55WFO45V_.BKP’;这样就可以然数据库到指定的目录去找寻备份文件,从而还原SPFILE文件。 50

通过这个图我们看可以看到SPFILENETDB.ORA数据库参量文件已经还原了。 51

下面我们来模拟控制文件丢失的还原。我们先把控制文件CONTROL01.CTL等文件都注释掉。

52

和还原spfile一样,控制文件对于数据库来说也是极其重要的。所以这些重要的文件都只能在nomount的状态下进行还原。和SPFILE还原一样,我们先登录到RMAN,然后连接数据库,这些我就不重复了。然后SHUTDOWN IMMEDIATE;强制关闭数据库以及数据库实例。 53

如果我们现在执行startup的话,因为没有控制文件,所以就会报错,表示控制文件时出错。 54

所以我们只能先启动startup nomount;开启数据库实例。并不关联对应数据库。 55

然后执行restore controlfile from autobackup;语句,还原控制文件。57 56

我们就可以在D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\NETDB文件夹中看到控制文件了。 57

现在需要将数据库实例中的指定数据库装载起来,我们执行alter database mount; 58

装载以后我们启动alter database open resetlogs;重新刷新归档日志。但是发现报错,提示说还原的控制文件,与现在的日志对不上。 59

我们需要将老的控制文件,编译到新的日志中。执行recover database;这样来将控制文件和归档日志统一起来,但是,正是因为有了控制文件和归档文件的不一致,所以会导致还原的控制文件到新的归档日志时间段之间的所有有关控制文件的信息都将丢失。 60

执行alter database open resetlogs;开启数据库并重构日志。

这里提一个建议,一旦执行了resetlogs命令以后,一定要重新做一次全备份,或者0增量备份。因为当重构了日志文件以后,以前备份的数据将都会与新的日志不一致。这样的后果将直接导致如果再一次数据库出错,或者数据库文件丢失,就无法很顺畅的还原到新的日志中来。 61

我们来做一下关于数据文件丢失的还原,我们先把TAB_DATA和IDX_DATA两个数据文件拿来删除了。 62

现在没有这两个文件了。 63

我们可以用report schema;语句看到TAB_DATA和IDX_DATA两个文件的大小都变成了0了。现在我们开始还原这两个文件。 64

我们可以看到因为TAB_DATA在数据库的参量代号是5,IDX_DATA在数据库的参量代号是6。所以我们可以直接用5和6来代替tab_data和idx_data。

我们先执行SQL语句ALTER DATABASE DATAFILE 5 OFFLINE;将数据文件设置为离线状态,这样才能对它进行回复。 65

本文来源:https://www.bwwdw.com/article/l6io.html

Top