日期:2014-05-16  浏览次数:20721 次

使用Linux的Shell脚本维护Oracle
大约7年前,Oracle   发布了   Linux   上的第一个商业数据库。从那时起,   Oracle   、   Red   Hat   和   Novell/SUSE   就不断地合作更改   Linux   内核,从而提高数据库和应用程序的性能。正因为这样,用于   Linux   的   Oracle   数据库   10   g   才包含了与操作系统紧密相关的许多增强功能。   DBA   比以往任何时候更需要了解和使用此平台来在其监视下对系统进行最佳管理。  

  以往,系统管理员与   DBA   之间在职责方面存在差别。但实际上,这种差别通常并不明显。许多   IT   部门雇佣一些可解决数据库级以及操作系统级问题的员工。当然,   Oracle   数据库本身使用操作系统资源,并能与其环境紧密交互。  

  此外,许多系统管理员和   DBA   发现将其工作相关的任务自动化很有必要或比较方便。软件安装、系统资源监视以及系统管理涉及一些重复和容易出错的任务,而自动过程可以比手动过程更好地完成这些任务。  

  将这些任务自动化的方法之一是   shell   脚本。   Shell   脚本自   Linux   系统安装之初就起着重要作用。启动和关闭系统时就会调用各种脚本。   Oracle   和其他第三方供应商的实用程序也是通过   shell   脚本可调用的。由于这些脚本可以快速开发,因此历来就用它们构建应用程序原型。系统管理员已利用通过   shell   脚本实现的功能提供针对其监视的系统的特定要求和特征定制的解决方案了。  

  在本文中,我将介绍   “bash”shell   脚本可以实现的、与在   Linux   平台上安装、运行和维护   Oracle   数据库相关的功能。注意,本文适用于   Linux   脚本初学者或对   Linux   相对陌生的   DBA   ;对大多数经验丰富的   Linux   系统管理员则不适用。  

  Shell   脚本是什么?  

  shell   脚本是一个包含命令序列的文本文件。当运行文件(或脚本)时,将执行该文件中包含的命令。术语   shell   仅指与   Linux   内核通信所使用的特定命令行用户界面。目前有多个不同的   shell   ,其中包括   C   shell   (csh)   、   Korn   shell   (ksh)   、   Bourne   shell   (sh)   和   Bourne-Again   shell   (bash)   。   shell   本身就是一个从文件或终端读取命令、解释这些命令并通常执行其他命令的命令。   Bourne-Again   shell   合并了上述其他   shell   的特性,本文就使用该脚本进行演示。  

  脚本文件中的第一行可用于指定使用哪个   shell   来运行该脚本。以下是所有脚本示例中包含的第一行的含义:  

  #!/bin/bash  

  为什么使用   Shell   脚本?  

  由于   shell   脚本与   DBA   的工作相关,因此您可能不会马上看到   shell   脚本的价值,这跟您的工作经历有关。如果您以前从未使用过   UNIX   或类似   UNIX   的系统,那么可能会对大量含义晦涩的命令感到一愁莫展。此外,除了作为关系数据库外,   Oracle   10   g   还提供了一个用于处理数据库数据的强健平台以及几个用于在数据库外部与操作系统交互的方法。  

但您会发现几个探究   shell   脚本领域的原因,其中包括:  
•   必须支持已经存在的脚本。
 
•   需要在安装   Oracle   软件前自动设置系统。例如,您可以编写一个脚本来检 查   OS   的初始状态并报告安装软件前必须满足的任何前提条件。该脚本还可以创建 相关的   OS   用户和组并为用户设置环境变量。  

•   可以使用正在运行的   Oracle   数据库来执行手动或计划的任务。但在数据库   未   运行时需要运行某些任务。可以使用脚本停止或启动数据库(以及侦听器或相关的数据库进程)。无法从数据库内部启动此类动作。  

•   您需要一种监视数据库状态(例如,是否正在运行并可进行进程查询)的机制。这样的脚本还可以监视非特定于   Oracle   的其他进程和资源,从而提供系统当前运行情况的更详细信息。  

•   需要将备份自动化。   Oracle   Recovery   Manager   (RMAN)   是一个用于开发可以在任何平台上运行的备份脚本的实用程序。可以从   shell   脚本中调用   Oracle   Recovery   Manager   并使用它执行各种备份和恢复活动。  

•   您可能有一个并非特定于某个数据库的要求。您可能在一台计算机上安装了多个数据库。建议您不要使用单个数据库满足此要求,因为那样会引发潜在的安全性问题。在这些情况下,   shell   脚本提供了一种既可以满足此要求又不会将进程与单个数据库关联的方法。  

  什么情况下不使用   Shell   脚本?  

  Oracle   数据库包含了超出   RDBMS   传统定义的功能。与软件的任何其他部分一样,它使用操作系统提供的资源,但它所   “   看到   ”   并   “   更改   ”   其环境的程度远远超过了其他软件。   SQL   和   Oracle   的固定视图从数据库内部提供了系统视图,而   shell   脚本从数据库外部提供了系统视图。   Shell   脚本并不是适用于所有问题的解决方案。  

  必须意识到,操作系统的许多方面可以从数据库内部进行监视和修改。可以使用   Oracle   的固定视图(带   v$   前缀的视图)确定计算机的主机名   (v$instance)   或数据库正在其中运行的平台的名称   (v$database)   。还可以通过这种方式确定与数据库相关的文件的位置和其他属性。可以直接从数据库中查询数据文件(   v$datafile   、   dba_dat