Obtaining a unique database identifier for SQL Server 2005 and later

前端 未结 4 761
清酒与你
清酒与你 2021-01-20 12:14

Is there a way to obtain a unique database identifier (such as a GUID) from a SQL 2005 database?

I found this article: http://msdn.microsoft.com/en-us/library/micr

4条回答
  •  执笔经年
    2021-01-20 12:28

    Indeed, I used profiler to find that the database_guid is indeed coming from sys.database_recovery_status, here is the code I captured:

    
    
        exec sp_executesql N'SELECT
        ISNULL((case dmi.mirroring_redo_queue_type when N''UNLIMITED'' then 0 else dmi.mirroring_redo_queue end),0) AS [MirroringRedoQueueMaxSize],
        ISNULL(dmi.mirroring_connection_timeout,0) AS [MirroringTimeout],
        ISNULL(dmi.mirroring_partner_name,'''') AS [MirroringPartner],
        ISNULL(dmi.mirroring_partner_instance,'''') AS [MirroringPartnerInstance],
        ISNULL(dmi.mirroring_role,0) AS [MirroringRole],
        ISNULL(dmi.mirroring_safety_level + 1, 0) AS [MirroringSafetyLevel],
        ISNULL(dmi.mirroring_state + 1, 0) AS [MirroringStatus],
        ISNULL(dmi.mirroring_witness_name,'''') AS [MirroringWitness],
        ISNULL(dmi.mirroring_witness_state + 1, 0) AS [MirroringWitnessStatus],
    
        CAST(case when dmi.mirroring_partner_name is null then 0 else 1 end AS bit) AS [IsMirroringEnabled],
        ISNULL(dmi.mirroring_guid,''00000000-0000-0000-0000-0000000000000000'') AS [MirroringID],
        ISNULL(dmi.mirroring_role_sequence,0) AS [MirroringRoleSequence],
        ISNULL(dmi.mirroring_safety_sequence,0) AS [MirroringSafetySequence],
        ISNULL(dmi.mirroring_failover_lsn,0) AS [MirroringFailoverLogSequenceNumber],
        dtb.is_ansi_null_default_on AS [AnsiNullDefault],
        dtb.is_ansi_nulls_on AS [AnsiNullsEnabled],
        dtb.is_ansi_padding_on AS [AnsiPaddingEnabled],
        dtb.is_ansi_warnings_on AS [AnsiWarningsEnabled],
        dtb.is_arithabort_on AS [ArithmeticAbortEnabled],
        dtb.is_auto_shrink_on AS [AutoShrink],
        dtb.is_cursor_close_on_commit_on AS [CloseCursorsOnCommitEnabled],
        dtb.is_concat_null_yields_null_on AS [ConcatenateNullYieldsNull],
        dtb.is_numeric_roundabort_on AS [NumericRoundAbortEnabled],
        dtb.is_quoted_identifier_on AS [QuotedIdentifiersEnabled],
        dtb.is_read_only AS [ReadOnly],
        dtb.is_recursive_triggers_on AS [RecursiveTriggersEnabled],
        dtb.is_local_cursor_default AS [LocalCursorsDefault],
        dtb.page_verify_option AS [PageVerify],
        dtb.recovery_model AS [RecoveryModel],
        dtb.user_access AS [UserAccess],
        dtb.is_db_chaining_on AS [DatabaseOwnershipChaining],
        dtb.is_auto_update_stats_async_on AS [AutoUpdateStatisticsAsync],
        dtb.is_date_correlation_on AS [DateCorrelationOptimization],
        dtb.is_trustworthy_on AS [Trustworthy],
        dtb.name AS [Name],
        dtb.database_id AS [ID],
        dtb.create_date AS [CreateDate],
        dtb.is_auto_create_stats_on AS [AutoCreateStatisticsEnabled],
        dtb.is_auto_update_stats_on AS [AutoUpdateStatisticsEnabled],
        dtb.is_parameterization_forced AS [IsParameterizationForced],
        dtb.is_read_committed_snapshot_on AS [IsReadCommittedSnapshotOn],
        dtb.is_auto_close_on AS [AutoClose],
        dtb.is_broker_enabled AS [BrokerEnabled],
        CAST(isnull(dtb.source_database_id, 0) AS bit) AS [IsDatabaseSnapshot],
        ISNULL(DB_NAME(dtb.source_database_id), N'''') AS [DatabaseSnapshotBaseName],
        dtb.is_fulltext_enabled AS [IsFullTextEnabled],
        dtb.service_broker_guid AS [ServiceBrokerGuid],
        dtb.snapshot_isolation_state AS [SnapshotIsolationState],
        (dtb.is_published*1+dtb.is_subscribed*2+dtb.is_merge_published*4) AS [ReplicationOptions],
        ISNULL(suser_sname(dtb.owner_sid),'''') AS [Owner],
        ISNULL(dtb.log_reuse_wait,0) AS [LogReuseWaitStatus],
        drs.recovery_fork_guid AS [RecoveryForkGuid],
        drs.database_guid AS [DatabaseGuid],
        CAST((case when drs.last_log_backup_lsn is not null then 1 else 0 end) AS bit) AS [HasFullBackup],
        CAST(case when dtb.name in (''master'',''model'',''msdb'',''tempdb'') then 1 else dtb.is_distributor end AS bit) AS [IsSystemObject],
        CAST(case when ctb.database_id is null then 0 else 1  end AS bit) AS [ChangeTrackingEnabled],
        CAST(ISNULL(ctb.is_auto_cleanup_on,0) AS bit) AS [ChangeTrackingAutoCleanUp],
        ISNULL(ctb.retention_period,0) AS [ChangeTrackingRetentionPeriod],
        CAST(ISNULL(ctb.retention_period_units,0) AS tinyint) AS [ChangeTrackingRetentionPeriodUnits],
        dtb.containment AS [ContainmentType],
        dtb.default_language_lcid AS [DefaultLanguageLcid],
        dtb.default_language_name AS [DefaultLanguageName],
        dtb.default_fulltext_language_lcid AS [DefaultFullTextLanguageLcid],
        ISNULL(dtb.default_fulltext_language_name,N'''') AS [DefaultFullTextLanguageName],
        CAST(dtb.is_nested_triggers_on AS bit) AS [NestedTriggersEnabled],
        CAST(dtb.is_transform_noise_words_on AS bit) AS [TransformNoiseWords],
        dtb.two_digit_year_cutoff AS [TwoDigitYearCutoff],
        dtb.target_recovery_time_in_seconds AS [TargetRecoveryTime],
    
                  case
                  when dtb.collation_name is null then 0x200
                  else 0
                  end |
                  case
                  when 1 = dtb.is_in_standby then 0x40
                  else 0
                  end |
                  case dtb.state
                  when 1 then 0x2
                  when 2 then 0x8
                  when 3 then 0x4
                  when 4 then 0x10
                  when 5 then 0x100
                  when 6 then 0x20
                  else 1
                  end
                 AS [Status],
        CAST(( case LOWER(convert( nvarchar(128), DATABASEPROPERTYEX(dtb.name, ''Updateability''))) when ''read_write'' then 1 else 0 end) AS bit) AS [IsUpdateable],
        CAST(dtb.is_encrypted AS bit) AS [EncryptionEnabled],
        CAST(dtb.is_honor_broker_priority_on AS bit) AS [HonorBrokerPriority],
        CAST(has_dbaccess(dtb.name) AS bit) AS [IsAccessible],
        ISNULL(fsopt.directory_name , N'''') AS [FilestreamDirectoryName],
        ISNULL(fsopt.non_transacted_access , 0) AS [FilestreamNonTransactedAccess],
        dtb.name AS [DatabaseName2],
        dtb.containment AS [ContainmentType2]
        FROM
        master.sys.databases AS dtb
        LEFT OUTER JOIN sys.database_mirroring AS dmi ON dmi.database_id = dtb.database_id
        LEFT OUTER JOIN sys.database_recovery_status AS drs ON drs.database_id = dtb.database_id
        LEFT OUTER JOIN sys.change_tracking_databases AS ctb ON ctb.database_id = dtb.database_id 
        LEFT OUTER JOIN sys.database_filestream_options AS fsopt ON fsopt.database_id = dtb.database_id
        WHERE
        (dtb.name=@_msparam_0)',N'@_msparam_0 nvarchar(4000)',@_msparam_0=N'testdb3'
    
    

    Search "sys.database_recovery_status as drs"

提交回复
热议问题