কীভাবে এসকিউএল সার্ভারের সঞ্চিত পদ্ধতি পুনর্বিবেচনার ইতিহাস রাখা যায়


22

দ্রষ্টব্য: আমি সম্পূর্ণ সংস্করণ নিয়ন্ত্রণ সম্পর্কে জিজ্ঞাসা করছি না।

এসকিউএল সার্ভারে সঞ্চিত পদ্ধতির ইতিহাস রাখার কোনও উপায় কি স্বয়ংক্রিয়ভাবে নেই?

গুগল ডক্স কীভাবে দস্তাবেজগুলির সংস্করণগুলির ইতিহাস এবং উইকিপিডিয়াকে স্বয়ংক্রিয়ভাবে নিবন্ধগুলির সংস্করণগুলির ইতিহাস রাখে তার অনুরূপ।

আমি চাই না যে ব্যবহারকারীরা সঞ্চিত প্রক্রিয়াগুলি আপডেট করে রাখেন তারাও সঞ্চিত পদ্ধতিগুলির একটি ভান্ডার রক্ষণাবেক্ষণ করতে পারে। এটি খুব বেশি কাজ এবং লোকেরা এটি করবে না।

আশা করি এসকিউএল সার্ভারে এটি চালু করতে পারি এমন কিছু ...

(এবং সঞ্চিত পদ্ধতি দ্বারা প্রকৃতপক্ষে আমি ফাংশন, ট্রিগার ইত্যাদির অর্থ মূলত প্রোগ্রামযোগ্যতার আওতাধীন।)

আমি /programming/14522224/how-to-keep-history-of-sql-server-stored-procedure-revisions এ প্রথম পোস্ট করেছি যেহেতু আমি সন্দেহ করি এটি সেখানে আরও দেখাবে।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
পল হোয়াইট GoFundMonica বলেছেন

উত্তর:


31

যদিও আমি সম্পূর্ণ চুক্তিতে রয়েছি যে সোর্স কন্ট্রোলটি এটি করার সঠিক উপায়, আমি আরও বুঝতে পেরেছি যে সমস্ত পরিবেশই একা (যদি আদৌ) নির্ভর করতে যথেষ্ট শৃঙ্খলাবদ্ধ নয় এবং অ্যাপটি বজায় রাখার জন্য কখনও কখনও সরাসরি পরিবর্তনগুলি করতে হয় দৌড়ানো, একটি ক্লায়েন্ট সংরক্ষণ করুন, আপনার কি আছে।

আপনি একটি পৃথক ডাটাবেসে সমস্ত সংশোধনী একটি টেবিলের মধ্যে রাখতে ডিডিএল ট্রিগার ব্যবহার করতে পারেন (এবং অবশ্যই সেই ডাটাবেসটি প্রায়শই ব্যাক আপ করুন)। ধরে নিচ্ছি আপনার কাছে একটি ইউটিলিটি ডাটাবেস রয়েছে:

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/


2
এটি করার সহজ ও দেশীয় উপায় +1। আমার অনুমান যে এই উত্তরটি ওপি খুঁজছিল।
থমাস স্ট্রিংগার

হ্যাঁ, এটি ওপি-র সমস্যার সমাধানে যাবে।
মেরিয়ান

আমি এই উত্তরটি পছন্দ করি কারণ আপনি একবার এটি করেন তবে আপনি কোনও অতিরিক্ত ব্যয়ে স্বয়ংক্রিয় সংস্করণ পাবেন। আমি সম্মত হই যে এটি উত্স নিয়ন্ত্রণের মতো নয়, তবে এটি একটি মূল্যবান সুরক্ষা জাল যা এড়ানো উচিত নয়।
ড্যানিয়েল উইলিয়ামস

2

আমি মনে করি না যে স্বয়ংক্রিয়ভাবে আপনার এসকিউএল উত্স কোডটি সংস্করণ নিয়ন্ত্রণে রাখার কোনও উপায় আছে। আমার অর্থ নেটিভ এসকিউএল সার্ভার সরঞ্জামগুলির সাথে। আমি মনে করি আপনি গিট বা এসএনএন ব্যবহার করে শেষ করতে পারেন তবে আমার পক্ষে সবচেয়ে ভাল সমাধানটি হ'ল সংস্করণ নিয়ন্ত্রণের অধীনে ডাটাবেসগুলি (এবং সঞ্চিত পদ্ধতি) রাখার জন্য রেড গেটের উত্স নিয়ন্ত্রণ কিনুন ।


1
অবশ্যই, একটি ডিডিএল ট্রিগার তৃতীয় পক্ষের সরঞ্জামগুলির প্রয়োজন ছাড়াই এটি করতে পারে (আমার উত্তর দেখুন)। অবশ্যই সোর্স কন্ট্রোল অনেক বেশি নিয়ন্ত্রণ এবং নিরীক্ষণের প্রস্তাব দেয় এবং 3 য় পক্ষের সরঞ্জামগুলিতে আপনি নিজের লেখার চেয়ে অনেক বেশি বৈশিষ্ট্য পাবেন তবে তাদের সরাসরি পরিবর্তন থেকে রক্ষা করার উপায় তাদের কাছে নেই - অন্য কথায় তারা নির্ভর করে সোর্স কন্ট্রোল প্রোটোকল (যা সর্বদা সম্ভব হয় না) মান্যকারী প্রত্যেকের জন্য।
অ্যারন বারট্র্যান্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.