mta_va
چهارشنبه 27 مهر 1390, 21:18 عصر
سلام
یه سوال :
من میخوام از دیتابیسم لاگ داشته باشم یعنی اطلاعات جامعی از کارب که هر کاربر با اپلیکیشن انجام داده مثل ثبت و ویرایش و حذف و... را به صورت لاگ ثبت کنم...
متوجه قابلیت Change Data Capture در اسکیوال شدم فقط حالا نمیدونم این قابلیت به درده کاری که من میخوام بکنم میخوره یا نه ؟؟!!
خیلی هم با Change Data Capture کار نکردم!
ممنون میشم لطف بکنید و راهنماییم کنید .
ممنون
asemoon barooni
پنج شنبه 28 مهر 1390, 10:39 صبح
سلام
اگه فقط میخواهید تغییرات مربوط به داده را Log کنید بله این ویژگی نیاز شما رو برآورده می کند. برای آشنایی هم می تونید اینجا رو ببینید: http://www.simple-talk.com/sql/learn-sql-server/introduction-to-change-data-capture-%28cdc%29-in-sql-server-2008/
in_chand_nafar
جمعه 29 مهر 1390, 13:25 عصر
مکانیزم جدیدی که به شما این اجازه را میدهد تا تغییرات داده ای و ساختاري در یک جدول را پیگیری كنيد
اين تغييرات شامل :
1- تغيير مقادير جداول
2- تغيير ساختار جداول
مزاياي استفاده از CDC
1- عدم نياز به استفاده از Trigger در جداول
2- با توجه به اينكه تغييرات مستقيماً ازLogFileخوانده ميشودOverHeadكمتري نسبتTriggerدارد.
نكته مهم هر جدولي كه بخواهد از اين ويژگي استفاده نمايد بايد داراي PK باشد
دوست عزيز مثال هاي زير را با دقت كامل اجرا كن تا متوجه امكانات اين قابليت زيباي SQL شوي در مثال بالاي بعضي از اسكريپت ها ساعت نوشته شده براي آزمايش واقعي و درست مثال ساعت سيستم را به آن حالت تنظيم كن
در ضمن در CDC اگر تو تصاوير MSDN و مقاله ها با دقت بخوني گفته شده كه سرويس Agent را فعال كنيد اين قابليت از Agent براي ايجاد Jobاستفاده كرده كه در اين JOBها صرفا پروسه مربوط به Captureگيري فعال مي شود اين پروسه اطلاعات لازم خود را از Log File مي خواند و كمترين ميزان Over Head را هنگام Log گيري دارد.
اسكريپ ها
---------------------------------------------------
--CDCفعال سازي قابليت
EXEC sys.sp_cdc_enable_db
Go
------------------------------------------------
--براي جدول فوق CDC فعال سازي قابليت
--ايجاد خودكار جاب و فانكشن به
EXEC sys.sp_cdc_enable_table
@Source_Schema = N'dbo',
@Source_Name = N'Students',
@Role_Name = null,
@Supports_Net_Changes = 1
GO
--گيريCaptureاستخراج پروسه هاي مربوط به
--به ستون هايي كه قرار است تغييرات آن ذخيره شود دقت كنيد
EXEC SYS.sp_cdc_help_change_data_capture
GO
------------------------------ساعت 9
--حالتي از دستور درج اطلاعات در 2008
INSERT INTO Students VALUES
(100,'Ali','Ahmadi'),
(101,'Masud','Taheri'),
(102,'Saman','Farzam')
GO
--استخراج سابقه تغييرات
-- Please note that __$operation column indicates 1 for delete, 2 for insert,
-- 3(old Values) & 4(New Values) for update
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Students
(sys.fn_cdc_get_min_lsn('dbo_Students'), sys.fn_cdc_get_max_lsn(), N'all update old' )
GO
------------------------------ساعت 10
DELETE FROM Students WHERE CODE=100
GO
--استخراج سابقه تغييرات
-- Please note that __$operation column indicates 1 for delete, 2 for insert,
-- 3(old Values) & 4(New Values) for update
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Students
(sys.fn_cdc_get_min_lsn('dbo_Students'), sys.fn_cdc_get_max_lsn(), N'all update old' )
GO
------------------------------ساعت 11
UPDATE Students SET NAME='Ali',FAMILY='Farzam Tehrani' WHERE CODE=102
GO
--استخراج سابقه تغييرات
-- Please note that __$operation column indicates 1 for delete, 2 for insert,
-- 3(old Values) & 4(New Values) for update
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Students
(sys.fn_cdc_get_min_lsn('dbo_Students'), sys.fn_cdc_get_max_lsn(), N'all update old' )
GO
------------------
--به پارامتر آخر دقت شود
--كليه مقادير قديم مربوط به دستور به روز رساني نمايش داده نمي شود
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Students
(sys.fn_cdc_get_min_lsn('dbo_Students'), sys.fn_cdc_get_max_lsn(), N'all')
Go
---------------------------------------------------------------------------------
--بدست آوردن سوابق تغييرات داده ها بر حسب زمان
SELECT GETDATE();
DECLARE @begin_time DATETIME
DECLARE @end_time DATETIME
DECLARE @begin_lsn BINARY(10)
DECLARE @end_lsn BINARY(10)
SET @begin_time = '2010-10-21 08:57:00'
SET @end_time = '2010-10-21 10:30:00'
SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);
SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Students(@begin_lsn , @end_lsn, N'all');
SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Students(@begin_lsn , @end_lsn, N'all update old');
-----------------------------------------------------------------------
--براي جدول CDC غير فعال كردن قابليت
EXECUTE sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'Students',
@capture_instance = N'dbo_Students';
GO
--------------------------------
--CDCغير فعال كردن قابليت
--هاJobحذف كليه
EXEC sys.sp_cdc_disable_db
behradnasehi
شنبه 24 آبان 1393, 09:17 صبح
با سلام
خیلی بهره بردیم
الهی عاقبت بخیر بشی
:تشویق:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.