我意识到这是一个更主观的问题,但我正在寻求社区的指导。
我们公司刚开始拥有 DBA。我们曾经在 IBM 的 iSeries 服务器上使用 DB2 for i,因此实际上不需要 DBA(至少在操作上),因为操作系统几乎为我们管理了一切。在过去的几年里,我们开始迁移到 AIX 上的 DB2 LUW。因此,对 DBA 的需求诞生了。我们中的三个人有兴趣将职业从开发人员转变为 DBA(我是其中之一)。
因为我们在 AIX 上,所以我们默认使用 ksh 作为数据库管理功能(创建、部署、操作等)的脚本语言。我发现 ksh 非常强大,但我需要执行的一些功能却变得相当复杂。这方面的一个例子是我关于 Unix 和 Linux StackExchange 的问题。
基于这个问题,以及阅读其他 DB2 管理员的博客,我看到一个普遍的建议,即 Perl 比 ksh 更适合管理脚本。
我知道 Unix/Linux 论坛对这样的事情会有他们自己的想法,但我希望从数据库管理的角度来解决这个问题。
不管 DBMS,哪种脚本语言似乎更适合在 Unix/Linux 平台上进行管理?佩尔?克什?(或者其他?)。作为 DBA,您在使用脚本语言时遇到过哪些优势和劣势?您为什么选择所使用的语言?
我不想要的是一场关于“我的语言比你的语言更好!”的高度主观的口水战。类似的东西,就像我以前在开发社区看到的关于 Java 与 Ruby 等的内容一样。我正在寻找诚实的、尽可能客观的关于什么最适合数据库管理员需求的信息。
你帖子的结尾真的很重要:
让我们从这里开始吧。
作为 DBA,您的需求是什么?您通常有两个操作领域:系统级维护和数据库级维护(所有操作都只是维护系统以获得更好的性能......看,不要学究气,跟我一起去)。所以你有两个领域要考虑。
ksh - Korn Shell是较早的 Unix 操作 shell 之一,用于控制服务器。ksh 的目标是管理服务器,并允许一个人执行传统 Bourne shell(不是大多数人熟悉的 Bourne Again SHell,这是较旧的版本)允许的所有事情,但有一些差异(这个 shell更好地支持诸如算术和数组之类的东西,使得在某些方面更容易编程)。它是AIX 上的默认 shell。
perl - Perl是一种高级通用编程语言。它被设计为在 shell 之上运行,并且主要是为报告而设计的。它结合了 shell 脚本和 C 的特性,以及正则表达式技术,试图使其比以前的所有技术都更好。这个星球上的很多管理员都喜欢 perl,因为它使系统管理更容易,因为结合了 shell 功能和报告生成速度(它是一种编程语言)。Perl 脚本可以像 shell 脚本一样简单地运行,在 Unix 世界中甚至有一个约定,即第一行指示将运行脚本的内容(熟悉的 hashbang 行)。所以运行 perl 脚本就像运行 shell 脚本一样简单。
那么,区别在于您需要一种成熟的编程语言,还是需要一个基本的 shell 脚本?答案就变成了使用能满足您需求的那个,因为两者对您都非常有用。如果你想要统计数据,那是不可能的,我们每个人都有自己的风格。只需在内部就某事达成一致并称之为(如果你要设定一个标准,那就把它变成 perl,因为它有更多的特性,你永远不想因为你设定了一个不切实际的标准而被抓住。Perl 也更具可扩展性在将来)。在这种情况下,最好限制自己使用两种或三种语言。
回到开头,我提到您有两个选择:系统级别和数据库级别。
如果您的目的主要是系统级别,那么我们已经回答了此处的所有问题(使用适合您需要的问题)。如果您还需要对数据库进行编程,那么您真的需要对 perl 进行标准化或真正习惯命令行语法,因为 Perl 具有适用于地球上某处所有可以想到的数据库的模块,如果不存在,它可以编写(示例:DBI -> DBD:DB2 -> DB2 客户端)。
顺便说一句,我使用 Microsoft SQL Server 和 C#,所以我生活在 Windows 世界中,我使用 PowerShell 而不是 DOS 批处理文件。PowerShell 在很多方面与 perl 相似,并且比 DOS 批处理编程给了我更多的灵活性(但世界上有很多管理员仍在使用旧的 DOS 脚本来管理他们的系统)。虽然 DOS 批处理系统允许数组、循环、变量和所有其他内容,但使用编程语言而不是 shell 脚本进行编程要容易得多,所以我的工作效率更高。
归根结底,真正的问题是您的脚本环境需要哪些功能,而我们无法帮助您。但我总是会选择更清晰、可维护性和可扩展性,而不是“这是盒子里的东西”。
ksh 或 bash 允许您通过 SQL*Plus 编写项目脚本,并且您可以通过它做相当复杂的事情。然而,shell 脚本往往有点“只写”,sh 及其派生词对于开发复杂的程序逻辑来说并不是很好。对于运行自动化任务,它们没问题。对于复杂的客户端数据操作,不太好(尽管有 sed/awk)。
Perl 有各种 Oracle 库,例如 DBD:Oracle,可通过 CPAN 获得,它更适合涉及复杂客户端处理的工作,因为它的类型系统比“文本行”更复杂一些。另一个对此非常有用的选择是 python 和 cx_Oracle。