اجرای اسکریپت‌های بزرگ در SSMS-خطای حافظه در SSMS-SQLCMD-اجرای اسکریپت‌های بزرگ در SQL Server-SQLCMD-SSMS-کوئری حجیم

راهنمای جامع جلوگیری از خطای حافظه در SSMS

یکی از چالش‌های رایج مدیران پایگاه داده، اجرای اسکریپت‌های حجیم در محیط SQL Server Management Studio (SSMS) است. در مواردی که حجم اسکریپت‌ها بسیار بالا باشد، ممکن است با خطاهایی نظیر زیر مواجه شوید:

Cannot execute script. Insufficient memory to continue the execution of the program. (mscorlib)

در این مقاله، راهکارهایی کاربردی برای اجرای موفقیت‌آمیز اسکریپت‌های بزرگ بدون بروز خطای حافظه ارائه می‌شود.

علت اصلی خطا

نسخه‌های قدیمی SSMS (پیش از ۲۰۱۶) دارای محدودیت‌های حافظه‌ای هستند. این نسخه‌ها نمی‌توانند اسکریپت‌هایی با حجم بالا (مثلاً بیش از 40MB) را به درستی مدیریت کنند. برای حل این مشکل، بهترین راهکار استفاده از ابزار SQLCMD به‌جای SSMS است.

مراحل اجرای اسکریپت بزرگ با استفاده از SQLCMD

مرحله ۱: ایجاد پایگاه داده و جدول

CREATE DATABASE TESTMemory;
GO

USE TESTMemory;
GO

CREATE TABLE TBLTestMemory (
    ID INT,
    Value INT
);

مرحله ۲: تولید اسکریپت حجیم برای درج داده‌ها

اسکریپت زیر بیش از ۷۵۰,۰۰۰ رکورد تولید می‌کند:

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

این اسکریپت پس از اجرا، فایلی با حجم حدود ۴۱MB تولید خواهد کرد که برای SSMS بیش از حد سنگین است.

مرحله ۳: اجرای فایل با SQLCMD

برای اجرای این اسکریپت بزرگ، فایل آن را با پسوند .sql ذخیره کرده و دستور زیر را در Command Prompt اجرا کنید:

sqlcmd –S PC\MSSQL2014 –d TestDB –i "E:\LargeScript.sql"

نکات مهم برای اجرای اسکریپت‌های سنگین

بررسی منبع و صحت اسکریپت

اطمینان حاصل کنید که کدها درست نوشته شده‌اند و ترتیب دستورات منطقی است.

تقسیم‌بندی اسکریپت به بخش‌های کوچک‌تر

تقسیم اسکریپت‌ها با استفاده از دستور GO بین بخش‌ها، به SSMS اجازه می‌دهد پردازش را به‌صورت مرحله‌ای انجام دهد.

استفاده از Transaction برای اجرای ایمن

در صورت بروز خطا، می‌توانید تراکنش را Rollback کنید.

BEGIN TRANSACTION
-- دستورات اسکریپت
COMMIT
-- یا در صورت خطا: ROLLBACK

حذف یا غیرفعالسازی Indexها موقتاً

این کار باعث کاهش بار اضافی در حین درج اطلاعات می‌شود.

استفاده از نسخه‌های جدید SSMS

ورژن‌های جدیدتر (۲۰۱۶ به بعد) مدیریت حافظه بهتری دارند و معمولاً خطاهای مشابه را نمایش نمی‌دهند.

سوالات پرتکرار (FAQ)

آیا می‌توان از PowerShell به جای SQLCMD استفاده کرد؟

بله، PowerShell هم قابلیت اجرای فایل‌های SQL را دارد، ولی SQLCMD سبک‌تر و سریع‌تر عمل می‌کند.

آیا با افزایش RAM سیستم این خطا از بین می‌رود؟

خیر. این خطا مربوط به محدودیت‌های داخلی SSMS است، نه منابع فیزیکی سیستم.

آیا SQLCMD روی تمامی نسخه‌های SQL Server نصب است؟

SQLCMD به‌صورت پیش‌فرض با نصب SQL Server Tools نصب می‌شود، اما در برخی نسخه‌ها باید به‌صورت دستی نصب شود.

ارتباط و مشاوره تخصصی

در صورت نیاز به مشاوره در زمینه اجرای بهینه اسکریپت‌ها، بهینه‌سازی دیتابیس یا اجرای پروژه‌های دیتابیسی، با تیم لاندا تماس بگیرید:

تماس   با شرکت لاندا برای مشاوره، اجرا و آموزش تخصصی

نظری داده نشده

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *