【问题标题】:Amazon RDS SQL Server: how to detect if it is RDS?Amazon RDS SQL Server:如何检测是否为 RDS?
【发布时间】:2016-03-10 11:22:11
【问题描述】:

我正在尝试将我的数据库移植到 RDS。由于限制,需要进行一些更改。

是否可以检测到当前数据库在 RDS 中的内部脚本(存储过程等)?

更新。 我在我的函数中使用这种方式进行测试:

if CHARINDEX(N'EC2AMAZ',(cast(serverproperty('ServerName') as nvarchar(256))))>0 
   return 1 
else 
   return 0

【问题讨论】:

  • 您的edit 确实是一个答案,在我看来与当前唯一的答案一样好。您应该将其作为答案发布(如果您实际成功使用它,请接受它)。它会帮助其他人不要错过它,谢谢。

标签: sql-server amazon-rds


【解决方案1】:

我喜欢 @xiani 的方法,并决定稍微增强它(如果 SQL Server 的“正常”实例有一个 [rdsadmin] 数据库)。

DECLARE @IsAmazonRDS BIT = 0;

--1st test: does the [rdsadmin] database exist?
IF DB_ID('rdsadmin') IS NOT NULL
BEGIN
    BEGIN TRY
        --2nd test: If this is an Amazon RDS instance, we should not able to access the database "model" under the current security context.
        DECLARE @FileCount INT;
        SELECT @FileCount = COUNT(*) FROM model.sys.database_files;
    END TRY
    BEGIN CATCH
        SET @IsAmazonRDS = 1;
        --Comment/uncomment to verify the flag is set.
        --SELECT 'Inside Catch';
    END CATCH
END

这可以根据您确定的任何标准辅以第三、第四等附加检查。自己决定要走多远。

【讨论】:

    【解决方案2】:

    这不是万无一失的,并且取决于现有的 rdsadmin 数据库(AWS 似乎总是创建),但我使用这个:

    SELECT CASE WHEN db_id('rdsadmin') IS NULL THEN 0 ELSE 1 END AS RDS_DATABASE;
    

    【讨论】:

      【解决方案3】:

      我在我的函数中使用这种方式:

      if CHARINDEX(N'EC2AMAZ',(cast(serverproperty('ServerName') as nvarchar(256))))>0 
         return 1 
      else 
         return 0
      

      现在可以了。

      【讨论】:

        猜你喜欢
        • 2012-05-17
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多