PDA

View Full Version : چند سوال متفاوت؟



aliasghar
چهارشنبه 09 فروردین 1385, 10:22 صبح
سلام
خسته نباشد


سوال اول:
چند تا جدول در دیتابیسم دارم که بوسیله کلید های خارجی به هم لینک هستند
برای عملیات پایان سال میخواهم جداول را truncate کنم چونکه هم حجم اطلاعات
بالا هست و هم بر روی بعضی از جداول فیلد identity دارم که باید صفر شود ولی پیام میدهد





Cannot truncate table 'dbo.tablename' because it is being referenced by a FOREIGN KEY constraint.



برای حل این مشکل با استفاده از دستور alter table nocheck constraint all تمامی قیود مربوط به تمامی جداول
در پایگاه داده را غیر فعال کردم ولی باز هم در هنگام اجرای truncate خطای بالا را میدهد
به نظر شما چه بکنم؟


سوال دوم:

قبل از عملیات پشتیبانی میخواهم صحت دادهای بانک را توسط dbcc checkdb یا dbcc chechtable چک کنم
و اگر خطایی نداشت عمل پشتیبان گیری را انجام دهم . حال 2 سئوال دارم
1) کدامیک را انجام دهم بهتر است و مطمئن تر
2) هر موقع این دستورات را انجام میدهم نتیجه زیر را بر میگرداند





CHECKDB found 0 allocation errors and 0 consistency errors in ...
DBCC execution completed. If DBCC printed error messages, contact your system administrator



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



DBCC CHECKDB with NO_INFOMSGS



حال میخواهم بدانم اگر در دیتابیس error وجود داشته باشد در شکل دوم اجرای دستور چه چیزی برگردانده میشود
تا من بتوانم از ان استفاده کنم و مشکل را حل کنم؟

سوال سوم :
برای فشرده سازی اطلاعات پس از ایجاد فایل پشتیبانی چه راهی را پیشنهاد میکنید؟
راهی که در آن بازیابی اطلاعات هم در نظر گرفته شده باشد


ممنون

AminSobati
چهارشنبه 09 فروردین 1385, 15:27 عصر
سلام

1) جدولی که به عنوان Parent برای جدول دیگه ای معرفی شده (Foreign Key Constraint) نمیتونین براش Truncate Table استفاده کنید. در عوض از Delete استفاده کنین. برای Reseed کردن مقدار Identity این دستور وجود داره: DBCC CHECKIDENT
در ضمن اگر شما اطلاعات رو آرشیو میکنید و مجددا اطلاعات جداول شما (مثلا در سال آینده) به همون آرشیو منتقل میشن، بهتره Identity رو تغییر ندین تا مقادیر تکراری در آرشیو بدست نیاد

2) dbcc checkdb کفایت میکنه. NO_INFOMSGS خطاها رو نمایش خواهد داد. چیزی که حذف میکنه، Informationها است

3) اگر فرمت فایل Backup رو تغییر بدین و مثلا Zip کنین، باید حتما Unzip کنین برای Restore کردن.

aliasghar
چهارشنبه 09 فروردین 1385, 17:28 عصر
امین جان ممنون
اما در مورد یک ) چون حجم داده های فعلی بالاست سرعت delete کم هست حتی با اینکه trigger ها غیر فعال شدند

سئوال2) اگر خطا برگردانده بشه چه پیامی داده میشه یا بطور کلی چطوری باید در صورت برگردونده شدن خطا اون را تشخیص داده و هندل کنیم

3) ایا نمونه برنامه ای (مثال) که این کار را انجام بده سراغ دارید (یا این کار را باید به وسیله master..xp_cmdshell انجام بدم یا روش دیگری هم هست؟)

در ضمن یک سئوال دیگر هم دارم
داشتم به database های pubs و northwind خود sql نگاه میگردم دیدم که در بعضی از جداول روی یک فیلد یک ایندکس 2 بار تکرار شده با نام متفاوت ولی بدون هیچ تغییری

مثلاً در northwind و در جدول orders دو اینکس EmployeesOrders و EmployeeID هر دو بر روی فیلد EmployeeID هستند با تمامی مشخصات یکسان
دلیل این کار چیه؟

AminSobati
چهارشنبه 09 فروردین 1385, 19:36 عصر
پس چاره ای نیست جز اینکه FKها رو Script کنین، حذف کنین، Truncate انجام بشه و مجددا به کمک Script همه FKها رو بسازید.
2) شما DBCC رو اجرا کنید، همینقدر که با خطا متوقف نشه، پس میتونین Backup رو با خیال راحت بگیرید
3) مثالی ندارم، باید Script بنویسید. اگر الزامی نیست که حتما خود SQL Server این کار رو انجام بده؛ میتونین یک فایل EXE بنویسید که شاید اگر از امکانات اون زبان برنامه نویسی استفاده کنین، کد نویسیش کمی راحت تر باشه
در مورد ایندکسها، با توجه به نامگذاری اونها به نظر میرسه کمی سنتی عمل شده. مثلا EmployeesOrders برای ارتباط بین دو جدول Employees و Orders که مورد استفاده Joinهای بین این دو قرار میگیره. از طرفی ایندکس EmployeeID روی فیلد EmployeeID وجود داره که برای هر Query که بخواد روی این فیلد Search کنه استفاده میشه. اما با توجه به اینکه اسم ایندکس برای Query Optimizer مهم نیست، وجود یکی از این دو ایندکس، هم برای Join میتونه استفاده بشه و هم برای سایر جستجو ها روی EmployeeID. لذا شما اصلا نیازی ندارید به ساختن دو ایندکس یکسان با دو نام مختلف. بهتره وجود چنین چیزی در Northwind رو نادیده بگیریم

aliasghar
پنج شنبه 10 فروردین 1385, 09:09 صبح
یه دنیا تشکر
و اما یه سئوال دیگه
آیا FK جزو Constraint ها حساب نمیشه ؟ چونکه با استفاده از
ALTER TABLE .. NOCHECK CONSTRAINT ALL من تموم اونها را غیر فعال کردم ولی باز هم نتیجه نداد؟
خیلی ممنمون

MARAL1366
پنج شنبه 10 فروردین 1385, 10:02 صبح
#4
MARAL1366
کاربر جدید



تاریخ عضویت: اسفند 1384
پست ها: 7


--------------------------------------------------------------------------------

سلام
من دارم یک سایت پیتزا با خرید وفروش
online
طراحی می کنم سایت کوچیکیه.ولی مشکله بزرگی که داره اینه که من تویه قسمت سفارش در انتخاب انواع پیتزا یک کومبوباکس گذاشتم و کاربر فقط می تواند یک نوع پیتزا با تعداد متفاوت سفارش دهد. و همینطور در قسمت مخلفات مثلا فقط میتواند سالاد سفارش دهد و نمیتواند همان وقت دسر را هم سفارش دهد
خواهشمندم مرا کمک کنید
مرسی.

AminSobati
پنج شنبه 10 فروردین 1385, 12:11 عصر
یه دنیا تشکر
و اما یه سئوال دیگه
آیا FK جزو Constraint ها حساب نمیشه ؟ چونکه با استفاده از
ALTER TABLE .. NOCHECK CONSTRAINT ALL من تموم اونها را غیر فعال کردم ولی باز هم نتیجه نداد؟
خیلی ممنمون
چرا Constraint هستش اما حق با شماست، باز هم Truncate جواب نمیده، برای همین Script کردن رو پیشنهاد دادم.

AminSobati
پنج شنبه 10 فروردین 1385, 12:16 عصر
#4
MARAL1366
کاربر جدید



تاریخ عضویت: اسفند 1384
پست ها: 7


--------------------------------------------------------------------------------

سلام
من دارم یک سایت پیتزا با خرید وفروش
online
طراحی می کنم سایت کوچیکیه.ولی مشکله بزرگی که داره اینه که من تویه قسمت سفارش در انتخاب انواع پیتزا یک کومبوباکس گذاشتم و کاربر فقط می تواند یک نوع پیتزا با تعداد متفاوت سفارش دهد. و همینطور در قسمت مخلفات مثلا فقط میتواند سالاد سفارش دهد و نمیتواند همان وقت دسر را هم سفارش دهد
خواهشمندم مرا کمک کنید
مرسی.
دوست عزیز سوالتون رو در یک تاپیک جدید بفرسین. ضمنا این سوال به SQL Server مربوط میشه؟!

aliasghar
جمعه 11 فروردین 1385, 07:46 صبح
سپاس گذارم