যদিও আমি সম্পূর্ণ চুক্তিতে রয়েছি যে সোর্স কন্ট্রোলটি এটি করার সঠিক উপায়, আমি আরও বুঝতে পেরেছি যে সমস্ত পরিবেশই একা (যদি আদৌ) নির্ভর করতে যথেষ্ট শৃঙ্খলাবদ্ধ নয় এবং অ্যাপটি বজায় রাখার জন্য কখনও কখনও সরাসরি পরিবর্তনগুলি করতে হয় দৌড়ানো, একটি ক্লায়েন্ট সংরক্ষণ করুন, আপনার কি আছে।
আপনি একটি পৃথক ডাটাবেসে সমস্ত সংশোধনী একটি টেবিলের মধ্যে রাখতে ডিডিএল ট্রিগার ব্যবহার করতে পারেন (এবং অবশ্যই সেই ডাটাবেসটি প্রায়শই ব্যাক আপ করুন)। ধরে নিচ্ছি আপনার কাছে একটি ইউটিলিটি ডাটাবেস রয়েছে:
USE Utility;
GO
CREATE TABLE dbo.ProcedureChanges
(
EventDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
EventType NVARCHAR(100),
EventDDL NVARCHAR(MAX),
DatabaseName NVARCHAR(255),
SchemaName NVARCHAR(255),
ObjectName NVARCHAR(255),
HostName NVARCHAR(255),
IPAddress VARCHAR(32),
ProgramName NVARCHAR(255),
LoginName NVARCHAR(255)
);
এখন আপনার ডাটাবেসে, প্রথমে আমরা যাকে "প্রাথমিক নিয়ন্ত্রণ" বলব তা হ'ল - সঞ্চিত পদ্ধতির বর্তমান সংস্করণ:
USE YourDB;
GO
INSERT Utility.dbo.ProcedureChanges
(
EventType,
EventDDL,
DatabaseName,
SchemaName,
ObjectName
)
SELECT
N'Initial control',
OBJECT_DEFINITION([object_id]),
DB_NAME(),
OBJECT_SCHEMA_NAME([object_id]),
OBJECT_NAME([object_id])
FROM
sys.procedures;
পরবর্তী পরিবর্তনগুলি ক্যাপচার করতে এখন ডাটাবেসে একটি ডিডিএল ট্রিগার যুক্ত করুন:
USE YourDB;
GO
CREATE TRIGGER CaptureStoredProcedureChanges
ON DATABASE
FOR CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @EventData XML = EVENTDATA(), @ip VARCHAR(32);
SELECT @ip = client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
INSERT Utility.dbo.ProcedureChanges
(
EventType,
EventDDL,
SchemaName,
ObjectName,
DatabaseName,
HostName,
IPAddress,
ProgramName,
LoginName
)
SELECT
@EventData.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
@EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'),
@EventData.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(255)'),
@EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)'),
DB_NAME(), HOST_NAME(), @ip, PROGRAM_NAME(), SUSER_SNAME();
END
GO
সময়ের সাথে সাথে পদ্ধতির পরিবর্তনগুলি দেখতে এবং তুলনা করা সহজ হয়ে যায়, নতুন পদ্ধতিতে সিস্টেমে যুক্ত হওয়া দেখা, পদ্ধতিগুলি বাদ দেওয়া দেখুন, এবং এই ইভেন্টগুলির যে কোনও সম্পর্কে কাদের সাথে কথা বলতে হবে তা সম্পর্কে ভাল ধারণা রয়েছে।
এখানে আরও তথ্য:
http://www.mssqltips.com/sqlservertip/2085/sql-server-ddl-triggers-to-track-all-database-changes/