PDA

View Full Version : سوال: چگونه از Logfile جهت نمایش سابقه تغییر اطلاعات استفاده کنیم؟



Arghavan_Reza
چهارشنبه 01 خرداد 1387, 13:46 عصر
با سلام خدمت دوستان،
در سایت جستجو کردم در مورد موضوع فوق مطلبی پیدا نکردم. لذا کلیه دوستانی که تجاربی در این مورد دارند، ارایه نظر بفرمایند.
البته روش هایی برای تهیه Log در نرم افزار (مستقل از نوع DB) وجود دارد ولی تصور میکنم در SQL Server 2000 جهت این مورد امکاناتی وجود داشته باشد.
با تشکر.:متفکر:

Arghavan_Reza
پنج شنبه 02 خرداد 1387, 16:57 عصر
کسی از Logfile استفاده نکرده است؟

AminSobati
پنج شنبه 02 خرداد 1387, 21:06 عصر
توصیه نمیکنم، چون اولا ممکنه Truncate بشه Log File. ثانیا داشتن Trigger بسیار موثر تر میتونه این کار رو انجام بده. اگرچه دستوراتی وجود داره اما آنالیز Log File راحت نیست.

Arghavan_Reza
شنبه 04 خرداد 1387, 18:59 عصر
A) آیا روش های دیگر Truncate نمیشوند؟
B) اگر از Trigger استفاده شود که پوستمان کنده میشه:
1 - باید برای هر جدولی یک تریگر بنویسیم!
2 - نوشتن این چنین تریگری اگر خاص هر جدول باشد که درست نیست و اگر Global بخواهیم بنویسیم که ...
3 - با چه فرمتی تغییرات را ذخیره کنیم که حجم بانک را تصاعدی بالا نبرد؟
4 - کجا ذخیره کنیم؟
C) چه دستوراتی برای نیل به این هدف وجود دارد که خود مجبور به آنالیز LogFile نباشیم؟
با تشکر.

Accidentboy
شنبه 04 خرداد 1387, 19:16 عصر
ببیند اگه منظورتون از استفاده از Logfile پیدا کردن تغییرات و اینکه چه کسی این تغییرات رو اعمال کرده

بهترین را اینکه تو جدول هایی که می خوایی ازشون Log بگیری Trigger بنویسی و از دستور

select net_address from master.dbo.sysprocesses
آدرس Mac اون سیستم رو با تغییراتی که داده تو جدولی ذخیره کنی

Arghavan_Reza
دوشنبه 06 خرداد 1387, 17:32 عصر
1) می توانید راه حلتان را شفاف تر بیان نمایید.
2) مزایا و معایب راه حل شما چیست؟
3) آیا مواردی را که در پست 2 مطرح نمودم، پاسخ میدهد؟
با تشکر

SabaSabouhi
سه شنبه 07 خرداد 1387, 14:46 عصر
A) آیا روش های دیگر Truncate نمیشوند؟
B) اگر از Trigger استفاده شود که پوستمان کنده میشه:
1 - باید برای هر جدولی یک تریگر بنویسیم!
2 - نوشتن این چنین تریگری اگر خاص هر جدول باشد که درست نیست و اگر Global بخواهیم بنویسیم که ...
3 - با چه فرمتی تغییرات را ذخیره کنیم که حجم بانک را تصاعدی بالا نبرد؟
4 - کجا ذخیره کنیم؟
C) چه دستوراتی برای نیل به این هدف وجود دارد که خود مجبور به آنالیز LogFile نباشیم؟
با تشکر.

با سلام
به‌ترين و مطمئن‌ترين راه همون Trigger هست. و بله! يه مقدار مشكل‌تر از SP نوشتنه، اما يه جورايى كنترل به‌ترى توش دارى.
1. بله براى هر جدول بايد يك Trigger بنويسى، البته مى‌تونى عمليات رو توى يك SP بگذارى و توى Trigger فقط اون SP رو با پارامترهاى مورد نظرت صدا كنى ( براى اين كه Triggerات كوچولوتر باشه )
2. چرا درست نيست؟ دقيقاً براى هر جدول بايد خاص نوشته بشه. البته همون‌طور كه تو آيتم قبل گفتم، به‌تره كه كارهاى تكرارى رو توى يك SP بگذارى كه Triggerات خيلى بزرگ نشه.
3. با هر فرمتى و هر شكلى كه ذخيره كنى حجم بانك رو خيلى زياد مى‌كنه. اگه اين Log نيازى نيست كه در كنار DataBase اصلى باشه مى‌تونى اون رو توى يك DB جداگانه نگهدارى كنى.
4. خوب طبيعتاً روى HardDisk. البته اگه همون‌طور كه توى مورد (3) گفتم اون رو توى DB جداگانه نگه‌دارى كنى مى‌تونى در فاصله‌ زمانى دلخواه ازشون Backup بگيرى و روى CD يا DVD يا Tape نگه‌دارى كنى.

عموماً LogFile براى بازسازى Database هنگام از بين رفتن آن استفاده مى‌شه و نه براى اين منظورى كه شما دارين. به اين صورت كه مى‌شه Transaction هاى موجود در Log رو روى آخرين Backup كامل عمل كرد و Database رو بازسازى كرد ( به همين دليل توصيه مى‌شه كه DB و LogFile در دو درايو جداگانه نگهدارى بشن )

صبا صبوحى