Microsoft SQL Server
डेटाबेस के बारे में जानकारी प्राप्त करें
खोज…
टिप्पणियों
अन्य रिलेशनल डेटाबेस सिस्टम की तरह, SQL सर्वर आपके डेटाबेस के बारे में मेटाडेटा को उजागर करता है।
यह ISO मानक INFORMATION_SCHEMA
स्कीमा, या SQL सर्वर-विशिष्ट sys
कैटलॉग दृश्यों के माध्यम से प्रदान किया जाता है।
एक डेटाबेस में टेबल्स की संख्या की गणना करें
यह क्वेरी निर्दिष्ट डेटाबेस में तालिकाओं की संख्या लौटाएगी।
USE YourDatabaseName
SELECT COUNT(*) from INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
निम्नलिखित एक और तरीका है जो SQL Server 2008+ के साथ सभी उपयोगकर्ता तालिकाओं के लिए किया जा सकता है। संदर्भ यहाँ है ।
SELECT COUNT(*) FROM sys.tables
सभी संग्रहीत कार्यविधियों की सूची प्राप्त करें
निम्न क्वेरी डेटाबेस में सभी संग्रहीत कार्यविधियों की एक सूची लौटाएगी, जिसमें प्रत्येक संग्रहीत प्रक्रिया के बारे में बुनियादी जानकारी होगी:
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'
ROUTINE_NAME
, ROUTINE_SCHEMA
और ROUTINE_DEFINITION
कॉलम आम तौर पर सबसे उपयोगी हैं।
SELECT *
FROM sys.objects
WHERE type = 'P'
SELECT *
FROM sys.procedures
ध्यान दें कि इस संस्करण में sys.objects से चयन करने पर एक फायदा है क्योंकि इसमें अतिरिक्त कॉलम is_auto_executed
, is_execution_replicated
, is_repl_serializable
, और skips_repl_constraints
।
SELECT *
FROM sysobjects
WHERE type = 'P'
ध्यान दें कि आउटपुट में कई कॉलम हैं जो कभी भी संग्रहीत प्रक्रिया से संबंधित नहीं होंगे।
क्वेरी का अगला सेट डेटाबेस में सभी संग्रहीत कार्यविधियाँ लौटाएगा जिसमें स्ट्रिंग 'SearchTerm' शामिल है:
SELECT o.name
FROM syscomments c
INNER JOIN sysobjects o
ON c.id=o.id
WHERE o.xtype = 'P'
AND c.TEXT LIKE '%SearchTerm%'
SELECT p.name
FROM sys.sql_modules AS m
INNER JOIN sys.procedures AS p
ON m.object_id = p.object_id
WHERE definition LIKE '%SearchTerm%'
एक सर्वर पर सभी डेटाबेस की सूची प्राप्त करें
विधि 1: क्वेरी SQL Server 2000+ संस्करण के लिए लागू होगी (इसमें 12 कॉलम हैं)
SELECT * FROM dbo.sysdatabases
विधि 2: क्वेरी के बारे में अधिक जानकारी वाले डेटाबेस से बाहर निकालें (उदा: राज्य, अलगाव, पुनर्प्राप्ति मॉडल आदि)
नोट: यह एक कैटलॉग दृश्य है और यह SQL SERVER 2005+ संस्करण उपलब्ध होगा
SELECT * FROM sys.databases
विधि 3: केवल डेटाबेस नामों को देखने के लिए आप undocumented sp_MSForEachDB का उपयोग कर सकते हैं
EXEC sp_MSForEachDB 'SELECT ''?'' AS DatabaseName'
विधि 4: नीचे एसपी आपको डेटाबेस का नाम सर्वर पर डेटाबेस का नाम, स्वामी, स्थिति आदि के साथ प्रदान करने में मदद करेगा
EXEC sp_helpdb
विधि 5 इसी प्रकार, नीचे संग्रहीत प्रक्रिया डेटाबेस का नाम, डेटाबेस का आकार और रिमार्क्स देगी
EXEC sp_databases
डेटाबेस फ़ाइलें
आकार और वृद्धि की जानकारी के साथ सभी डेटाबेस के लिए सभी डेटा फ़ाइलों को प्रदर्शित करें
SELECT d.name AS 'Database',
d.database_id,
SF.fileid,
SF.name AS 'LogicalFileName',
CASE SF.status & 0x100000
WHEN 1048576 THEN 'Percentage'
WHEN 0 THEN 'MB'
END AS 'FileGrowthOption',
Growth AS GrowthUnit,
ROUND(((CAST(Size AS FLOAT)*8)/1024)/1024,2) [SizeGB], -- Convert 8k pages to GB
Maxsize,
filename AS PhysicalFileName
FROM Master.SYS.SYSALTFILES SF
Join Master.SYS.Databases d on sf.fileid = d.database_id
Order by d.name
डेटाबेस विकल्प पुनर्प्राप्त करें
निम्न क्वेरी डेटाबेस विकल्प और मेटाडेटा देता है:
select * from sys.databases WHERE name = 'MyDatabaseName';
वर्तमान डेटाबेस में सभी तालिकाओं का आकार दिखाएं
SELECT
s.name + '.' + t.NAME AS TableName,
SUM(a.used_pages)*8 AS 'TableSizeKB' --a page in SQL Server is 8kb
FROM sys.tables t
JOIN sys.schemas s on t.schema_id = s.schema_id
LEFT JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
LEFT JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY
s.name, t.name
ORDER BY
--Either sort by name:
s.name + '.' + t.NAME
--Or sort largest to smallest:
--SUM(a.used_pages) desc
एक Windows लॉगिन अनुमति पथ निर्धारित करें
यह उपयोगकर्ता प्रकार और अनुमति पथ दिखाएगा (उपयोगकर्ता कौन से विंडोज़ समूह से इसकी अनुमति प्राप्त कर रहा है)।
xp_logininfo 'DOMAIN\user'
ज्ञात स्तंभ से युक्त तालिकाओं को पुनः प्राप्त करें
यह क्वेरी सभी COLUMNS
और उनके संबंधित TABLES
को दिए गए कॉलम नाम के लिए वापस कर देगी। यह आपको यह दिखाने के लिए डिज़ाइन किया गया है कि किस तालिका (अज्ञात) में एक निर्दिष्ट कॉलम (ज्ञात) है
SELECT
c.name AS ColName,
t.name AS TableName
FROM
sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE
c.name LIKE '%MyName%'
देखें कि एंटरप्राइज़-विशिष्ट सुविधाओं का उपयोग किया जा रहा है या नहीं
यह सत्यापित करने के लिए कभी-कभी उपयोगी होता है कि डेवलपर संस्करण पर आपके कार्य ने एंटरप्राइज़ संस्करण तक सीमित किसी भी सुविधा पर निर्भरता का परिचय नहीं दिया है।
आप ऐसा कर सकते हैं sys.dm_db_persisted_sku_features
सिस्टम दृश्य का उपयोग करके, जैसे:
SELECT * FROM sys.dm_db_persisted_sku_features
डेटाबेस के खिलाफ ही।
यह उपयोग की जा रही सुविधाओं को सूचीबद्ध करेगा, यदि कोई हो।
सभी तालिकाएँ और कॉलम खोजें और लौटें जिसमें एक निर्दिष्ट कॉलम मूल्य हो
यह स्क्रिप्ट, यहां और यहां से , सभी टेबल्स और कॉलमों को वापस कर देगी जहां एक निर्दिष्ट मूल्य मौजूद है। यह पता लगाने में शक्तिशाली है कि एक डेटाबेस में एक निश्चित मूल्य कहां है। यह कर हो सकता है, इसलिए यह सुझाव दिया जाता है कि इसे पहले बैकअप / टेस्ट एनवायरमेंट में निष्पादित किया जाए।
DECLARE @SearchStr nvarchar(100)
SET @SearchStr = '## YOUR STRING HERE ##'
-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Updated and tested by Tim Gaunt
-- http://www.thesitedoctor.co.uk
-- http://blogs.thesitedoctor.co.uk/tim/2010/02/19/Search+Every+Table+And+Field+In+A+SQL+Server+Database+Updated.aspx
-- Tested on: SQL Server 7.0, SQL Server 2000, SQL Server 2005 and SQL Server 2010
-- Date modified: 03rd March 2011 19:00 GMT
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar', 'int', 'decimal')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END
SELECT ColumnName, ColumnValue FROM #Results
DROP TABLE #Results
- See more at: http://thesitedoctor.co.uk/blog/search-every-table-and-field-in-a-sql-server-database-updated#sthash.bBEqfJVZ.dpuf
सभी स्कीमा, टेबल, कॉलम और इंडेक्स प्राप्त करें
SELECT
s.name AS [schema],
t.object_id AS [table_object_id],
t.name AS [table_name],
c.column_id,
c.name AS [column_name],
i.name AS [index_name],
i.type_desc AS [index_type]
FROM sys.schemas AS s
INNER JOIN sys.tables AS t
ON s.schema_id = t.schema_id
INNER JOIN sys.columns AS c
ON t.object_id = c.object_id
LEFT JOIN sys.index_columns AS ic
ON c.object_id = ic.object_id and c.column_id = ic.column_id
LEFT JOIN sys.indexes AS i
ON ic.object_id = i.object_id and ic.index_id = i.index_id
ORDER BY [schema], [table_name], c.column_id;
शेड्यूल जानकारी के साथ SQL एजेंट नौकरियों की सूची लौटाएं
USE msdb
Go
SELECT dbo.sysjobs.Name AS 'Job Name',
'Job Enabled' = CASE dbo.sysjobs.Enabled
WHEN 1 THEN 'Yes'
WHEN 0 THEN 'No'
END,
'Frequency' = CASE dbo.sysschedules.freq_type
WHEN 1 THEN 'Once'
WHEN 4 THEN 'Daily'
WHEN 8 THEN 'Weekly'
WHEN 16 THEN 'Monthly'
WHEN 32 THEN 'Monthly relative'
WHEN 64 THEN 'When SQLServer Agent starts'
END,
'Start Date' = CASE active_start_date
WHEN 0 THEN null
ELSE
substring(convert(varchar(15),active_start_date),1,4) + '/' +
substring(convert(varchar(15),active_start_date),5,2) + '/' +
substring(convert(varchar(15),active_start_date),7,2)
END,
'Start Time' = CASE len(active_start_time)
WHEN 1 THEN cast('00:00:0' + right(active_start_time,2) as char(8))
WHEN 2 THEN cast('00:00:' + right(active_start_time,2) as char(8))
WHEN 3 THEN cast('00:0'
+ Left(right(active_start_time,3),1)
+':' + right(active_start_time,2) as char (8))
WHEN 4 THEN cast('00:'
+ Left(right(active_start_time,4),2)
+':' + right(active_start_time,2) as char (8))
WHEN 5 THEN cast('0'
+ Left(right(active_start_time,5),1)
+':' + Left(right(active_start_time,4),2)
+':' + right(active_start_time,2) as char (8))
WHEN 6 THEN cast(Left(right(active_start_time,6),2)
+':' + Left(right(active_start_time,4),2)
+':' + right(active_start_time,2) as char (8))
END,
CASE len(run_duration)
WHEN 1 THEN cast('00:00:0'
+ cast(run_duration as char) as char (8))
WHEN 2 THEN cast('00:00:'
+ cast(run_duration as char) as char (8))
WHEN 3 THEN cast('00:0'
+ Left(right(run_duration,3),1)
+':' + right(run_duration,2) as char (8))
WHEN 4 THEN cast('00:'
+ Left(right(run_duration,4),2)
+':' + right(run_duration,2) as char (8))
WHEN 5 THEN cast('0'
+ Left(right(run_duration,5),1)
+':' + Left(right(run_duration,4),2)
+':' + right(run_duration,2) as char (8))
WHEN 6 THEN cast(Left(right(run_duration,6),2)
+':' + Left(right(run_duration,4),2)
+':' + right(run_duration,2) as char (8))
END as 'Max Duration',
CASE(dbo.sysschedules.freq_subday_interval)
WHEN 0 THEN 'Once'
ELSE cast('Every '
+ right(dbo.sysschedules.freq_subday_interval,2)
+ ' '
+ CASE(dbo.sysschedules.freq_subday_type)
WHEN 1 THEN 'Once'
WHEN 4 THEN 'Minutes'
WHEN 8 THEN 'Hours'
END as char(16))
END as 'Subday Frequency'
FROM dbo.sysjobs
LEFT OUTER JOIN dbo.sysjobschedules
ON dbo.sysjobs.job_id = dbo.sysjobschedules.job_id
INNER JOIN dbo.sysschedules ON dbo.sysjobschedules.schedule_id = dbo.sysschedules.schedule_id
LEFT OUTER JOIN (SELECT job_id, max(run_duration) AS run_duration
FROM dbo.sysjobhistory
GROUP BY job_id) Q1
ON dbo.sysjobs.job_id = Q1.job_id
WHERE Next_run_time = 0
UNION
SELECT dbo.sysjobs.Name AS 'Job Name',
'Job Enabled' = CASE dbo.sysjobs.Enabled
WHEN 1 THEN 'Yes'
WHEN 0 THEN 'No'
END,
'Frequency' = CASE dbo.sysschedules.freq_type
WHEN 1 THEN 'Once'
WHEN 4 THEN 'Daily'
WHEN 8 THEN 'Weekly'
WHEN 16 THEN 'Monthly'
WHEN 32 THEN 'Monthly relative'
WHEN 64 THEN 'When SQLServer Agent starts'
END,
'Start Date' = CASE next_run_date
WHEN 0 THEN null
ELSE
substring(convert(varchar(15),next_run_date),1,4) + '/' +
substring(convert(varchar(15),next_run_date),5,2) + '/' +
substring(convert(varchar(15),next_run_date),7,2)
END,
'Start Time' = CASE len(next_run_time)
WHEN 1 THEN cast('00:00:0' + right(next_run_time,2) as char(8))
WHEN 2 THEN cast('00:00:' + right(next_run_time,2) as char(8))
WHEN 3 THEN cast('00:0'
+ Left(right(next_run_time,3),1)
+':' + right(next_run_time,2) as char (8))
WHEN 4 THEN cast('00:'
+ Left(right(next_run_time,4),2)
+':' + right(next_run_time,2) as char (8))
WHEN 5 THEN cast('0' + Left(right(next_run_time,5),1)
+':' + Left(right(next_run_time,4),2)
+':' + right(next_run_time,2) as char (8))
WHEN 6 THEN cast(Left(right(next_run_time,6),2)
+':' + Left(right(next_run_time,4),2)
+':' + right(next_run_time,2) as char (8))
END,
CASE len(run_duration)
WHEN 1 THEN cast('00:00:0'
+ cast(run_duration as char) as char (8))
WHEN 2 THEN cast('00:00:'
+ cast(run_duration as char) as char (8))
WHEN 3 THEN cast('00:0'
+ Left(right(run_duration,3),1)
+':' + right(run_duration,2) as char (8))
WHEN 4 THEN cast('00:'
+ Left(right(run_duration,4),2)
+':' + right(run_duration,2) as char (8))
WHEN 5 THEN cast('0'
+ Left(right(run_duration,5),1)
+':' + Left(right(run_duration,4),2)
+':' + right(run_duration,2) as char (8))
WHEN 6 THEN cast(Left(right(run_duration,6),2)
+':' + Left(right(run_duration,4),2)
+':' + right(run_duration,2) as char (8))
END as 'Max Duration',
CASE(dbo.sysschedules.freq_subday_interval)
WHEN 0 THEN 'Once'
ELSE cast('Every '
+ right(dbo.sysschedules.freq_subday_interval,2)
+ ' '
+ CASE(dbo.sysschedules.freq_subday_type)
WHEN 1 THEN 'Once'
WHEN 4 THEN 'Minutes'
WHEN 8 THEN 'Hours'
END as char(16))
END as 'Subday Frequency'
FROM dbo.sysjobs
LEFT OUTER JOIN dbo.sysjobschedules ON dbo.sysjobs.job_id = dbo.sysjobschedules.job_id
INNER JOIN dbo.sysschedules ON dbo.sysjobschedules.schedule_id = dbo.sysschedules.schedule_id
LEFT OUTER JOIN (SELECT job_id, max(run_duration) AS run_duration
FROM dbo.sysjobhistory
GROUP BY job_id) Q1
ON dbo.sysjobs.job_id = Q1.job_id
WHERE Next_run_time <> 0
ORDER BY [Start Date],[Start Time]
बैकअप पर जानकारी प्राप्त करें और संचालन को पुनर्स्थापित करें
वर्तमान डेटाबेस उदाहरण पर किए गए सभी बैकअप कार्यों की सूची प्राप्त करने के लिए:
SELECT sdb.Name AS DatabaseName,
COALESCE(CONVERT(VARCHAR(50), bus.backup_finish_date, 120),'-') AS LastBackUpDateTime
FROM sys.sysdatabases sdb
LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name
ORDER BY sdb.name, bus.backup_finish_date DESC
वर्तमान डेटाबेस उदाहरण पर किए गए सभी पुनर्स्थापना कार्यों की सूची प्राप्त करने के लिए:
SELECT
[d].[name] AS database_name,
[r].restore_date AS last_restore_date,
[r].[user_name],
[bs].[backup_finish_date] AS backup_creation_date,
[bmf].[physical_device_name] AS [backup_file_used_for_restore]
FROM master.sys.databases [d]
LEFT OUTER JOIN msdb.dbo.[restorehistory] r ON r.[destination_database_name] = d.Name
INNER JOIN msdb.dbo.backupset [bs] ON [r].[backup_set_id] = [bs].[backup_set_id]
INNER JOIN msdb.dbo.backupmediafamily bmf ON [bs].[media_set_id] = [bmf].[media_set_id]
ORDER BY [d].[name], [r].restore_date DESC
डेटाबेस में एक क्षेत्र के हर उल्लेख का पता लगाएं
SELECT DISTINCT
o.name AS Object_Name,o.type_desc
FROM sys.sql_modules m
INNER JOIN sys.objects o ON m.object_id=o.object_id
WHERE m.definition Like '%myField%'
ORDER BY 2,1
SProcs, दृश्य, आदि में myField
उल्लेख पाएंगे