Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर स्कीमा ऑडिटिंग?

मेरे पास एक ऐसी प्रणाली है जो इस प्रकार की चीज़ के लिए डीडीएल ट्रिगर का उपयोग करती है। यह मेरी जरूरतों के लिए काफी अच्छा काम करता है। यह मूल रूप से Sql Server 2005 पर विकसित किया गया था, और अब यह Sql Server 2008R2 सिस्टम पर रहता है। यह आरोन बर्ट्रेंड की टिप्पणी में लिंक द्वारा वर्णित के समान है।

इसके समान एक तालिका बनाएं।

CREATE TABLE [dbo].[SchemaLog](
    [SchemaLogID] [int] IDENTITY(1,1) NOT NULL,
    [PostTimeUtc] [datetime] NOT NULL,
    [DatabaseUser] [nvarchar](128) NOT NULL,
    [Event] [nvarchar](128) NOT NULL,
    [Schema] [nvarchar](128) NULL,
    [Object] [nvarchar](128) NULL,
    [TSQL] [nvarchar](max) NOT NULL,
    [XmlEvent] [xml] NOT NULL,
 CONSTRAINT [PK_SchemaLog_1] PRIMARY KEY CLUSTERED 
(
    [SchemaLogID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

सुनिश्चित करें कि सभी के पास टेबल पर इन्सर्ट अनुमतियाँ हैं, फिर इसके समान एक ddl ट्रिगर बनाएं।

CREATE TRIGGER [ddlDatabaseTriggerLog] ON DATABASE  FOR DDL_DATABASE_LEVEL_EVENTS AS  
BEGIN     
    SET NOCOUNT ON;     
    DECLARE @data XML;     
    DECLARE @schema sysname;     
    DECLARE @object sysname;     
    DECLARE @eventType sysname;     
    SET @data = EVENTDATA();     
    SET @eventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'sysname');     
    SET @schema = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname');     
    SET @object = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'sysname')      
    IF @object IS NOT NULL         
        PRINT '  ' + @eventType + ' - ' + @schema + '.' + @object;     
    ELSE         
        PRINT '  ' + @eventType + ' - ' + @schema;     

    IF @eventType IS NULL         
        PRINT CONVERT(nvarchar(max), @data);     

    INSERT [dbo].[SchemaLog]          (         
        [PostTimeUtc]
    ,          [DatabaseUser]
    ,          [Event]
    ,          [Schema]
    ,          [Object]
    ,          [TSQL]
    ,          [XmlEvent]         )      
    VALUES          (         
        GETUTCDATE()
    ,          CONVERT(sysname, CURRENT_USER)
    ,          @eventType
    ,          CONVERT(sysname, @schema)
    ,          CONVERT(sysname, @object)
    ,          @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)')
    ,          @data         ); 

END;

क्रम में परिवर्तन का चयन करने के लिए देखें

create view SchemaLogOrdered
as
SELECT top 10000 *
FROM            dbo.SchemaLog
ORDER BY  SchemaLogID DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं JDBC का उपयोग करके SQL Server 2008 डेटाबेस से कैसे जुड़ूँ?

  2. तालिका बनाने के बाद सम्मिलित करते समय अमान्य स्तंभ नाम त्रुटि

  3. डायनामिक कॉलम काउंट के साथ पंक्ति मानों को कॉलम में कैसे बदलें?

  4. SQL में तारीखों की तुलना करने वाली क्वेरी

  5. मैं MySQL में टेबल एलियास कैसे बनाऊं?