Amazon RDS SQL Server:如何检测它是否是RDS?

时间:2016-03-10 11:22:11

标签: sql-server amazon-rds

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

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

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

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

3 个答案:

答案 0 :(得分:2)

我喜欢@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

可以根据您确定的任何标准对第3,第4等进行补充检查。自己决定要走多远。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我在我的功能中使用这种方式:

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

现在可行。