1、Oracle10g RMAN之nocatalog备份与还原Oracle10g RMAN之nocatalog备份与还原1. 做RMAN备份的准备工作。1Oracle10G的RMAN备份机制一共有三种方式,第一种:将Target Database(主数据库)备份到Auxiliary database(从数据库)。第二种:将Target Database(主数据库)备份到catalog database(备份数据库)。第三种:就是本文将要提到的nocatalog方式备份。Nocatalog方式备份,就是将Targetdatabase控制信息保存在controlfile中,然后将物理备份文件存放到DI
2、SK(磁盘空间)或者SBT TAPE(磁带空间)中。2.这里讲一下oracle 10g中关于数据备份,都需要备份些什么东西。图上半部分可以不用看,下半部分除了口令文件以及重做日志文件以外,(口令文件可以在数据库中添加所以不用备份,重做日志文件不能被备份所以不用备份。)其他包括数据库的参数文件,数据文件,控制文件,归档日志文件等这些内容都是需要备份的,以便将来可以恢复。3我们打开Oracle 10G的web控制台,就可以在他的管理页面中看到他的控制文件,表空间文件,数据文件,以及归档日志文件。45这个是控制文件。67这个是表空间文件89这些是数据文件。10这些是归档日志文件。11进入SQLPLU
3、S 。在dos命令行中输入SQLPLUS /NOLOG。12输入conn /as sysdba连接数据库。13输入archive log list检查数据库状态。如果数据库日志模式为非存档模式,这样的状态是不能够做rman备份的,因为归档日志不生效。14输入show parameter db_recovery。检查备份文件保存大小以及备份文件存放路径。15输入Shutdown immediate,强制停止数据库以及oracle例程。16输入connect /as sysdba,重新连接空闲例程。17输入STARTUP MOUNT,开启例程并装载数据库。之所以执行关闭数据库以及例程,然后再重新打
4、开是为了避免之前连接数据库的默认值不正确。所以最好是重新连接。18连接完数据库就开始改数据库归档方式了。输入alter database archivelog;,切换数据库为归档模式。19输入Alter system switch logfile;开启自动存档。20再次输入archive log list;检查数据库日志模式是否变为存档模式。是否开启自动存档。等完成这些准备工作后,即可开始rman备份数据库了。2. Rman的备份21输入Quit退出SQLPLUS.22输入rman nocatalog,最好是将路径用CD 方式切换到oracle的BIN目录中,因为如果系统中存在其他的RMAN的
5、执行程序,那么cmd命令行有可能会调用到其他的rman语句,导致ORACLE备份失败。23输入CONNECT TARGET / 进行目标数据库的连接。只有rman连接到了对应的数据库才能将对应数据库的数据进行备份。24当然,如果输入connect target sbnetdba/sbnetdbanetdb 也可以连接到netdb数据库。这样就是用指定用户名密码连接指定的数据库,之前直接输入/的连接方式,是指使用系统默认的帐户和密码连接默认的数据库,因为目前这个环境中只有NETDB这样一个数据库,所以输入/也是不会出错的。25先输入list backup;看看之前是否有做过rman的备份,圈红的
6、地方没有东西,证明之前没有rman日志信息。26执行backup database;这个语句指的是全备份以连接的指定数据库,使用这个语句会调用rman的默认值,对指定数据库的数据文件以及控制文件进行备份。27标红的第一部分备份的是数据库文件,通过devtype=disk看出备份文件将保存到磁盘中。使用的备份通道为ORA_DISK_1,备份了包括TAB_DATA、IDX_DATA、system01.dbf、等数据文件,备份的文件保存到d:oracleproduct10.2.0flash_recovery_areanetdbbackupset2009_07_16文件夹中。标红的第二部分备份的是控制
7、文件以及参数文件,也就是control01.ctl、control02.ctl、control03.ctl三个文件和d:oracleproduct10.2.0db1dbsspfilenetdb.ora文件。同样备份到d:oracleproduct10.2.0flash_recovery_areanetdbbackupset2009_07_16文件夹中。28我们也可以用list backup;语句来看看备份日志保存的情况。29我们使用SHOW ALL;命令,看看目前RMAN的默认配置参数是什么。可以发现configuer controlfile autobackup off;#default,控
8、制文件的自动备份是出于关闭状态的。这个需要将它改为on的状态,如果不改为ON的状态,那么等到数据库的控制文件出现问题的时候,将无法正确的找到最新的控制文件。从而有可能造成还原数据库失败。所以我们需要将configuer controlfile autobackup off;#default改成on;30执行语句configuer controlfile autobackup on;就可以了。这一步其实可以在备份数据库之前就执行。我们现在可以到d:oracleproduct10.2.0flash_recovery_areanetdbbackupset2009_07_16中去看看数据库备份的情况。
9、图上这个是归档日志的备份。31这个是控制文件以及数据文件的备份。3334理解了全备份以后,我们在引入增量备份的概念,这里我们使用backup incremental level=0 database。可以对数据库进行增量备份。LEVEL=0的增量其实相当于就是全备份。只不过,如果需要做LEVEL=1的增量就只能在LEVEL=0的基础上来做。在全备份的基础上是不能惊醒增量备份的。语句中添加了PLUS ARCHIVELOG这个参量,其实就是在做0级备份的时候将ARCHIVELOG归档日志也做备份。加上这句参数就可以实现数据库的参数文件,数据文件,控制文件,归档日志文件的全部备份。35我们用list
10、 backup;语句来看看我们的rman备份情况。由于之前做了全备份,全备份就已经生成了两个备份文件,一个数据备份文件,一个是控制备份文件。所以新的备份参数就是从3开始的。图中第一部分是归档日志的备份,第二部分是数据文件的备份,第三部分也是存档日志的备份,因为我们之前已经开始了存档模式的自动备份,所以随着备份时间的进行,也会生成新的存档日志备份。36这个部分显示的是保存的控制文件和参量文件SPFILE。37我们现在可以到d:oracleproduct10.2.0flash_recovery_areanetdbarchivelog2009_07_16中看到存档日志备份的文件。38我们执行back
11、up incremental level=1 database plus archivelog delete input;语句,执行增量1的备份,这个备份就是基于增量0的备份。Delete imput语句就是在完成备份的时候删除原来的存档日志,以节约生产数据库的空间。这个语句可以添加也可以不添加。39我们用list backup;可以看到因为是基于增量0的备份,所以数据文件的增量只有1.13M,而如果我们用全备份的话,数据文件的增量似乎514M,当然如果在实际应用中可能更大。所以做增量备份是很有必要的。40下面我们在提一下关于数据文件的单独备份,或者说是表空间的单独备份。我们执行REPORT
12、SCHEMA;语句通过这个语句我们可以看到我们的数据文件在数据库结构中的大小,位置,以及对应的名称代号。我们做数据文件备份的时候可以直接通过名称代号来备份还原数据文件。41我们执行backup tablespace tab_data;可以备份数据库tab_data表空间。42通过list backup;我们看到关于TAB_DATA数据表空间的备份和控制文件的备份。3. Rman的还原。43这个是SPFILE参量文件,如果该文件出现问题。下面我们来将下应该怎么还原该文件。44我们先把该文件重命名,这样模拟该文件不存在。我们来还原。45首先我们进入RMAN程序。怎么进前面已经说了。然后连接指定数据
13、库。这些准备工作完成以后,我们执行SHUTDOWN IMMEDIATE;语句,强制关闭数据库。SPFILE是数据库参量文件,是非常重要的文件,所以重新还原必须是在nomount模式下。nomount模式就是无数据库的实例状态。所以我们先退出数据库,关闭实例。46然后我们执行STARTUP NOMOUNT;语句,由于没有spfile数据库参量文件,所以只能连接到目标数据库,不能检索到SPFILE信息。所以现在登陆的实例状态并不能找到数据库的信息。STARTUP NOMOUNT;执行连接数据库以后,我们需要将数据库的ID号分配给数据库认识。所以执行set dbid 3835078233,“3835
14、078233”在连接数据库的时候就可以看到,见 图23。这个是数据库的唯一ID号。通过这个ID号才能还原原来的数据库参量信息。47我们执行RESTORE SPFILE FROM AUTOBACKUP;语句,通过自动查找进行还原spfile文件。这里提示说他自动找了7月10日到7月16日之间的所有备份文件,没有找到关于SPFILE的备份,因为spfile的备份是和控制文件备份在一起的。所以没有识别到。没有识别到没有关系。我们将最新的控制文件的备份指派给他。4849我们执行restore spfile from d:oracleproduct10.2.0flash_recovery_areanet
15、dbautobackup2009_07_1601_MF_S_692337955_55WFO45V_.BKP;这样就可以然数据库到指定的目录去找寻备份文件,从而还原SPFILE文件。50通过这个图我们看可以看到SPFILENETDB.ORA数据库参量文件已经还原了。51下面我们来模拟控制文件丢失的还原。我们先把控制文件CONTROL01.CTL等文件都注释掉。52和还原spfile一样,控制文件对于数据库来说也是极其重要的。所以这些重要的文件都只能在nomount的状态下进行还原。和SPFILE还原一样,我们先登录到RMAN,然后连接数据库,这些我就不重复了。然后SHUTDOWN IMMEDIA
16、TE;强制关闭数据库以及数据库实例。53如果我们现在执行startup的话,因为没有控制文件,所以就会报错,表示控制文件时出错。54所以我们只能先启动startup nomount;开启数据库实例。并不关联对应数据库。55然后执行restore controlfile from autobackup;语句,还原控制文件。5756我们就可以在D:ORACLEPRODUCT10.2.0ORADATANETDB文件夹中看到控制文件了。57现在需要将数据库实例中的指定数据库装载起来,我们执行alter database mount;58装载以后我们启动alter database open reset
17、logs;重新刷新归档日志。但是发现报错,提示说还原的控制文件,与现在的日志对不上。59我们需要将老的控制文件,编译到新的日志中。执行recover database;这样来将控制文件和归档日志统一起来,但是,正是因为有了控制文件和归档文件的不一致,所以会导致还原的控制文件到新的归档日志时间段之间的所有有关控制文件的信息都将丢失。60执行alter database open resetlogs;开启数据库并重构日志。这里提一个建议,一旦执行了resetlogs命令以后,一定要重新做一次全备份,或者0增量备份。因为当重构了日志文件以后,以前备份的数据将都会与新的日志不一致。这样的后果将直接导致
18、如果再一次数据库出错,或者数据库文件丢失,就无法很顺畅的还原到新的日志中来。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
19、;将数据文件设置为离线状态,这样才能对它进行回复。65然后通过RESTORE DATAFILE 5;命令对tab_data文件进行还原。66然后通过RESTORE DATAFILE 6;命令对idx_data文件进行还原。67 还原完成后执行recover datafile 5;因为tab_data的备份文件和新归档时间不一致,所以需要RECOVER一次。如果直接执行将数据文件直接改为online状态的话,就会报resetlogs错误。68最后等两个数据文件都recover完成以后执行SQL语句alternative database datafile 6 online;将两个数据库文件切换为
20、在线状态。即可使用。6970最后我们来模拟一个最完全的破坏。将所有的数据文件、存档文件、控制文件、参量文件都破环的情况下进行数据库的还原。这种是个最极端的情况。应当尽量避免存档日志文件的丢失。71当所有的数据库文件都丢失以后,RMAN就已经连接不到数据库了。所以只能使用SQLPLUS的方式连接。所以我们先执行SQLPLUS /NOLOG,然后连接空闲例程conn /as sysdba,将所有例程关闭:shutdown abort; 然后退出quit,重新用rman target /登录。提示连接到目标数据库,但是数据库处于未启动状态。72执行Startup nomount;启动ORACLE实例
21、。73先恢复控制文件,执行语句restore controlfile from autobackup;74还原数据文件需要先加载数据库,所以还原数据库文件是在mount环境中执行的。所以需要先执行alter database mount;加载数据库,并释放通道。然后在还原数据文件。75执行restore database;还原数据文件。76然后我们recover database;,发现数据库找不到存档日志,所以RECOVER无法进行。到了这一步我们就得想办法先恢复存档日志了。77我们先试试在sqlplus中能不能通过recover database until cancel;来完成LOG文件
22、的重构。结果还是不能成功。78我们重新创建spfile参数文件。执行create pfile from spfile;79用记事本打开spfilenetdb.ora文件80在spfilenetdb.ora的末尾添加上“*._allow_resetlogs_corruption=ture”这样一句话,意思是允许重新创建新的log文件。81我们先shutdown immediate 关闭数据库,然后重新加载mount。执行startup mount;重新刷新ORACLE例程。82等数据库装载完毕以后。执行ALTER DATABASE OPEN RESETLOGS;重构日志文件并打开数据库。83到目前为止,所有的文件都已经还原。但是由于日志是通过重构的方式找回的。所以新的日志将重新从系列1开始排号。这样的新的存档日志文件与老的数据文件将不能同步。所以最好是重新在做一次增量0的备份。这样在新的备份中将能够尽可能的将不同的存档日志与数据文件同步起来。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1