اسکریپت لیست دیتابیسهای موجود در یک Instance
اسکریپت لیست دیتابیسهای موجود در یک Instance: نام و وضعیت دیتابیسهای SQL Server را با دستور sys.databases مشاهده کنید.
15 آبان 1405
لینک کوتاه
اسکریپت لیست دیتابیسهای موجود در یک Instance در SQL Server
در محیط پایگاه دادهٔ Microsoft SQL Server، هر Instance میتواند شامل چندین دیتابیس باشد.این دیتابیسها ممکن است برای برنامههای سازمانی، وبسایتها، سیستمهای مالی، گزارشگیری یا ذخیرهسازی اطلاعات استفاده شوند.
در بسیاری از مواقع، مدیر پایگاه داده (DBA) نیاز دارد فهرست دیتابیسهای موجود در یک Instance را مشاهده کند تا وضعیت آنها را بررسی کرده یا عملیات مدیریتی لازم را انجام دهد.
یکی از روشهای ساده و استاندارد برای انجام این کار، استفاده از یک کوئری T-SQL و نمای سیستمی sys.databases است.
این نمای سیستمی اطلاعات مربوط به دیتابیسهای قابل مشاهده در Instance را در اختیار کاربر قرار میدهد.
طبق مستندات رسمی Microsoft، بهطور معمول برای هر دیتابیس یک ردیف در این نما وجود دارد؛ البته سطح دسترسی کاربر میتواند بر دیتابیسهایی که مشاهده میکند تأثیر بگذارد.
🌟 آیا میخواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟با دوره آموزشی SQL Server ما، شما میتوانید به راحتی و با روشی عملی، تمام مهارتهای لازم را یاد بگیرید!این دوره به شما آموزش میدهد که چگونه دادهها را به بهترین شکل مدیریت کنید، گزارشهای قدرتمند بسازید و به تحلیلهای عمیق دست یابید.با محتوای جذاب و پروژههای واقعی، شما نه تنها تئوری را یاد میگیرید، بلکه تواناییهای عملی خود را نیز تقویت میکنید.پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشنتر بردارید!
اسکریپت اصلی برای نمایش لیست دیتابیسها
برای مشاهدهٔ نام دیتابیسهای موجود در یک Instance، میتوان از اسکریپت زیر استفاده کرد:USE master;
GO
SELECT
name AS DatabaseName,
database_id AS DatabaseID,
create_date AS CreateDate,
state_desc AS DatabaseStatus
FROM sys.databases
ORDER BY name;
GO
این اسکریپت را میتوان در نرمافزار SQL Server Management Studio (SSMS) اجرا کرد.
ابتدا به Instance موردنظر متصل شوید، یک پنجرهٔ جدید Query باز کنید و کد بالا را اجرا کنید.
با اجرای این کد، فهرستی از دیتابیسهایی که حساب کاربری اجازهٔ مشاهدهٔ آنها را دارد نمایش داده میشود.
نتیجه شامل نام دیتابیس، شناسهٔ آن، تاریخ ایجاد و وضعیت فعلی دیتابیس است.
بررسی بخشهای مختلف اسکریپت
عبارت USE master مشخص میکند که اجرای کوئری در دیتابیس سیستمی master انجام شود.دیتابیس master اطلاعات سطح Instance را نگهداری میکند و برای این نوع بررسیها انتخاب مناسبی است.
دستور GO جداکنندهٔ Batch در ابزارهایی مانند SSMS است.
این عبارت دستور T-SQL مستقیمی برای موتور دیتابیس نیست، بلکه ابزار اجراکننده از آن برای جدا کردن بخشهای کد استفاده میکند.
عبارت SELECT مشخص میکند چه ستونهایی در خروجی نمایش داده شوند. در این مثال چهار ستون انتخاب شدهاند:
- name: نام دیتابیس را نمایش میدهد.
- database_id: شناسهٔ داخلی دیتابیس در Instance را نشان میدهد.
- create_date: تاریخ ایجاد دیتابیس را نمایش میدهد. در برخی شرایط، مانند تغییر نام دیتابیس، این مقدار نیز ممکن است تغییر کند.
- state_desc: وضعیت دیتابیس، مانند ONLINE یا OFFLINE را نشان میدهد.
این نمای سیستمی اطلاعات مربوط به دیتابیسها را ارائه میدهد.
در پایان، دستور ORDER BY name خروجی را بر اساس نام دیتابیس مرتب میکند.
این کار باعث میشود بررسی فهرست دیتابیسها در Instanceهای دارای تعداد زیادی دیتابیس سادهتر شود.
اسکریپت پیشرفتهتر برای بررسی وضعیت دیتابیسها
در بسیاری از پروژهها، فقط مشاهدهٔ نام دیتابیس کافی نیست.مدیر دیتابیس ممکن است بخواهد وضعیت دسترسی، مدل بازیابی یا فقطخواندنی بودن دیتابیس را هم بررسی کند.
در این شرایط، میتوان از اسکریپت زیر استفاده کرد:
USE master;
GO
SELECT
database_id AS DatabaseID,
name AS DatabaseName,
state_desc AS DatabaseStatus,
recovery_model_desc AS RecoveryModel,
user_access_desc AS UserAccess,
is_read_only AS IsReadOnly,
create_date AS CreateDate,
collation_name AS CollationName
FROM sys.databases
ORDER BY database_id;
GO
در این نسخه چند ستون مهم دیگر نیز اضافه شده است.
ستون recovery_model_desc مدل بازیابی دیتابیس را نشان میدهد.
مقادیر متداول آن عبارتاند از SIMPLE، FULL و BULK_LOGGED.
مدل بازیابی در طراحی راهبرد پشتیبانگیری و مدیریت Transaction Log اهمیت دارد.
ستون user_access_desc سطح دسترسی تعریفشده برای دیتابیس را نمایش میدهد.
مقادیر متداول شامل MULTI_USER، SINGLE_USER و RESTRICTED_USER هستند.
ستون is_read_only مشخص میکند دیتابیس فقطخواندنی است یا خیر.
مقدار 1 به معنی فعال بودن حالت فقطخواندنی و مقدار 0 به معنی غیرفعال بودن آن است.
ستون collation_name اطلاعات مربوط به تنظیمات Collation دیتابیس را ارائه میدهد.
Collation بر نحوهٔ مقایسه و مرتبسازی رشتهها تأثیر دارد.
این اطلاعات برای بررسی اولیهٔ وضعیت دیتابیسها مفید هستند، اما بهتنهایی سلامت کامل دیتابیس یا موفقیت عملیات پشتیبانگیری را تضمین نمیکنند.
نمایش دیتابیسهای کاربری بدون دیتابیسهای سیستمی
SQL Server چند دیتابیس سیستمی مانند master، model، msdb و tempdb دارد.اگر هدف فقط مشاهدهٔ دیتابیسهای ساختهشده برای برنامهها و کاربران باشد، میتوان دیتابیسهای سیستمی اصلی را از خروجی حذف کرد.
USE master;
GO
SELECT
database_id AS DatabaseID,
name AS DatabaseName,
state_desc AS DatabaseStatus,
create_date AS CreateDate
FROM sys.databases
WHERE name NOT IN (
'master',
'model',
'msdb',
'tempdb'
)
ORDER BY name;
GO
شرط WHERE در این اسکریپت چهار دیتابیس سیستمی اصلی را کنار میگذارد.
در نتیجه، نام سایر دیتابیسهای قابل مشاهده نمایش داده میشود.
توجه داشته باشید که این فیلتر صرفاً نام چهار دیتابیس مشخص را حذف میکند؛ بنابراین هر دیتابیس دیگری که ماهیت سیستمی یا کاربرد مدیریتی داشته باشد، لزوماً حذف نخواهد شد.
اگر در محیط سازمانی از دیتابیسهای خاص مدیریتی استفاده میکنید، بهتر است فیلتر را متناسب با ساختار همان محیط تنظیم کنید.
شمارش تعداد دیتابیسهای موجود
گاهی بهجای مشاهدهٔ فهرست کامل، فقط تعداد دیتابیسهای موجود اهمیت دارد.در این حالت، میتوان از تابع COUNT استفاده کرد:
USE master;
GO
SELECT
COUNT(*) AS TotalDatabases
FROM sys.databases;
GO
این کوئری تعداد ردیفهای قابل مشاهده در sys.databases را محاسبه میکند.
اگر بخواهید تعداد دیتابیسهای غیرسیستمی را بشمارید، میتوانید شرط حذف دیتابیسهای سیستمی را به آن اضافه کنید:
SELECT
COUNT(*) AS UserDatabaseCount
FROM sys.databases
WHERE name NOT IN (
'master',
'model',
'msdb',
'tempdb'
);
GO
در نظر داشته باشید که نتایج این شمارش به سطح دسترسی حساب اجراکننده و نوع محیط SQL Server وابسته هستند.
نکات مربوط به سطح دسترسی و عیبیابی
یکی از نکات مهم در استفاده از sys.databases این است که ممکن است تمام دیتابیسهای Instance برای حساب کاربری قابل مشاهده نباشند.در SQL Server، مشاهدهٔ اطلاعات دیتابیسها تابع قواعد دسترسی و مشاهدهٔ Metadata است.
برای مشاهدهٔ دیتابیسهای دیگر، بسته به نوع دیتابیس و شرایط، مجوزهایی مانند VIEW ANY DATABASE یا ALTER ANY DATABASE میتوانند مؤثر باشند.
دیتابیسهای دارای وضعیت OFFLINE ممکن است برای حسابهای کمدسترسی قابل مشاهده نباشند.
بنابراین اگر تعداد دیتابیسهای نمایشدادهشده کمتر از مقدار مورد انتظار است، ابتدا اتصال به Instance صحیح و سپس مجوزهای حساب کاربری را بررسی کنید.
همچنین، در صورت نمایش وضعیتهایی مانند OFFLINE یا RESTORING، باید وضعیت دیتابیس را جداگانه بررسی کرد.
بهتر است از اجرای دستورهای تغییر وضعیت یا حذف دیتابیس، بدون شناخت وابستگیهای برنامهها و سیاستهای سازمان، خودداری شود.
جمعبندی
اسکریپت استفادهکننده از sys.databases یک روش ساده و کاربردی برای تهیهٔ فهرست دیتابیسهای قابل مشاهده در SQL Server است.نسخهٔ اولیه برای مشاهدهٔ نام و وضعیت دیتابیسها مناسب است؛ نسخهٔ پیشرفتهتر اطلاعات مدیریتی بیشتری ارائه میکند؛ و نسخههای فیلترشده یا مبتنی بر COUNT برای گزارشگیری سریع کاربرد دارند.
برای بررسی روزمرهٔ یک Instance، پیشنهاد میشود ابتدا نسخهٔ اصلی را اجرا کنید و در صورت نیاز به اطلاعات تکمیلی، ستونهایی مانند recovery_model_desc و is_read_only را اضافه کنید.
با این رویکرد میتوان بدون اجرای عملیات تغییردهنده، دید مناسبی از دیتابیسهای قابل مشاهده در محیط به دست آورد.




کاربران ما
شما هم نظرتون با ما دریاره “اسکریپت لیست دیتابیسهای موجود در یک Instance” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید