DBA 是否需要知道如何使用 SQL 之外的系统语言进行编程?

p m*_*mac 20 development

除了“只是 SQL”之外,数据库管理员在多大程度上需要了解系统或应用程序级编程语言(例如 .NET 或 PHP)?

就本问题而言,此答案(SQL ANSI 86、SQL ISO 87、SQL:2008)不考虑特定版本的 SQL 标准,因为该问题与 SQL 领域之外的桌面或服务器语言有关。

gbn*_*gbn 25

这取决于。

在一家大商店里,也许不是因为您有 1000 台服务器需要照顾,并且提供了您的工具。在小店里,你可能需要更多的知识,因为你的职权范围更广。

脚本语言(例如 PowerShell、cmd.exe)对于监控、部署等总是很有用。我经常有一些必须维护的 Perl 脚本(差不多)。然后是您应该了解的各种 ETL 包。

也就是说,大多数 DBA(我所知道的)都能够编写基本的 CLR 内容或非常了解 PL/SQL。对我来说,分界线是了解 .net 或 Java 的更广泛的模式或架构。作为 DB 开发人员或 DBA,我不需要它。就像 .net、PHP 或 Java Monkeys 不像我那样了解数据库设计、架构或代码一样。

就我个人而言,几年前我决定停止追逐最新或最好的客户端语言,而是专注于数据库工作。这并不使我成为“非程序员”:如果必须的话,我需要再次学习它。

  • +1 表示“这取决于”,然后是其他人都错过的东西(或者可能认为太明显了)-这取决于您商店的规模。我之前的工作是我们三个人在 IT 部门,我不得不做一些事情,包括 Web 开发。现在在我现在有 80 名 IT 员工的地方,所有的时间都是数据库。 (4认同)

Con*_*lls 14

我知道 DBA 很少或根本没有编程技能就可以逃脱,但是我认为任何优秀的每个 DBA 至少都具有合理的编程技能。我能想到的一两个拥有丰富的开发背景并且本身就是相当优秀的开发人员。有相当 数量开源 工具是由在日常工作中担任 DBA 的人和曾经担任过 DBA 的编写 TOAD 的 IIRC 编写的。

根据角色的不同,您可能会发现自己在编写或调整查询、编写脚本以自动执行任务或咨询应用程序设计。在某些情况下,您可能只是通过 OEM 或其他一些监控工具来关注一堆服务器。

现代“企业”开发环境,如 .Net 或 Java 已经足够复杂,开发人员可以通过专门从事这些环境来从事职业。作为一名 DBA,尤其是在开发领域,掌握 C# 或 Java 的工作知识可能不会有什么坏处,但您可能不会花很多时间在其中实际编码。

尽管很多系统都公开 .Net、Java、COM 或 Web 服务 API,但您可能会从平台上使用的任何脚本工具中获得更多收益。如果您需要针对这些 API 编写代码,则您至少需要了解可以使用该 API 的内容的基本工作知识。但是,执行此操作通常不需要高级应用程序架构技能。

一些开发人员会拥有很强的数据库技能,但对数据库的非理性恐惧在开发界很普遍。许多开发人员也从未真正了解 SQL 背后的“设置操作”范式。作为开发 DBA,您可能会发现自己要处理这种情况的后果,并且可能不得不干预存储过程代码以解决性能问题。

围绕数据库的 ETL 和工具也可能属于 DBA 的职责范围。我看到不少广告中的 DBA 角色似乎涉及大量的后端开发工作。这在较小的公司中最为常见。最近的一位发帖者希望将自定义指标集成到 Oracle Enterprise Manager 中,该管理器具有一个插件 API 来执行此操作。看到这样的需求出现是很常见的,基本上唯一的方法是编写一些胶水代码。

有很多“工具专家”在 IT 领域工作,尽管存在狭隘性,他们仍然可以完成有用的工作。然而,当工具耗尽时,通常完成某事的唯一方法就是实际编写一些代码来完成它。这就是编程技能将男人与男孩区分开来的地方。


dat*_*god 6

我会说通常不会,但它永远不会受到伤害。SQL Server 足够大,我认为一个人无法掌握整个产品。从 SQL Server 4.2 开始,我一直是 DBA,并认为自己是大多数领域的专家,但我承认,如果没有 google 的每一步,我将无法编写 MDX 查询。

我想说的是,你不可能成为所有方面的专家。成为一名真正优秀的 DBA 意味着您应该擅长 T-SQL,但可能不太擅长 .NET,或者至少不如其他可以将时间集中在 .NET 上的人那样有效。

Powershell 很高兴知道,就像 SSIS 的来龙去脉一样。除此之外,将其他开发语言留给开发人员。


Aar*_*ron 5

根据我的经验,虽然大多数 DBA 具有某种开发背景,但他们根本不需要编写代码。我共事过的真正优秀的 DBA 拥有广泛的知识,包括 shell 脚本、操作系统和专门的应用程序知识(例如:PeopleSoft)。

我在研究生院有一位数据库管理讲师,他给了我们一个问题列表,任何优秀的 (Oracle) DBA 都应该能够回答:(我只会发布 40 个左右列表中的一些重点)

  • 为什么 Oracle 不自动在外键列上创建索引?
  • 删除约束时,何时使用 KEEP INDEX 子句?
  • 什么时候使用 IOT 与普通表?
  • 将表和索引放在不同的表空间中是个好主意吗?
  • VARCHAR 和 VARCHAR2 数据类型之间有什么区别?
  • 使用触发器还是约束来强制执行业务规则更好?
  • 何时使用自动分配与固定段大小?
  • 什么时候使用外部表、堆表和 B 树表?
  • 您应该多久清理一次回收站?
  • 您会推荐哪些策略来备份分区表?分区索引怎么样?

(Oracle) DBA 需要知道这些东西才能有效。我认识的大多数开发人员(他们针对 Oracle 编写代码)都很难正确回答其中的一两个。


db2*_*db2 5

如果您是 DBA,那么您可能在性能和安全领域(以及其他领域)工作。这可能涉及分析和协助调整开发人员正在处理的客户端应用程序。因此,了解开发人员使用的语言的基础知识以及如何与数据库服务器交互当然不会有什么坏处。对于 SQL Server,可能是 .NET。对于 MySQL,可能是 php 或 java 的某种组合。

例如,如果服务器对客户端线程有压力,那么能够通知开发人员他们应该为他们的 ObjectDataSource 使用单例实例,以便他们可以重用单个数据库连接,这会有所帮助。并且还要确保他们正确使用参数化查询来限制 SQL 注入。像那样的东西。

如果您是一名严格的 DBA,您将不会在开发客户端应用程序的意义上进行任何编程,但您应该知道它们是如何工作的(一般来说)。