我更熟悉 Windows,所以 Linux 对于我来说目前是一个相当陌生的地方,所以如果这是一个愚蠢的问题,请原谅我。
基本上,我想知道是否有人对编写脚本来关闭/启动、备份和其他一些常规 DBA 任务有任何建议和/或推荐。
我还将欣赏关于如何设置脚本以在多宿主环境中改变环境/宿主的任何指导。
有一件事我忘了提及 RHEL 5 的默认 shell。
谢谢。
答案1
无论使用哪种操作系统,Oracle 都可使用 sqlplus 和 rman 工具进行管理。您的脚本不需要进行太多更改即可在 Linux 上运行。
如上所述,使用 crontab(查看 cron 手册页)并且不要忘记将用于执行维护的帐户添加到 dba 组。
我通常使用 2 个脚本:第一个脚本设置环境,调用第二个脚本执行操作。
可能是这样的:
关闭_DevDB1.sh
#!/bin/sh
set ORACLE_SID=DevDB
set ORACLE_HOME=/opt/oracle/Home1
set ORA_SCRIPTS=/opt/oracle/scripts
if [ -f $ORA_SCRIPTS/$ORACLE_HOME/$ORACLE_SID-shutdown.sql ]; then
$ORA_SHUT = $ORA_SCRIPTS/$ORACLE_HOME/$ORACLE_SID-shutdown.sql
else
$ORA_SHUT = $ORA_SCRIPTS/generic/shutdown.sql
fi
$ORA_SCRIPTS/shutdown.sh
关机命令
#!/bin/sh
echo `date`: shutting down $ORACLE_SID.
$ORACLE_HOME/bin/sqlplus /nolog @$ORA_SHUT
if [ $! != 0 ]; then
echo Impossible to shut down $ORACLE_SID
exit -1
fi
echo $ORACLE_SID has been shut down.
关机语句
connect / as sysdba
shutdown immediate;
quit;
大多数情况下,您只需复制第一个脚本并更改前三行即可。如果您的数据库有一些奇异之处,请将 sql 文件放在正确的位置以使用它,而不是通用文件。
答案2
我建议尽快调查“cron”,您可能会发现 /etc/crontab 告诉您一些“有用”的事情,并且有定期的快捷目录:
- /etc/cron.hourly
- /etc/cron.daily
另外,“crontab -u -l”将显示用户在 Linux 中,这通常存储在 /var/spool/cron 下。这些都不是 Oracle 独有的,但是对于自动可靠地运行作业来说,它们是必不可少的,对于执行数据库快照和备份等非常有帮助。
启动和关闭脚本通常隐藏在“/etc/init.d”中,并且通常在初始安装时由软件包提供/安装。
如果您可以编辑您的问题以包含有关您的环境的更多详细信息,那么这将使某人能够对您的问题提供更完整的答案:-)
- Linux 发行版
- 软件版本
答案3
对于更复杂的任务,我建议使用脚本语言而不是 shell 脚本。当您可以建立数据库句柄时,通过多个不同的任务与数据库建立持久连接会容易得多。在 shell 脚本中,您倾向于调用多个命令行工具,每个命令行工具都必须与数据库建立连接,然后在工具运行完毕后断开连接。
O'Reilly 有一本书专门从 DBA 的角度(而不是应用程序开发人员的角度)介绍了 Perl 和 Oracle:
http://oreilly.com/catalog/9780596002107/
你可能会发现这很有帮助。
答案4
补充一下,买一本关于 shell 脚本的书,确保你对此有很好的工作知识。Sh 及其衍生品在脚本编写方面比 Windows CMD 文件好得多 - 底层范例并没有太大不同,但效果要好一些。
另一个发帖者提到了 perl,它有各种各样的库可用于与 Oracle 配合使用。查阅 www.cpan.org 并四处搜索。Python 也支持相当多的 Oracle 库,其中最有趣的可能是 Anthony Tuninga 的CX_Oracle及其相关工具。
如果你想快速掌握 Linux/Unix,此 Stackoverflow 帖子包含许多资源的链接和关于系统各个方面的优秀书籍列表。关于 Oracle 的书籍有很多,其中我认为 Tom Kyte 的《Expert one-on-one Oracle》和《Effective Oracle by Design》是不错的入门书籍。
最后,如果您正在使用 Oracle,请掌握数据字典的应用知识。这非常有用,而且(在我看来)比 SQL Server 上的要好得多。