Oracle10g RMAN之nocatalog备份与还原.docx
《Oracle10g RMAN之nocatalog备份与还原.docx》由会员分享,可在线阅读,更多相关《Oracle10g RMAN之nocatalog备份与还原.docx(65页珍藏版)》请在冰豆网上搜索。
![Oracle10g RMAN之nocatalog备份与还原.docx](https://file1.bdocx.com/fileroot1/2023-1/22/322f3d68-fb76-4b15-aa86-8d93747ad30c/322f3d68-fb76-4b15-aa86-8d93747ad30c1.gif)
Oracle10gRMAN之nocatalog备份与还原
Oracle10gRMAN之nocatalog备份与还原
1.做RMAN备份的准备工作。
1
Oracle10G的RMAN备份机制一共有三种方式,第一种:
将TargetDatabase(主数据库)备份到Auxiliarydatabase(从数据库)。
第二种:
将TargetDatabase(主数据库)备份到catalogdatabase(备份数据库)。
第三种:
就是本文将要提到的nocatalog方式备份。
Nocatalog方式备份,就是将Targetdatabase控制信息保存在controlfile中,然后将物理备份文件存放到DISK(磁盘空间)或者SBTTAPE(磁带空间)中。
2.
这里讲一下oracle10g中关于数据备份,都需要备份些什么东西。
图上半部分可以不用看,下半部分除了口令文件以及重做日志文件以外,(口令文件可以在数据库中添加所以不用备份,重做日志文件不能被备份所以不用备份。
)其他包括数据库的参数文件,数据文件,控制文件,归档日志文件等这些内容都是需要备份的,以便将来可以恢复。
3
我们打开Oracle10G的web控制台,就可以在他的管理页面中看到他的控制文件,表空间文件,数据文件,以及归档日志文件。
4
5
这个是控制文件。
6
7
这个是表空间文件
8
9
这些是数据文件。
10
这些是归档日志文件。
11
进入SQLPLUS。
在dos命令行中输入SQLPLUS/NOLOG。
12
输入conn/assysdba连接数据库。
13
输入archiveloglist检查数据库状态。
如果数据库日志模式为非存档模式,这样的状态是不能够做rman备份的,因为归档日志不生效。
14
输入showparameterdb_recovery。
检查备份文件保存大小以及备份文件存放路径。
15
输入Shutdownimmediate,强制停止数据库以及oracle例程。
16
输入connect/assysdba,重新连接空闲例程。
17
输入STARTUPMOUNT,开启例程并装载数据库。
之所以执行关闭数据库以及例程,然后再重新打开是为了避免之前连接数据库的默认值不正确。
所以最好是重新连接。
18
连接完数据库就开始改数据库归档方式了。
输入alterdatabasearchivelog;,切换数据库为归档模式。
19
输入Altersystemswitchlogfile;开启自动存档。
20
再次输入archiveloglist;检查数据库日志模式是否变为存档模式。
是否开启自动存档。
等完成这些准备工作后,即可开始rman备份数据库了。
2.Rman的备份
21
输入Quit退出SQLPLUS.
22
输入rmannocatalog,最好是将路径用CD方式切换到oracle的BIN目录中,因为如果系统中存在其他的RMAN的执行程序,那么cmd命令行有可能会调用到其他的rman语句,导致ORACLE备份失败。
23
输入CONNECTTARGET/进行目标数据库的连接。
只有rman连接到了对应的数据库才能将对应数据库的数据进行备份。
24
当然,如果输入connecttargetsbnetdba/sbnetdba@netdb也可以连接到netdb数据库。
这样就是用指定用户名密码连接指定的数据库,之前直接输入/的连接方式,是指使用系统默认的帐户和密码连接默认的数据库,因为目前这个环境中只有NETDB这样一个数据库,所以输入/也是不会出错的。
25
先输入listbackup;看看之前是否有做过rman的备份,圈红的地方没有东西,证明之前没有rman日志信息。
26
执行backupdatabase;这个语句指的是全备份以连接的指定数据库,使用这个语句会调用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
我们也可以用listbackup;语句来看看备份日志保存的情况。
29
我们使用SHOWALL;命令,看看目前RMAN的默认配置参数是什么。
可以发现configuercontrolfileautobackupoff;#default,控制文件的自动备份是出于关闭状态的。
这个需要将它改为on的状态,如果不改为ON的状态,那么等到数据库的控制文件出现问题的时候,将无法正确的找到最新的控制文件。
从而有可能造成还原数据库失败。
所以我们需要将configuercontrolfileautobackupoff;#default改成on;
30
执行语句configuercontrolfileautobackupon;就可以了。
这一步其实可以在备份数据库之前就执行。
我们现在可以到d:
\oracle\product\10.2.0\flash_recovery_area\netdb\backupset\2009_07_16\中去看看数据库备份的情况。
图上这个是归档日志的备份。
31
这个是控制文件以及数据文件的备份。
33
34
理解了全备份以后,我们在引入增量备份的概念,这里我们使用backupincrementallevel=0database。
可以对数据库进行增量备份。
LEVEL=0的增量其实相当于就是全备份。
只不过,如果需要做LEVEL=1的增量就只能在LEVEL=0的基础上来做。
在全备份的基础上是不能惊醒增量备份的。
语句中添加了PLUSARCHIVELOG这个参量,其实就是在做0级备份的时候将ARCHIVELOG归档日志也做备份。
加上这句参数就可以实现数据库的参数文件,数据文件,控制文件,归档日志文件的全部备份。
35
我们用listbackup;语句来看看我们的rman备份情况。
由于之前做了全备份,全备份就已经生成了两个备份文件,一个数据备份文件,一个是控制备份文件。
所以新的备份参数就是从3开始的。
图中第一部分是归档日志的备份,第二部分是数据文件的备份,第三部分也是存档日志的备份,因为我们之前已经开始了存档模式的自动备份,所以随着备份时间的进行,也会生成新的存档日志备份。
36
这个部分显示的是保存的控制文件和参量文件SPFILE。
37
我们现在可以到d:
\oracle\product\10.2.0\flash_recovery_area\netdb\archivelog\2009_07_16\中看到存档日志备份的文件。
38
我们执行backupincrementallevel=1databaseplusarchivelogdeleteinput;语句,执行增量1的备份,这个备份就是基于增量0的备份。
Deleteimput语句就是在完成备份的时候删除原来的存档日志,以节约生产数据库的空间。
这个语句可以添加也可以不添加。
39
我们用listbackup;可以看到因为是基于增量0的备份,所以数据文件的增量只有1.13M,而如果我们用全备份的话,数据文件的增量似乎514M,当然如果在实际应用中可能更大。
所以做增量备份是很有必要的。
40
下面我们在提一下关于数据文件的单独备份,或者说是表空间的单独备份。
我们执行REPORTSCHEMA;语句通过这个语句我们可以看到我们的数据文件在数据库结构中的大小,位置,以及对应的名称代号。
我们做数据文件备份的时候可以直接通过名称代号来备份还原数据文件。
41
我们执行backuptablespacetab_data;可以备份数据库tab_data表空间。
42
通过listbackup;我们看到关于TAB_DATA数据表空间的备份和控制文件的备份。
3.Rman的还原。
43
这个是SPFILE参量文件,如果该文件出现问题。
下面我们来将下应该怎么还原该文件。
44
我们先把该文件重命名,这样模拟该文件不存在。
我们来还原。
45
首先我们进入RMAN程序。
怎么进前面已经说了。
然后连接指定数据库。
这些准备工作完成以后,我们执行SHUTDOWNIMMEDIATE;语句,强制关闭数据库。
SPFILE是数据库参量文件,是非常重要的文件,所以重新还原必须是在nomount模式下。
nomount模式就是无数据库的实例状态。
所以我们先退出数据库,关闭实例。
46
然后我们执行STARTUPNOMOUNT;语句,由于没有spfile数据库参量文件,所以只能连接到目标数据库,不能检索到SPFILE信息。
所以现在登陆的实例状态并不能找到数据库的信息。
STARTUPNOMOUNT;执行连接数据库以后,我们需要将数据库的ID号分配给数据库认识。
所以执行setdbid3835078233,“3835078233”在连接数据库的时候就可以看到,见图23。
这个是数据库的唯一ID号。
通过这个ID号才能还原原来的数据库参量信息。
47
我们执行RESTORESPFILEFROMAUTOBACKUP;语句,通过自动查找进行还原spfile文件。
这里提示说他自动找了7月10日到7月16日之间的所有备份文件,没有找到关于SPFILE的备份,因为spfile的备份是和控制文件备份在一起的。
所以没有识别到。
没有识别到没有关系。
我们将最新的控制文件的备份指派给他。
48
49
我们执行restorespfilefrom‘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,然后连接数据库,这些我就不重复了。
然后SHUTDOWNIMMEDIATE;强制关闭数据库以及数据库实例。
53
如果我们现在执行startup的话,因为没有控制文件,所以就会报错,表示控制文件时出错。
54
所以我们只能先启动startupnomount;开启数据库实例。
并不关联对应数据库。
55
然后执行restorecontrolfilefromautobackup;语句,还原控制文件。
57
56
我们就可以在D:
\ORACLE\PRODUCT\10.2.0\ORADATA\NETDB文件夹中看到控制文件了。
57
现在需要将数据库实例中的指定数据库装载起来,我们执行alterdatabasemount;
58
装载以后我们启动alterdatabaseopenresetlogs;重新刷新归档日志。
但是发现报错,提示说还原的控制文件,与现在的日志对不上。
59
我们需要将老的控制文件,编译到新的日志中。
执行recoverdatabase;这样来将控制文件和归档日志统一起来,但是,正是因为有了控制文件和归档文件的不一致,所以会导致还原的控制文件到新的归档日志时间段之间的所有有关控制文件的信息都将丢失。
60
执行alterdatabaseopenresetlogs;开启数据库并重构日志。
这里提一个建议,一旦执行了resetlogs命令以后,一定要重新做一次全备份,或者0增量备份。
因为当重构了日志文件以后,以前备份的数据将都会与新的日志不一致。
这样的后果将直接导致如果再一次数据库出错,或者数据库文件丢失,就无法很顺畅的还原到新的日志中来。
61
我们来做一下关于数据文件丢失的还原,我们先把TAB_DATA和IDX_DATA两个数据文件拿来删除了。
62
现在没有这两个文件了。
63
我们可以用reportschema;语句看到TAB_DATA和IDX_DATA两个文件的大小都变成了0了。
现在我们开始还原这两个文件。
64
我们可以看到因为TAB_DATA在数据库的参量代号是5,IDX_DATA在数据库的参量代号是6。
所以我们可以直接用5和6来代替tab_data和idx_data。
我们先执行SQL语句ALTERDATABASEDATAFILE5OFFLINE;将数据文件设置为离线状态,这样才能对它进行回复。
65
然后通过RESTOREDATAFILE5;命令对tab_data文件进行还原。
66
然后通过RESTOREDATAFILE6;命令对idx_data文件进行还原。
67
还原完成后执行recoverdatafile5;因为tab_data的备份文件和新归档时间不一致,所以需要RECOVER一次。
如果直接执行将数据文件直接改为online状态的话,就会报resetlogs错误。
68
最后等两个数据文件都recover完成以后执行SQL语句alternativedatabasedatafile6online;将两个数据库文件切换为在线状态。
即可使用。
69
70
最后我们来模拟一个最完全的破坏。
将所有的数据文件、存档文件、控制文件、参量文件都破环的情况下进行数据库的还原。
这种是个最极端的情况。
应当尽量避免存档日志文件的丢失。
71
当所有的数据库文件都丢失以后,RMAN就已经连接不到数据库了。
所以只能使用SQLPLUS的方式连接。
所以我们先执行SQLPLUS/NOLOG,然后连接空闲例程conn/assysdba,将所有例程关闭:
shutdownabort;然后退出quit,重新用rmantarget/登录。
提示连接到目标数据库,但是数据库处于未启动状态。
72
执行Startupnomount;启动ORACLE实例。
73
先恢复控制文件,执行语句restorecontrolfilefromautobackup;
74
还原数据文件需要先加载数据库,所以还原数据库文件是在mount环境中执行的。
所以需要先执行alterdatabasemount;加载数据库,并释放通道。
然后在还原数据文件。
75
执行restoredatabase;还原数据文件。
76
然后我们recoverdatabase;,发现数据库找不到存档日志,所以RECOVER无法进行。
到了这一步我们就得想办法先恢复存档日志了。
77
我们先试试在sqlplus中能不能通过recoverdatabaseuntilcancel;来完成LOG文件的重构。
结果还是不能成功。
78
我们重新创建spfile参数文件。
执行createpfilefromspfile;
79
用记事本打开spfilenetdb.ora文件
80
在spfilenetdb.ora的末尾添加上“*._allow_resetlogs_corruption=’ture’”这样一句话,意思是允许重新创建新的log文件。
81
我们先shutdownimmediate关闭数据库,然后重新加载mount。
执行startupmount;重新刷新ORACLE例程。
82
等数据库装载完毕以后。
执行ALTERDATABASEOPENRESETLOGS;重构日志文件并打开数据库。
83
到目前为止,所有的文件都已经还原。
但是由于日志是通过重构的方式找回的。
所以新的日志将重新从系列1开始排号。
这样的新的存档日志文件与老的数据文件将不能同步。
所以最好是重新在做一次增量0的备份。
这样在新的备份中将能够尽可能的将不同的存档日志与数据文件同步起来。