اجرا کردن اسکریپت های بزرگ در SSMS بدون خطا
قطعا همه ی ما در هنگام اجرای اسکریپت های بزرگ در SQL با خطای زیر مواجه شدیم :
“Cannot execute script. Insufficient memory to continue the execution of the program. (mscorlib)”
علت بروز این خطا استفاده از SSMS های ورژن پایین می باشد و تا ورژن 2014 نیز همچنان این مشکل پاربرجا بوده است ، راه حل این مشکل استفاده از SQLCMD می باشد .
در ادامه با ایجاد یک اسکریپت بزرگ در SQL برای اجرا در SSMS این مشکل را توضیح داده و راه حل آن را تست میکنیم :
--SQLDBA.IR
GO
CREATE DATABASE TESTMemory
GO
USE TESTMemory
GO
--SQLDBA.IR
CREATE TABLE TBLTestMemory
(
ID INT,
Value INT
)
بعد از ایجاد جدول اسکریپتی جهت Insert اطلاعات درون جدول ایجاد شده مینویسیم ، این اسکریپت شامل 750000 رکورد بوده که حجم تکست این اسکریپت 41MB می باشد (برای ایجاد این تست می توانید از اسکریپت زیر استفاده کنید )
USE TESTMemory
GO
--SQLDBA.IR
DECLARE @i int=1
WHILE @i<=750000
BEGIN
PRINT 'INSERT INTO TBLTestMemory (ID, Value) VALUES('+CAST(@i AS VARCHAR)+','+CAST(@i+@i AS VARCHAR)+')'
IF @i%1000=0
PRINT 'GO'
SET @i+=1
END
با توجه به حجم اسکریپت ایجاد شده SSMS با خطای ذکر شده مواجه می شود و قادر به مدیریت اجرای این اسکریپت نمی باشد .
SQLCMD و اجرای اسکریپت های بزرگ
با استفاده از خط فرمان می توانیم به اجرای اسکریپت های بزرگ بپردازیم , این ابزار بما توانایی اجرای پراسیجر ها ، اسکریپت ها و دستورات T-sql را می دهد . خط فرمان دستورات را از طریق ODBC اجرا می کند ولی SSMS از طریق Microsoft .NET Framework SqlClient به اجرای دستورات می پردازد .
نحوه اجرا
فرض میکنیم نام Instance ما PC\MSSQL2014 می باشد و نام و مسیر فایل اسکریپت ما E:\LargeScript.sql باشد ، از دستورات زیر در خط فرمان جهت اجرای اسکریپت خود استفاده می کنیم .
Sqlcmd –S PC\MSSQL2014 –d TestDB –i “E:\LargeScript.sql”
با فشردن کلید Enter اسکریپت مورد نظر ما شروع به اجرا می کند و پس از اجرا پیغام با موفقیت اجرا شد می دهد .
در حال حاضر مایکروسافت این موضوع را مرتفع کرده و با ورژن های جدید SSMS دیگر مشکل خطای بالا را نخواهید داشت و اگر به هر علتی قابلیت نصب ورژن جدید را نداشتید می توانید از روش ارائه شده استفاده کنید .
برای اجرای اسکریپتهای بزرگ در SQL Server Management Studio (SSMS) بدون خطا، میتوانید مراحل زیر را دنبال کنید:
1. بررسی منبع: اطمینان حاصل کنید که اسکریپت شما به درستی نوشته شده و مشکلی در آن وجود ندارد. بررسی کنید که اسکریپت دستورات SQL صحیحی را اجرا میکند و مشکلی در ترتیب اجرای دستورات وجود ندارد.
2. تقسیم اسکریپت: در صورتی که اسکریپت شما بسیار بزرگ است، میتوانید آن را به بخشهای کوچکتر تقسیم کنید. این کار باعث میشود که اجرای اسکریپت سریعتر انجام شود و احتمال وقوع خطا کاهش یابد. در نظر داشته باشید که باید ترتیب اجرای دستورات را در نظر بگیرید و ممکن است برای اجرای درست، بخشهای تقسیم شده را به ترتیب اجرا کنید.
3. استفاده از Batchها: برای اجرای اسکریپتهای بزرگ، میتوانید از Batchها استفاده کنید. Batchها به شما اجازه میدهند تا دستورات را در گروههای جداگانه اجرا کنید. برای اجرای هر Batch، میتوانید از دستور “GO” استفاده کنید. این دستور بین Batchها قرار داده میشود و به SSMS میگوید که باید بین هر Batch پیادهسازی را متوقف کند و Batch بعدی را شروع کند.
4. استفاده از Transactionها: در صورت نیاز به اطمینان از اجرای متمایز و کامل اسکریپت، میتوانید از Transactionها استفاده کنید. با ایجاد یک Transaction برای اجرای اسکریپت، میتوانید تمامی دستورات را در یک واحد انجام دهید. اگر هر یک ا
ز دستورات با خطا مواجه شوند، میتوانید تراکنش را بازنگری کنید و تغییرات را لغو کنید.
5. استفاده از نمایهها و ایندکسها: قبل از اجرای اسکریپت، میتوانید نمایهها و ایندکسهای مورد نیاز را بررسی و ساخته یا بهینهسازی کنید. این کار میتواند کارایی اسکریپت را افزایش داده و زمان اجرا را کاهش دهد.
6. استفاده از SSMS بهروز: اطمینان حاصل کنید که شما از نسخه بهروز SSMS استفاده میکنید. ورژنهای جدیدتر SSMS بهبودهایی در عملکرد و پشتیبانی از اجرای اسکریپتهای بزرگ دارند.
7. نظارت و رصد: هنگام اجرای اسکریپت، به صورت مستمر نتایج و خطاها را نظارت کنید. در صورت بروز خطا، پیام خطا را بررسی کنید و با تجزیه و تحلیل خطا، مشکل را شناسایی و برطرف کنید.
8. تست و آزمایش: قبل از اجرای نهایی اسکریپت، آن را در محیط تست یا آزمایشی اجرا کنید. این کار به شما کمک میکند تا خطاها و مشکلات محتمل را شناسایی و رفع کنید و از عملکرد صحیح اسکریپت اطمینان حاصل کنید.
با رعایت این مراحل و استفاده از تکنیکهای بهینهسازی، میتوانید اسکریپتهای بزرگ را در SSMS بدون خطا اجرا کنید. همچنین، بهتر است مراحل اجرای اسکریپت را با دقت و در محیطی که از نظر تست و محیطی بهینه است، انجام دهید.
دیدگاه ها 3