大约前几年,Oracle发布了第一个Linux上的商业数据库。从那时起,Oracle,RedHat和Novell/SUSE就Linux内核的变化进行了稳定的合作,因为它们与数据库和应用程序性能有关。因此,适用于Linux的Oracle数据库10g包含与操作系统密切相关的增强功能。现在,DBA比以往任何时候都更需要掌握这个平台的知识和经验,以便最好地管理他们手表下的系统。系统管理员和DBA之间存在传统的职责划分。然而,在实践中,区别并不总是很清楚。许多IT部门雇用的人员解决数据库中的问题以及操作系统级别。当然,Oracle数据库本身也使用操作系统资源,旨在与其环境密切交互。此外,许多系统管理员和DBA发现自动执行与其工作相关的任务是必要或方便的。软件的安装,系统资源的监控以及系统管理涉及重复且容易出错的任务,通过自动化流程比手动程序更好地解决。用于自动执行此类任务的一种方法是shell脚本。从安装时起,Shell脚本在Linux系统中发挥着重要作用。系统启动和关闭时会调用各种脚本。Oracle和其他第三方供应商的实用程序通过shell脚本调用。由于它们可以快速开发,因此它们历来被用于原型设计应用。系统管理员已利用shell脚本提供的功能来提供针对其监视下的系统的特定要求和特性而定制的解决方案。在本文中,我将介绍通过“bash”shell脚本提供的功能,这些脚本与在Linux平台上安装,运行和维护Oracle数据库相关。请注意,本文是为Linux脚本初学者或对Linux相对较新的DBA而设计的;最有经验的Linux系统管理员不会觉得它有用。
什么是Shell脚本?
shell脚本只是一个包含一系列命令的文本文件。运行文件或脚本时,它会执行文件中包含的命令。术语shell仅指用于与Linux内核通信的特定命令行用户界面。有几种不同的shell,包括Cshell(csh),Kornshell(ksh),Bourneshell(sh)和Bourne-Againshell(bash)。shell本身是一个命令,它从文件或终端读取行,解释它们,并且通常执行其他命令。Bourne-Againshell包含了所提到的其他shell的功能,并且是本文演示的脚本所使用的shell。脚本文件中的第一行可用于指示将使用哪个shell来运行脚本。这是所有脚本示例中第一行的含义:
为什么使用Shell脚本?
根据您的背景,您可能看不到shell脚本的任何直接价值,因为它与DBA的工作有关。如果您没有UNIX或类UNIX系统的经验,那么无数令人讨厌的命令可能会引起关注。此外,除了作为关系数据库之外,Oracle10g还提供了一个强大的平台,用于处理数据库中的数据,以及与数据库外部的OS交互的几种方法。
但是,您可能会发现自己钻研shell脚本世界的原因有多种,包括:您希望自动执行在安装Oracle软件之前进行的系统设置。例如,您可以编写脚本来检查操作系统的初始状态,并报告在安装软件之前必须满足的所有先决条件。该脚本还可以创建相关的OS用户和组,并为用户设置环境变量。运行的Oracle数据库可用于执行手动或计划任务。但是,当数据库未运行时,需要运行某些任务。您可以使用脚本来停止或启动数据库(以及侦听器或相关的数据库进程)。无法从数据库本身内启动此类操作。您需要一种机制来监视数据库的状态(即它是否正在运行并可用于处理查询)。此类脚本还可以监视非特定于Oracle的其他进程和资源,以便更全面地了解系统中发生的情况。您需要自动备份。OracleRecoveryManager(RMAN)是一个实用程序,允许您开发可在任何平台上运行的备份脚本。您可以从shell脚本调用OracleRecoveryManager,并使用它来执行各种备份和恢复活动。您可能有一个不是特定于单个数据库的要求。也许你在一台机器上有几个数据库。使用单个数据库来满足要求可能并不可取,并且它也会引入潜在的安全问题。在这种情况下,shell脚本提供了一种以不将进程与单个数据库相关联的方式来满足需求的方法。
结论
Shell脚本可以成为快速自动执行重复且容易出错的管理任务的有效工具。本文中的示例介绍了可用的可能性,但远非全面。每个系统都有不同的怪癖和缺陷以及独特的配置。管理员将开发独特的解决方案以满足特定系统的需求。