立即登录

sql脚本编写教程 面向DBA的Linux_Shell脚本编写

11/28 05:09:55

sql脚本编写教程 面向DBA的Linux_Shell脚本编写

年前,Oracle发布了Linux上的第一个商业数据库。从那时起,Oracle、RedHatNovell/SUSE就不断地合作更改Linux内核sql脚本编写教程,从而提高数据库和应用程序的性能。正因为这样,用于LinuxOracle数据库10g才包含了与操作系统紧密相关的许多增强功能。DBA比以往任何时候更需要了解和使用此平台来在其监视下对系统进行最佳管理。以往,系统管理员与DBA之间在职责方面存在差别。但实际上,这种差别通常并不明显。许多部门雇佣一些可解决数据库级以及操作系统级问题的员工。当然,Oracle数据库本身使用操作系统资源,并能与其环境紧密交互。此外,许多系统管理员和DBA发现将其工作相关的任务自动化很有必要或比较方便。软件安装、系统资源监视以及系统管理涉及一些重复和容易出错的任务,而自动过程可以比手动过程更好地完成这些任务。将这些任务自动化的方法之一是shell脚本。Shell脚本自Linux系统安装之初就起着重要作用。启动和关闭系统时就会调用各种脚本。Oracle和其他第三方供应商的实用程序也是通过shell脚本可调用的。由于这些脚本可以快速开发,因此历来就用它们构建应用程序原型。系统管理员已利用通过shell脚本实现的功能提供针对其监视的系统的特定要求和特征定制的解决方案了。

在本文中,我将介绍“bash”shell脚本可以实现的、与在Linux平台上安装、运行和维护Oracle数据库相关的功能。注意,本文适用于Linux脚本初学者或对Linux相对陌生的DBA;对大多数经验丰富的Linux系统管理员则不适用。Shell脚本是什么?shell脚本是一个包含命令序列的文本文件。当运行文件(或脚本)时,将执行该文件中包含的命令。术语shell仅指与Linux内核通信所使用的特定命令行用户界面。目前有多个不同的shell辅助论坛,其中包括shell(csh)、Kornshell(ksh)、Bourneshell(sh)Bourne-Againshell(bash)。shell本身就是一个从文件或终端读取命令、解释这些命令并通常执行其他命令的命令。Bourne-Againshell合并了上述其他shell的特性,本文就使用该脚本进行演示。脚本文件中的第一行可用于指定使用哪个shell来运行该脚本。以下是所有脚本示例中包含的第一行的含义:#!/bin/bash为什么使用Shell脚本?由于shell脚本与DBA的工作相关,因此您可能不会马上看到shell脚本的价值,这跟您的工作经历有关。

如果您以前从未使用过UNIX或类似UNIX的系统,那么可能会对大量含义晦涩的命令感到一愁莫展。此外,除了作为关系数据库外,Oracle10g还提供了一个用于处理数据库数据的强健平台以及几个用于在数据库外部与操作系统交互的方法。但您会发现几个探究shell脚本领域的原因sql脚本编写教程,其中包括:必须支持已经存在的脚本。需要在安装Oracle软件前自动设置系统。例如,您可以编写一个脚本来检查OS的初始状态并报告安装软件前必须满足的任何前提条件。该脚本还可以创建相关的OS用户和组并为用户设置环境变量。可以使用正在运行的Oracle数据库来执行手动或计划的任务。但在数据库未运行时需要运行某些任务。可以使用脚本停止或启动数据库(以及侦听器或相关的数据库进程)。无法从数据库内部启动此类动作。您需要一种监视数据库状态(例如,是否正在运行并可进行进程查询)的机制。这样的脚本还可以监视非特定于Oracle的其他进程和资源,从而提供系统当前运行情况的更详细信息。需要将备份自动化。OracleRecoveryManager(RMAN)是一个用于开发可以在任何平台上运行的备份脚本的实用程序。可以从shell脚本中调用OracleRecoveryManager用它执行各种备份和恢复活动。

您可能有一个并非特定于某个数据库的要求。您可能在一台计算机上安装了多个数据库。建议您不要使用单个数据库满足此要求,因为那样会引发潜在的安全性问题。在这些情况下,shell脚本提供了一种既可以满足此要求又不会将进程与单个数据库关联的方法。什么情况下不使用Shell脚本Oracle数据库包含了超出RDBMS传统定义的功能。与软件的任何其他部分一样,它使用操作系统提供的资源,但它所“看到”并“更改”其环境的程度远远超过了其他软件。SQLOracle的固定视图从数据库内部提供了系统视图,而shell脚本从数据库外部提供了系统视图。Shell脚本并不是适用于所有问题的解决方案。必须意识到,操作系统的许多方面可以从数据库内部进行监视和修改。可以使用Oracle前缀的视图)确定计算机的主机名(v$instance)或数据库正在其中运行的平台的名称(v$database)。还可以通过这种方式确定与数据库相关的文件的位置和其他属性。可以直接从数据库中查询数据文件(v$datafile、dba_data_files)、临时文件(v$tempfile、dba_temp_files)、重做日志(v$logfile)、存档日志(v$archived_log)和控制文件(v$controlfile)的位置和其他属性。

可以通过该视图以及通过查看某些init.ora参数(db_recovery_file_dest、db_recovery_file_dest_size)确定有关闪回恢复区($recovery_file_dest)的信息。还可以查询进程(v$process)和内存(v$sga、v$sgastat等)的状态。有各种内置的PL/SQL程序包,并能够创建允许对底层OS进行其他访问的Java数据库对象。如果您正在考虑为一个需要大量数据库访问的任务编写脚本,则脚本可能并不是最佳选择。本文的稍后部分将介绍如何使用SQL*Plus访问数据库,但在很多情况下,使用其他语言可以更好地解决此问题。下表归纳了可以从数据库中访问的信息:服务器/操作系统信息服务器标识典型查询附注实例运行在的主机的名称selecthost_namefromv$instance;也可以通过从bash运行以下命令来获得该信息:hostname操作系统平台selectplatform_namefromv$database-(10g)如果运行uname–s,则将返回类似信文件信息Oracle文件位置典型查询附注控制文件selectnamefromv$controlfile;数据库控制文件的位置。

init.ora的参数control_files也包含该信息。数据文件selectfile_namefromDba_data_files;数据库数据文件的位临时文件selectfile_namefrom Dba_temp_files; 数据库临时文件的位 日志文件select member from v$logfile; 重做日志的位置 归档日志 select name from v$archived_log 归档重做日志的位置。 init.ora log_archive_dest_n也包含该信息。如果数 据库不在 Archivelog 模式下,则该查询将不 返回结果。 闪回恢复区 select name from v$recovery_file_dest Oracle 10g 安装用作 闪回恢复区的目录。 init.ora 也包含该信息。由参数指示的文 件系统上的其他 访问点 select fromv$parameter where value like valuelike 根据Oracle 数据库 安装和版本的不同,该 查询的结果可能迥然 不同。可能返回的参数 spfilestandby_archive_des utl_file_dirbackground_dump_d est user_dump_dest core_dump_dest audit_file_dest dg_broker_config_file 用编程的方式访问文件系统 select directory_path from dba_directories OracleUTL_FILE_DIR 参数 据库对象访问标准数据库功能以外的文件。

进程信息 处理器/ 进程 典型查询 附注 selectp.spid, s.username, s.program from v$process wherep.addr=s.paddr order 可以将spid ps–ef 结果相关 联,以将数据库中的可用信息与给定 进程的操作系统信息进行比较。 进程select slave_name, status from v$PQ_SLAVE Oracle 数据库的很多方面(如加载、 查询、对象创建、恢复和复制)都可 以利用并行来加快可以分割的活动。 参数 parallel_threads_per_cpu 设置 实例的默认并行度。 内存信息 内存 典型查询 附注 程序全局 fromV$PGASTAT 参数 pga_aggregate_target 用于为所有专 用服务器连接配置内存。 可以使用 vmstat Linux实用程序 监视内存使用情况。 系统全局 fromv$sga SGA_MAX_SIZE SGA_TARGET参数用 于配置 Oracle 数据库 10g 的动态内存分配 特性。还可以使用其他参数为特殊用途手动分 配内存。 同时,还有各种 Linux 实用程序可用于监视 内存分配。

BASH 脚本 脚本要么作为自动进程的一部分被调用(无需人为干预),要么以交互方式运行(用户根据 提示执行操作)。只要您拥有文件的执行权限,便可以从命令行键入该文件的名称来运行它。 如果您没有文件的执行权限,但拥有其读取权限,则可以通过在脚本的前面加上 sh 来运行 该脚本。 如果脚本设计为在无用户输入的情况下运行,则可以使用多种可选方法调用它。可以在后台 运行脚本,即使在断开连接的情况下,您仍可以通过输入以下形式的命令来运行: nohup /path_to_dir/myscript_here.sh 这对于需要很长时间才能完成的脚本很有用。at命令可用于在将来执行脚本,而 cron 用于计划要重复执行的脚本。以下示例介绍了提供视图输出(使用 echo)、循环、条件逻辑以及变量赋值等重要方面。 print_args.sh。参数是位于命令名右侧并传递到脚本中的词。要访问第一个参数,使用 $1 变量。$0 变量包含脚本本身的名称。$# 变量包含脚本中的参数个数。一种迭代所传递的所 有参数的便捷方法是使用 while 循环和 shift 命令。该命令使您可以迭代参数列表中的所 有参数(而非保持无限循环)。

while doecho $1 shift done 如果脚本将文件名作为参数(或提示用户输入文件名)并在后面读取该文件,则建议您检查 其访问性和可读性。例如,涉及选择备份控制文件的恢复脚本可能提示用户选择将在脚本后 面部分中用于恢复文件的备份控制文件。 readableecho "File $1 does readable."exit; fi 字符序列 是实际执行测试的部分。如果方括号之间的内容结果为true,则将执行位于 fi之间的 命令。实际测试显示在方括号之间。惊叹号用于对所执行的测试取反。-r 选项检查文件是 否可读。在这个特定示例中所要测试的是传递给脚本的第一个参数。通过使用另一测试 ),可以检查给定条目是否是目录(参见is_a_directory.sh)。

来源:【九爱网址导航www.fuzhukm.com】 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

最新资讯