【问题标题】:How should a SQL script detect that it is executing on an AWS RDS SQL Server instance?SQL 脚本应如何检测它正在 AWS RDS SQL Server 实例上执行?
【发布时间】:2020-05-11 15:04:43
【问题描述】:

我有一些需要针对本地和 AWS RDS SQL Server 实例的数据库部署脚本,但有些脚本执行 RDS 不支持的命令。

与其维护两个脚本(90% 相同),我更愿意在 RDS 中运行时使用过程 T-SQL 逻辑来跳过/修改脚本的各个部分。

目前,我正在使用以下逻辑

IF EXISTS (SELECT * FROM sys.databases WHERE name = 'rdsadmin' AND database_id = 5)
...

是否有更好/更可靠的方法来确定脚本是否在 RDS SQL Server 实例上执行?

(我可能只是缺少正确的搜索词来找到答案 - 如果是这样,请道歉。)

【问题讨论】:

  • 这是 Ola Hallengren 在他的维护解决方案脚本中使用的逻辑:DECLARE @AmazonRDS bit = CASE WHEN DB_ID('rdsadmin') IS NOT NULL AND SUSER_SNAME(0x01) = 'rdsa' THEN 1 ELSE 0 END

标签: sql-server tsql amazon-rds


【解决方案1】:

目前,似乎没有可从 T-SQL 访问的单一明确指标表明实例正在 AWS RDS 中运行。

相反,有许多设置/对象表明实例可能在 RDS 上运行,包括(但不限于):

  • 存在rdsadmin 数据库(DBID 5)
  • SUSER_SNAME(0x01) = 'rdsa'
  • msdb 中存在名称以 rds_ 开头的存储过程 - 例如,msdb.dbo.rds_backup_database

如果其中任何两个测试为真,则很可能该实例正在 RDS 中运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    相关资源
    最近更新 更多