ORACLE归档模式和非归档模式的利与弊彩民之家论

2019-09-19 01:01 来源:未知

若数据库管理员因为一时粗心,把服务器参数文件丢失了的话,再重新建立服务器参数文件,那可真要命了。因为上面笔者说过,服务器参数文件不能够直接在文本编辑器中修改,而必须要采用Alter命令进行一条条的更改与添加。所以,其重新建立服务期参数文件是一件比较累人的工作。但是,因为服务器参数文件具有管理方便、可以利用RMAN等备份工具进行备份等优点。若为此舍弃了服务期参数文件,而采用文本参数文件,那就有点因小失大了?所以,无论是Oracle官方,还是笔者,都建议数据库管理员采用服务器参数文件来管理数据库的启动参数。

  当数据库处于归档模式时,如果进行日志切换,后台进程将自动生成归档日志文件。归档日志文件的默认存储位置为Oracle数据库安装目录下的RDBMS下。而在实际工作中,数据库管理员往往会改变其存储位置。如出于空间的考虑或者安全方面的考虑,会把归档日志存放在数据文件不同的硬盘中,等等。

转:

但是,需要注意一个问题,即Alter System命令不是万能的。也就是说,其不能够更改服务器参数文件中的所有启动参数。如对于服务器参数文件中的数据库名,就不能够直接利用这个命令进行更改。而必须要先修改初始化参数db_name,然后重新建立控制文件。这也主要是为了提高服务器参数文件的准确率所考虑的。

  三是具体的配置也有所不同。利用后者参数指定归档日志存储位置时,如果配置本地归档位之,则需要指定Location选项;如果是配置远程归档日志位置时,则就需要制定Service选项,这个选项主要用来指定远程数据库的网络服务名。通常情况下,数据库管理员可以同时配置本地归档位置与远程归档位置。

  非归档模式是指不保留重做历史的日志操作模式,只能够用于保护例程失败,而不能够保护介质损坏。如果数据库采用的是日志操作模式的话,则进行日志切换时,新的日志会直接覆盖原有日志文件的内容,不会保留原有日志文件中的数据。 
  这么说听起来可能比较难理解。笔者举一个简单的例子,就会清楚许多。如现在Oracle数据库中有四个日志组,日志序列号分别为11、 12、13、14。当数据库事务变化写满第一个日志组文件(序列号为11)时,Oracle数据库就会自动切换到第二个日志组文件(序列号为12)中。依次类推。当第三个日志组文件(序列号为13)写满时,就会切换到第四个日志组(序列号为14)。当第四个日志组(序列号为14)满时,其就会切换到第一个日志组(序列号为15)。这里,序列号虽然与刚才第一个日志文件组不同,但是日志组仍然是同一个。此时,由于数据库的操作模式选择为非归档模式,所以第一组日志文件(序列号为11)中的内容并没有归档。新的日志文件的内容将直接覆盖第一个日志组文件中的内容。若第一个日志组文件(序列号为15)满时,切换到第二个日志文件组时,新的内容又会在第二个日志文件组没有归档的情况下,直接覆盖日志文件12中的原有数据。 

1、对于其存放位置的建议。虽然说,Oracle数据库服务器对于服务器参数文件的存放位置没有强制性的规定。但是,为了管理方便,笔者还是建议数据库管理员要把服务器参数文件存放在一个特定的目录中。如可以把服务器参数文件存放在数据库安装目录下的Datebase目录中。如此的话,日后维护起来就会比较方便。

一、非归档模式的利与弊。 

三、建立服务器参数文件

  在操作系统管理中,系统管理员往往会重新设置我的文档、IE收藏夹等存储位置。以防止系统奔溃时这些数据的丢失。其实,在Oracle归档日志文件管理中也是如此。当数据库管理员把日志操作模式从非归档模式转换为归档模式时,需要根据实际情况,重新设置归档文件的存储位置。

  通过以上的分析,我们可以归纳出非归档操作日志模式的一些特点。 

一、Pfile参数文件与Spfile参数文件的区别

  数据库关闭之后,再利用Startup命令,把数据库启动到MOUNT状态。再次提醒一次,只有在Mount状态下才能够更改日志操作模式。

  二是执行数据库备份时,必须要备份所有数据文件和控制文件。根据上面笔者所讲述的,因为重做日志会被后来的所覆盖,所以,基本上数据库管理员不能够通过重做日志文件来恢复数据库的数据,或者说,通过重做日志文件不能够恢复全部的数据。为此,在执行数据库备份时,就必须备份所有的数据文件和控制文件。同时,还必须使用SHUTDOWNNORMAL等命令关闭数据库。 
   
二、归档日志模式。
 

1、是初始化参数不能够重复。也就是说,数据库管理员在修改或者增加初始化参数之前,首先需要检查初始化参数是否存在。若数据库管理员想要更改或者设置的初始化参数已经存在的话,那么就必需直接更改原有的参数。只有在不存在的情况下,才能够在文件末尾添加新的参数。即当相关参数重复时,Oracle数据库不会自动采用最后的参数,而是会报错。

  要更改日志操作模式,具体操作步骤如下。

在Oracle数据库中,主要有两种日志操作模式,分别为非归档模式与归档模式。默认情况下,数据库采用的是非归档模式。作为一个合格的数据库管理员,应当深入了解这两种日志操作模式的特点,并且在数据库建立时,选择合适的操作模式

在Oracle数据库比较早的版本中,初始化参数都是以Pfile(文本参数文件)的形式来保存的。而在Oracle 9之后的版本中,则引入了Spfile(服务器参数文件)。Oracle官方是建议数据库管理员采用Spfile参数文件。这主要是因为若采用后者这种形式的参数文件,其有两个优点。一是比较容易备份,因为服务器参数文件可以利用RMAN备份工具进行备份,而文本参数文件则不行。二是服务器参数文建管理起来比较方便。文本参数文件其维护起来相对比较繁琐。

  一是不带N的初始化参数(即前面的两个参数)只能够用来配置本地归档位置。而后面谈到的这个参数这可以用来配置本地归档位置与远程归档位置。也就是说,如果数据库管理员要把归档日志文件保存在网络上的其它主机中时,就必须利用后面的参数进行配置。这个区别是几个参数之间最大的差异。不过由于网络传输等方面的限制,笔者并不建议把归档日志保存在其它主机上。而是建议在数据库服务器中增加一块独立的硬盘用来保存归档日志文件即可。因为硬盘之间数据的复制要比网络传输要快的多。这可以避免重做日志归档时对网络资源过多的占用,从而降低网络的性能。

 

3、如何修改服务器参数文件呢?虽然说服务器参数文件是以二进制形式存储的。但是,利用文本编辑器工具仍然可以看到相关的内容。如利用文本编辑器打开服务器参数文件中,通常情况下,只有参数文件的尾部与头部的一些不怎么重要的内容会以二进制的形式显示外,其他一些具体的设置参数都可以正常显示出来。但是数据库管理员不能够像文本参数文件一样,在文本编辑器中直接进行更改。而必须采用一个Alter System命令对其进行更改。若采用这个命名进行更改的话,则就不需要遵循上面文本参数文件的相关注意事项。因为利用Alter System命令进行更改的话,就自动会符合相关的格式规定。

  第二步:关闭数据库。如果确认数据库当前的日志操作模式为非归档模式,需要把它改为归档操作模式,需要先关闭当前运行的数据库,然后重新装载数据库。需要注意的是,更改日志操作模式只能够在MOUNT状态下进行,因此必须首先关闭数据库,然后重新装载数据库。另外,如果需要更改日志操作模式,那么在关闭数据库时不能够使用SHUTDOWN ABORT命令。SHUTDOWN ABORT命令的作用其实跟KILL进程具有同样的效果。若利用这个命令的话,可能会给数据库带来一些不利的因素。如可能导致文件状态不一致。在数据库正常关闭的时候,数据库会同步校验各个文件,使得重新启动的时候文件时间点一致并且不用进行崩溃修复。而使用这个命令不会进行这个检验。所以,采用SHUTDOWN ABORT命令关闭数据库的时候,可能会导致数据库启动出错,导致已经递交的数据丢失,甚至出现数据库崩溃的噩梦。所以,无论是在更换数据库日志操作模式,又或者其他原因需要关闭数据库的,最好不要采用这个命令。只有在采用其他关闭数据库命令不能够奏效的情况下,才能够使用这个命令。笔者建议通过SHUTDOWN IMMEDIATE命令来关闭数据库。

  归档日志模式与非归档日志模式相对应,是指保留重做日志历史的日志操作模式。这种日志操作模式不仅可用于保护例程失败,还可以用于保护介质损坏的情况。如果数据库管理员把日志设置为归档日志模式,则当后台进程在进行日志切换时,后台进程会自动将重做日志的内容复制到归档日志中。归档日志就是非活动重做日志的备份。 

2、是需要注意文本参数文件修改格式方面的问题。如在文本参数文件中,每一行都只能够设置一个参数,不能再同一行中设置多个不同的参数。如参数若是字符型的则可以利用引号引住;但是,若参数是数字型的,则不能够使用引号引住。但是,若同一个参数有多个值,则可以放在同一行中,只是不同值之间必须要用逗号进行分割。无论是引号还是逗号,都必须是英文状态下的符号。
3、是在文本参数文件中,有个特殊的符号即#。当数据库管理员不需要某个参数时,我们往往不建议直接删除它;而是建议数据库管理员把参数屏蔽掉。这对于日后维护是很有必要的。此时,数据库管理员若要屏蔽某个参数,就可以直接在某个参数前面加入#符号。通过这种方式,就可以让Oracle数据库服务器忽略这个被屏蔽的参数。

  一、更改日志操作模式三步走。

  数据库管理员要根据企业的实际情况,选择合适的日志操作模式。从而让重做日志与归档日志真正成为Oracle数据库的保护伞。

  1. 通过Linux操作系统引导CD排除服务器故障
  2. 技巧:如何加固外网上的IIS服务器安全
  3. 虚拟化技术趋成熟 企业IT架构遭冲击

  二、手工对重做日志文件进行归档。

笔者今天就谈谈自己对这两种操作模式的理解,并且给出一些可行的建议,跟大家一起来提高Oracle数据库的安全性。 

当用户通过网络访问Oracle数据库时,在客户端要为应用程序分配用户进程;与之同时,要在服务器端为期分配服务器进程。而且,客户应用的所有SQL操作最终都由服务器进程来执行的。那么客户端进程与服务器进程之间如何协调工作呢?这就主要是通过初始化参数来实现的。在Oracle数据库中,初始化参数包括默认的初始化参数和以参数文件控制的初始化参数。默认的初始化参数有200多个,在通常情况下,数据库管理员不需要对其进行更改。数据库管理员平时要管理的就是参数文件。而参数文件中保存的就是一些非默认参数。

  对于以上这些初始化参数,数据库管理员需要根据自己的工作习惯进行配置。一个基本的原则就是兼顾归档日志文件的安全性与其对性能的影响。其它没有硬性的规定。根据笔者的经验,如果这些初始化参数设置的好的话,可以让我们数据库管理的工作更加顺畅、便捷。

  如当日志序列号为28时出现了数据文件的错误或者服务器硬盘损坏的事故时,因为日志文件中记录了从数据库备份以来所有的数据变化情况。而且这些日志文件与数据库备份文件存储在其他媒体中,那么数据库管理员就可以通过这些资料,把数据库恢复到介质损坏时(即日志文件序列号为28)的数据。从保护数据库数据的角度讲,这是一个接近于比较理想的状态了。 

不过入道比较早的数据库管理员,还是比较喜欢采用Pfile(文本参数文件)。若数据库管理员采用这种类型的参数文件来管理启动参数的话,则需要注意以下几个问题。

  第三步:更改日志操作模式。以上准备工作做好之后,就可以利用相关命令来更改日志操作模式。我们可以利用如下命令来进行更改。

  若把非归档模式与归档模式进行对比的话,可以发现归档模式有如下的特点。 
一是当出现介质损坏(如硬盘损坏或者意外删除数据文件)或者出现例程失败(如服务器突然断电)时,数据库管理员可以凭借归档日志文件来防止丢失数据。而非归档模式则往往只能够应对例程失败的情况。所以,其应用范围要比非归档模式大的多。 

...

  如果需要更改归档日志的操作文件,则需要变更相应的初始化参数。参数Log-Archive-Dest就是用来控制归档日志的存储路径的。通常情况下,若是没有备用数据库的话,则只需要把归档日志存放到服务器上的独立的硬盘中即可,而不需要进行异地备份。如果需要配置本地归档日志的存储路径,则可以通过以上的初始化参数以及Log-Archive-Duples_Dest参数。其中前面一个参数用来指定第一个归档日志的位置,第二个参数用来指定第二个归档日志的位置。当分别对以上两个参数进行配置后,数据库系统在进行日志切换时,后台进程就会生成两份完全相同的归档日志,分别存储在上面两个不同的路径中。这里需要强调的一点是,存放在两个不同路径中的归档日志文件是完全相同的。这主要是出于数据安全的需要。一般情况下,只需要一个归档日志即可。若不放心的话,则可以设置多个归档日志存放位置。不过这些归档日志最好能够存放到不同的磁盘上,否则的话,就没有多少的实际意义。

  再者,要看看数据库是否需要全天候运行。因为在非归档模式下,必须利用SHUTDOWNNORMAL等命令关闭数据库,才能过对数据库进行备份。这跟数据库全天候运行的要求是不符合的。而归档模式下,即使数据库出于OPEN状态,也可以对其进行备份,也不会影响数据库的正常运行。为此,若果数据库需要全天候运行的话,则最好采用归档模式。虽然数据库为此要付出一些额外的开销,笔者认为也是值得的。毕竟硬件投资有价,数据无价。 

2、服务器参数文件如何命名。对于这个命名数据库服务器也没有强制性的规则。不过,通常情况下,数据库管理员会有一套约定俗成的命名规则,如SPfileSID.ora。其中Spfile前缀表示这是一个服务器参数文件,而不是文本参数文件;SID为例程名;ORA则为扩展名。这个命名规则不是强制性的。但是,若数据库管理员采用这套命名规则的话,则对于其后一任数据库管理员来说,则其管理起来就会方便许多。

  有时候出于某些原因,数据库管理员可能需要手工对重做日志进行归档。在10G以后的版本中,默认情况下,当将日志操作模式从非归档模式转换为归档操作模式的时候,Oracle数据库会在后台自动启动一个ARCH进程。这个进程就是负责重做日志的备份任务。通常情况下,归档模式下,数据库会自动备份重做日志。

 

4、如何查看当前数据库系统到底是采用什么类型的参数文件。由于在Oracle9I以后的数据库版本中,同时支持文本参数文件与服务器参数文件。如果数据库管理员是后来接受这个数据库维护任务的,那么有可能不怎么清楚,当前数据库服务器到底采用的是什么类型的参数文件。故其要对数据库服务器参数文件进行更改,也无从做起。此时,数据库管理员可以利用服务器自带的命令进行查询。当相关例程处于启动状态时,先以特权用户登录。然后采用show parameter spfile命令,来系统显示初始化参数的值。如果在显示的结果中,Value处有值的话,则表示例程在使用的是服务期参数文件;如果Value处没有任何返回结果的话,则表示例程现在使用的是文本参数文件。

  若需要手工备份重做日志的话,即手工归档,则必须在改变操作日志模式中明确说明。即在上面的命令中,加入MANUAL参数。如果加入这个参数后,则数据库管理员就必须手工执行归档命令。如果数据库管理员没有手工执行归档命令的话,则日志组中的内容就无法被进行覆盖。所以通常情况下,除了一些特殊的需要,如数据库测试,才使用手工归档方式。否则的话,就还是采用自动归档方式更加的合理。值得一提的是,根据笔者了解,这个参数只是一个过渡参数。主要为了跟以前的Oracle数据库版本兼容。估计在不久之后,这个手工归档的参数会取消掉。

  首先要看数据库中数据变化的频繁程度。当数据库中数据变化比较少的时候,则最好采用非归档模式。相反,如果数据库中的数据变化比较频繁,如一些业务操作系统,则最好能够采用归档模式。 

您正在阅读:Oracle服务器参数文件管理的注意事项

  二是前面两个参数只能够配置两个不同的归档日志位置;而后面一个参数则可以配置多大十个归档日志文件位置。这是两者数量上的差异,不过没什么作用。对于大部分企业来说,可能两个归档日志文件存放位置已经可以满足他们的需求了。另外一个小的差异就是,后面这个参数不能够跟前面两个参数共存。为此,当使用后者这个参数时,就需要先把前面两个参数禁用掉。因为数据库默认情况下,是启动第一个初始化参数的。

  如现在Oracle数据库中有四个日志组,日志序列号分别为11、12、13、14。当数据库事务变化写满第一个日志组文件(序列号为11) 时,后台进程就会切换到第二个日志组中(序列号为12)。不过在这个切换之前,数据库有一个进程,会负责将第一个日志组中的文件内容复制到归档日志中去。依次类推。这就是归档日志模式与非归档日志模式最本质的区别。不过这个区别却给数据库安全性带来了很大的变化。 

笔者虽然接触Oracle数据库服务器也已经有不少的年头了。不过笔者还是比较喜欢采用Spfile参数文件来管理数据库服务器的参数文件。Spfile参数文件是以二进制形式存放的。若要采用这种形式来管理启动参数文件,笔者有如下的建议。

  默认情况下,Oracle数据库采用的是非归档模式。但是,非归档模式不能够防止因物理损坏而导致丢失数据问题。为此数据库管理员可能需要把日志操作模式从非归档模式转换为归档模式。其实,要进行这个转换的话,只需要通过简单的三个步骤即可。不过在进行操作之前,要需要注意。以下的操作都必须要求用户具有数据库管理员的权限,即只有SYSDBA或者SYSOPER身份才能够执行如下的操作。

  其次,要看企业对数据丢失的态度。如果企业对于数据安全要求比较高,如银行,不允许丢失任何数据,则最好能够采用归档日志模式。在数据库意外故障的时候,其可以帮助数据库管理员在最大程度上恢复数据。同理,当企业可以允许部分损坏数据的时候,则可以采用非归档模式,以节省切换日志组时的对日志文件备份的额外开销与磁盘空间。 

不过,我们可以采用一些技巧,让服务器参数文件的建立变得简单起来。也就是说,我们可以先利用文本文件建立文本参数文件。因为在文本文件中建立相关的参数会比利用命令简单许多。然后,再通过CREATE Spfile…FROM FILE…命令来进行转换,把文本参数文件转换为服务器参数文件。这其中,第一个参数用于指定服务器参数文件全名。第二个参数用于指定文本参数文件全名。注意,如果没有指定服务器参数文件的全名,则其会在数据库的默认路径下建立服务器参数文件,即服务器安装目录下的DATEBASE子目录。若没有指定文本参数文件全名的话,则数据库采用的是默认的文本参数文件。再者,执行这个命令也有权限上的限制,即只有特权用户才能够执行这个命令。

  三、设置归档文件的存储位置。

三、如何选择合适的日志操作模式? 
  非归档模式只适用于例程失败时恢复数据,不能够用来保护介质损坏。即当数据库的数据文件意外损坏时,非归档模式没有应对之策。归档模式不仅可以用来保护例程失败,而且还可以在介质失败的时候,最大程度的恢复数据库的原有数据。此时,数据库管理员可以利用数据库备份文件、归档日志文件、重做日志文件等把数据库中的数据恢复到故障发生的那一时点。 

二、Spfile参数文件的管理与配置

  除了以上这个配置参数之外,平时工作中,我们还经常会使用Log-Archive-Dest_N这个参数。这个参数主要用于指定多个归档位置,通常情况下,可以多大十个归档位置。这个参数跟先前提到的两个参数有比较大的不同。数据库管理员要对此有清晰的认识。只有如此,才能够根据自己的需要,选择合适的初始化参数。他们的差异主要有以下几点。

  既然归档操作模式与非归档操作模式各有各的特点,那么在什么时候采用归档日志模式为好,什么时候又该采用非归档模式呢?这个问题的答案,是公说公有理,婆说婆有理。恐怕争论个几年也没有一个固定的答案。对此,笔者就提一下自己的意见。这也不是标准答案,只是供大家参考。 

参数文件主要用于保存数据库启动例程所需要的初始化参数。作为Oracle数据库管理员来说,默认参数往往不需要进行更改。其日常需要维护的主要就是参数文件中保存的非默认参数。在Oracle10之后的版本中,其同时支持两种类型的参数文件,分别为Pfile(文本参数文件)和Spfile(服务器参数文件)。这两个参数文件虽然起到的作用是相同的,但是其有很大的不同。

  第一步:先确定当前的日志操作模式。当数据库管理员更改当前操作日志模式之前,需要先确定一下当前日志操作模式。此时数据库管理员可以查询动态性能视图,来确认当前日志操作模式。如可以利用如下语句来查询我们所需要的信息。动态性能视图中存储着很多数据库运行信息。从中我们数据库管理员可以获取很多有用的信息。如现在要了解当前数据库的日志操作模式,就可以从数据库动态性能视图中获知。

  一是当检查点完成之后,后台进程可以覆盖原有重做日志的内容。也就是说,在日志切换时,后来的日志文件内容可以在以前的日志文件内容没有归档的情况下,覆盖原有日志文件的内容。如此的话,当出现数据文件损坏时,数据库管理员只能够恢复到过去的完全被分点。如数据库有四个日志组。如果在日志组序列号为16的时候数据库管理员进行了完全备份。而在日志组序列号为28的时候数据文件出现了损坏。此时,由于中间的日志文件内容被覆盖掉了。所以,此时数据库管理员只能够恢复到完全备份的那个点,而不能够恢复数据库文件损坏时的点的数据(即序列号为28)的数据。如果在序列号为18的时候出现了数据文件损坏的事故,则可以先对数据库进行还原(还原点为序列号为16时的数据),然后再利用重做日志文件(序列号为17、18),即可以把数据恢复到故障发生时的数据。故虽然不用对重做日志文件进行归档,节省磁盘空间。但是,却给后续数据库的恢复带来的麻烦,降低了数据库的安全性。为此,如何取舍,还是需要数据库管理员根据自己企业的情况,作出选择。 

总之,参数文件中保存了很多启动参数。在通常情况下,在服务器安装过程中,服务器会根据相关情况自动对参数进行赋值。若没有特殊的需要,不需要对其进行额外的更改。但是,若服务器的硬件配置或者服务期所属的网络环境出现变化的话,则就需要对其进行调整。另外,有时候出于优化数据库服务器性能的考虑,也需要对相关的初始化参数进行调整。在对参数文建进行更改时,除了需要遵循以上注意事项之外,笔者还有最后一条忠告。即无论是采用文本参数文件,还是服务器参数文件,最好都能够事先对参数文件进行备份,以防不时之需。这主要是因为参数文件对于数据库服务器的影响是很大的。在修改时,若哪个参数被意外更改,很可能导致数据库启动失败。

  然后重新打开数据库之后,设置就生效了。

  二是数据备份的限制条件。正如上面所说的,如果数据库处于非归档模式,则对数据库进行备份时,要先用SHUTDOWNNORMAL等命令关闭数据库。而处于归档模式的时候,则当数据库处于Open状态时,数据库管理员仍然可以备份数据库,而且不会影响数据库的正常使用。除了数据库备份两者有本质上的差异之外,在数据库恢复上也有很大的差别。若数据库采用归档日志模式,不仅可以执行完全恢复,而且在归档日志文件的帮助下,还可以将数据库恢复到特定的点。从而当数据库出现意外故障时,最大限度的保护数据的安全性。 
  不过若采取归档模式的话,则必须要牺牲一定的磁盘空间。 

TAG标签: DB 【03】数据库
版权声明:本文由彩民之家高手论坛发布于彩民之家论坛9066777,转载请注明出处:ORACLE归档模式和非归档模式的利与弊彩民之家论