ãã®èšäºã§ã¯ãã·ã¹ãã é¢æ°ãã¹ãã¢ãããã·ãŒãžã£ãããŒãã«ãdmvã䜿çšããŠã¡ã¿ããŒã¿æ å ±ãæãäžããåºæ¬çãªã¹ã¯ãªããã»ãããå ±æããŸãã äžç·ã«ãç®çã®ã€ã³ã¹ã¿ã³ã¹äžã®ããŒã¿ããŒã¹ã®ãã¹ãŠã®ç§å¯-ãµã€ãºããã¡ã€ã«ã®å ŽæãåãããŒã¿åãããã©ã«ãå€ãããŒãã€ã³ããã¯ã¹ãªã©ã®èšèšãæããã«ããŸãã
GUIã䜿çšããŠãã®æ å ±ã®äžéšãååŸããããšããããšãããå Žåããããã®ã¹ã¯ãªããã®å©ããåããŠå³åº§ã«ååŸãããæ å ±éã«é©ãããšã§ãããã
ä»ã®ã¹ã¯ãªãããšåæ§ã«ãéçšç°å¢ã§å®è¡ããåã«ããŸããã¹ãç°å¢ã§ãã¹ãããŸãã AdventureWorksã pubsãªã©ã®MSãã¹ãããŒã¹ã§å®è¡ããããšããå§ãããŸãã
ããŠãååãªèšèã§ãã¹ã¯ãªããã玹ä»ããŸãããïŒ
ãµãŒããŒã調æ»ããŸã
ãµãŒããŒã«é¢ããæ å ±ãæäŸããã¯ãšãªããå§ããŸããããåºæ¬æ å ±
ãŸããåºæ¬çãªæ å ±ãæäŸããããã€ãã®ç°¡åãª@@é¢æ° ã
-- Select @@SERVERNAME as [Server\Instance]; -- SQL Server Select @@VERSION as SQLServerVersion; -- SQL Server Select @@ServiceName AS ServiceInstance; -- (, ) Select DB_NAME() AS CurrentDB_Name;
æåŸã®åèµ·åããSQL Serverãå®è¡ãããŠããæéã¯ã©ããããã§ããïŒ tempdbã·ã¹ãã ããŒã¿ããŒã¹ã¯ãSQL Serverãåèµ·åãããã³ã«åäœæãããããšã«æ³šæããŠãã ããã ãµãŒããŒãæåŸã«åèµ·åããããšããå€æãã1ã€ã®æ¹æ³ã次ã«ç€ºããŸãã
SELECT @@Servername AS ServerName , create_date AS ServerStarted , DATEDIFF(s, create_date, GETDATE()) / 86400.0 AS DaysRunning , DATEDIFF(s, create_date, GETDATE()) AS SecondsRunnig FROM sys.databases WHERE name = 'tempdb'; GO
ãªã³ã¯ããããµãŒããŒ
ãªã³ã¯ãµãŒããŒã¯ãSQL Serverãä»ã®ããŒã¿ãµãŒããŒã«ã¢ã¯ã»ã¹ã§ããããã«ããæ¥ç¶ã§ãã åæ£ãªã¯ãšã¹ãã¯ãç°ãªããªã³ã¯ãµãŒããŒã§å®è¡ã§ããŸãã ããŒã¿ããŒã¹ãµãŒããŒãä»ã®ãµãŒããŒããåé¢ãããŠãããã©ããããŸãã¯ä»ã®ãµãŒããŒã«æ¥ç¶ãããŠãããã©ãããç¥ãããšã¯åœ¹ç«ã¡ãŸãã
EXEC sp_helpserver; --OR EXEC sp_linkedservers; --OR SELECT @@SERVERNAME AS Server , Server_Id AS LinkedServerID , name AS LinkedServer , Product , Provider , Data_Source , Modify_Date FROM sys.servers ORDER BY name; GO
ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãªã¹ã
ãŸãããµãŒããŒäžã®ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãªã¹ããååŸããŸãã ã©ã®ãµãŒããŒã«ãã4ã€ãŸãã¯5ã€ã®ã·ã¹ãã ããŒã¿ããŒã¹ïŒã¬ããªã±ãŒã·ã§ã³ã䜿çšããå Žåã¯ãmasterãmodelãmsdbãtempdbãããã³distributionïŒãããããšã«æ³šæããŠãã ããã 次ã®ã¯ãšãªã§ãããã®ããŒã¿ããŒã¹ãé€å€ããããšããå§ãããŸãã SSMSã§ããŒã¿ããŒã¹ã®ãªã¹ãã衚瀺ããã®ã¯éåžžã«ç°¡åã§ããããããã®ã¯ãšãªã¯ããè€éãªã¯ãšãªã®ããã«ãã£ã³ã°ãããã¯ãã«ãªããŸãã
T-SQLã®ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãªã¹ããååŸããæ¹æ³ã¯ããã€ããããŸããã以äžã«ãããã®ããã€ãã瀺ããŸãã åã¡ãœããã¯åæ§ã®çµæãè¿ããŸãããããã€ãã®éãããããŸãã
EXEC sp_helpdb; --OR EXEC sp_Databases; --OR SELECT @@SERVERNAME AS Server , name AS DBName , recovery_model_Desc AS RecoveryModel , Compatibility_level AS CompatiblityLevel , create_date , state_desc FROM sys.databases ORDER BY Name; --OR SELECT @@SERVERNAME AS Server , d.name AS DBName , create_date , compatibility_level , m.physical_name AS FileName FROM sys.databases d JOIN sys.master_files m ON d.database_id = m.database_id WHERE m.[type] = 0 -- data files only ORDER BY d.name; GO
æåŸã®ããã¯ã¢ããïŒ
ãããŠïŒ å ã«é²ãåã«ããã¹ãŠã®é©åãªdbaã¯ãæ°ããããã¯ã¢ããããããã©ããã確èªããå¿ èŠããããŸãã
SELECT @@Servername AS ServerName , d.Name AS DBName , MAX(b.backup_finish_date) AS LastBackupCompleted FROM sys.databases d LEFT OUTER JOIN msdb..backupset b ON b.database_name = d.name AND b.[type] = 'D' GROUP BY d.Name ORDER BY d.Name;
æåŸã®ããã¯ã¢ããã®ãããã¡ã€ã«ãžã®ãã¹ãããã«èŠã€ããæ¹ãè¯ãã§ãããã
SELECT @@Servername AS ServerName , d.Name AS DBName , b.Backup_finish_date , bmf.Physical_Device_name FROM sys.databases d INNER JOIN msdb..backupset b ON b.database_name = d.name AND b.[type] = 'D' INNER JOIN msdb.dbo.backupmediafamily bmf ON b.media_set_id = bmf.media_set_id ORDER BY d.NAME , b.Backup_finish_date DESC; GO
ã¢ã¯ãã£ããªãŠãŒã¶ãŒæ¥ç¶
ç¹ã«ããã©ãŒãã³ã¹ã®åé¡ã«å¯ŸåŠããå Žåã¯ãçŸåšã©ã®ããŒã¿ããŒã¹ã䜿çšãããŠããããç解ããŠãããšããã§ãããã
翻蚳è ã®ã¡ã¢ ïŒããã¯SQL Server 2012以éã§ã®ã¿æ©èœããŸãã以åã®ãšãã£ã·ã§ã³ã§ã¯ãdmv sys.dm_exec_sessionsã«ã¯database_idåããããŸããã§ããã ãŠãŒã¶ãŒãçŸåšäœæ¥ããŠããããŒã¿ããŒã¹ã調ã¹ãã«ã¯ãsp_whoã䜿çšã§ããŸãã
-- , sp_who SELECT @@Servername AS Server , DB_NAME(database_id) AS DatabaseName , COUNT(database_id) AS Connections , Login_name AS LoginName , MIN(Login_Time) AS Login_Time , MIN(COALESCE(last_request_end_time, last_request_start_time)) AS Last_Batch FROM sys.dm_exec_sessions WHERE database_id > 0 AND DB_NAME(database_id) NOT IN ( 'master', 'msdb' ) GROUP BY database_id , login_name ORDER BY DatabaseName;
ããŒã¿ããŒã¹ãç 究ããŠããŸã
ããã«è©³ããèŠãŠããã£ã¬ã¯ããªãšdmvã®ããŸããŸãªè¡šçŸã䜿çšããŠããã¹ãŠã®ããŒã¿ããŒã¹å ã®ãªããžã§ã¯ãã«é¢ããæ å ±ãåéããæ¹æ³ãèŠãŠã¿ãŸãããã ãã®ã»ã¯ã·ã§ã³ã§æ瀺ãããã¯ãšãªã®ã»ãšãã©ã¯1ã€ã®ããŒã¿ããŒã¹ã®ãå éšãã«ãããããSSMSã§ç®çã®ããŒã¿ããŒã¹ãéžæããããuse databaseã³ãã³ãã䜿çšããããšãå¿ããªãã§ãã ããã ãŸããselect db_nameïŒïŒã䜿çšããŠãã¯ãšãªãå®è¡ãããããŒã¿ããŒã¹ã®ã³ã³ããã¹ããåžžã«èŠãããšãã§ããããšãèŠããŠãããŠãã ãããsys.objectsã·ã¹ãã ããŒãã«ã¯ãããŒã¿ã¢ãã«ãæ§æãããªããžã§ã¯ãã«é¢ããæ å ±ãåéããããã®ããŒã®1ã€ã§ãã
-- U - -- type WHERE USE MyDatabase; GO SELECT * FROM sys.objects WHERE type = 'U';
以äžã¯ãæ å ±ãååŸã§ãããªããžã§ã¯ãã®çš®é¡ã®ãªã¹ãã§ãïŒ MSDNã® sys.objectsã®ããã¥ã¡ã³ããåç §ïŒ
sys.objects.type
AF =çµ±èšé¢æ°ïŒCLRç°å¢ïŒ;
C =ãã§ãã¯å¶éã
D = DEFAULTïŒå¶éãŸãã¯åé¢ïŒ;
F =å€éšããŒå¶çŽã
PK = PRIMARY KEYå¶çŽã
P = SQLã¹ãã¢ãããã·ãŒãžã£ã
PC =ã¹ãã¢ããã«ãããã·ãŒãžã£ïŒCLRïŒ;
FN =ã¹ã«ã©ãŒSQLé¢æ°ã
FS =ã¹ã«ã©ãŒãã«ãé¢æ°ïŒCLRç°å¢ïŒ;
FT =ããŒãã«ãªã¿ãŒã³ãã«ãé¢æ°ïŒCLRïŒ;
R =ã«ãŒã«ïŒå€ãã¹ã¿ã€ã«ãåé¢ïŒ;
RF =è€è£œãã£ã«ã¿ãŒæé ã
S =ã·ã¹ãã ããŒã¹ããŒãã«ã
SN =å矩èª;
SQ =ãµãŒãã¹ãã¥ãŒã
TA = DMLã¢ã»ã³ããªããªã¬ãŒïŒCLRç°å¢ïŒ;
TR = DML SQLããªã¬ãŒã
IF =çµã¿èŸŒã¿ã®ããŒãã«å€SQLé¢æ°ã
TF =ããŒãã«å€ã®SQLé¢æ°ã
U =ããŒãã«ïŒãŠãŒã¶ãŒå®çŸ©ïŒ;
UQ = UNIQUEå¶çŽã
V =ãã¥ãŒ;
X =æ¡åŒµã¹ãã¢ãããã·ãŒãžã£ã
IT =å éšããŒãã«ã
C =ãã§ãã¯å¶éã
D = DEFAULTïŒå¶éãŸãã¯åé¢ïŒ;
F =å€éšããŒå¶çŽã
PK = PRIMARY KEYå¶çŽã
P = SQLã¹ãã¢ãããã·ãŒãžã£ã
PC =ã¹ãã¢ããã«ãããã·ãŒãžã£ïŒCLRïŒ;
FN =ã¹ã«ã©ãŒSQLé¢æ°ã
FS =ã¹ã«ã©ãŒãã«ãé¢æ°ïŒCLRç°å¢ïŒ;
FT =ããŒãã«ãªã¿ãŒã³ãã«ãé¢æ°ïŒCLRïŒ;
R =ã«ãŒã«ïŒå€ãã¹ã¿ã€ã«ãåé¢ïŒ;
RF =è€è£œãã£ã«ã¿ãŒæé ã
S =ã·ã¹ãã ããŒã¹ããŒãã«ã
SN =å矩èª;
SQ =ãµãŒãã¹ãã¥ãŒã
TA = DMLã¢ã»ã³ããªããªã¬ãŒïŒCLRç°å¢ïŒ;
TR = DML SQLããªã¬ãŒã
IF =çµã¿èŸŒã¿ã®ããŒãã«å€SQLé¢æ°ã
TF =ããŒãã«å€ã®SQLé¢æ°ã
U =ããŒãã«ïŒãŠãŒã¶ãŒå®çŸ©ïŒ;
UQ = UNIQUEå¶çŽã
V =ãã¥ãŒ;
X =æ¡åŒµã¹ãã¢ãããã·ãŒãžã£ã
IT =å éšããŒãã«ã
sys.tablesãsys.viewsãªã©ã®ä»ã®ãã£ã¬ã¯ããªãã¥ãŒã¯ãsys.objectsã«ã¢ã¯ã»ã¹ããç¹å®ã®çš®é¡ã®ãªããžã§ã¯ãã«é¢ããæ å ±ãæäŸããŸãã ãããã®ãã¥ãŒãšOBJECTPROPERTYé¢æ°ã䜿çšãããšãããŒã¿ããŒã¹ã¹ããŒããæ§æããåãªããžã§ã¯ãã«é¢ããèšå€§ãªæ å ±ãååŸã§ããŸãã
ããŒã¿ããŒã¹ãã¡ã€ã«ã®å Žæ
ã¡ã€ã³ããŒã¿ãã¡ã€ã«ïŒmdfïŒããã©ã³ã¶ã¯ã·ã§ã³ãã°ãã¡ã€ã«ïŒldfïŒãªã©ãéžæããããŒã¿ããŒã¹ã®ç©ççãªå Žæã¯ããããã®ã¯ãšãªã䜿çšããŠååŸã§ããŸãã
EXEC sp_Helpfile; --OR SELECT @@Servername AS Server , DB_NAME() AS DB_Name , File_id , Type_desc , Name , LEFT(Physical_Name, 1) AS Drive , Physical_Name , RIGHT(physical_name, 3) AS Ext , Size , Growth FROM sys.database_files ORDER BY File_id; GO
ããŒãã«
ãã¡ãããSSMSã®ãªããžã§ã¯ããšã¯ã¹ãããŒã©ãŒã«ã¯ãéžæããããŒã¿ããŒã¹å ã®ããŒãã«ã®å®å šãªãªã¹ãã衚瀺ãããŸãããGUIã䜿çšããæ å ±ã®äžéšã¯ãã¹ã¯ãªããã䜿çšãããããå ¥æãå°é£ã§ãã ANSIæšæºã§ã¯INFORMATION_SCHEMAãã¥ãŒãå¿ èŠã§ãããæšæºã®äžéšã§ã¯ãªããªããžã§ã¯ãïŒããªã¬ãŒãæ¡åŒµããã·ãŒãžã£ãªã©ïŒã«é¢ããæ å ±ã¯æäŸãããªããããSQL Serverã«ã¿ãã°ãã¥ãŒã䜿çšããããšããå§ãããŸãã
EXEC sp_tables; -- , , --OR SELECT @@Servername AS ServerName , TABLE_CATALOG , TABLE_SCHEMA , TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_NAME ; --OR SELECT @@Servername AS ServerName , DB_NAME() AS DBName , o.name AS 'TableName' , o.[Type] , o.create_date FROM sys.objects o WHERE o.Type = 'U' -- User table ORDER BY o.name; --OR SELECT @@Servername AS ServerName , DB_NAME() AS DBName , t.Name AS TableName, t.[Type], t.create_date FROM sys.tables t ORDER BY t.Name; GO
ããŒãã«å ã®ãšã³ããªã®æ°
ããŒãã«ã«ã€ããŠäœãç¥ããªãå Žåããã¹ãŠã®ããŒãã«ã¯çããéèŠã§ãã ããŒãã«ã«ã€ããŠåŠç¿ããã°ããã»ã©ãããŒãã«ãæ¡ä»¶ä»ãã§éèŠåºŠãé«ããªããæ¡ä»¶ä»ãã§éèŠåºŠãäœããªããŸãã äžè¬ã«ãèšå€§ãªæ°ã®ã¬ã³ãŒããæã€ããŒãã«ã¯ãããã©ãŒãã³ã¹ã«æ·±å»ãªåœ±é¿ãäžããããšããããããŸãã
SSMSã§ã¯ãä»»æã®ããŒãã«ãå³ã¯ãªãã¯ããŠ[ã¹ãã¬ãŒãž]ã¿ãã®ããããã£ãéããããŒãã«å ã®ã¬ã³ãŒãæ°ã確èªã§ããŸãã

ãã¹ãŠã®ããŒãã«ã«é¢ãããã®æ å ±ãæåã§åéããã®ã¯ããªãå°é£ã§ãã ç¹°ãè¿ããŸãããåããŒãã«ã«SELECT COUNTïŒ*ïŒFROM TABLENAMEãèšè¿°ããå Žåã倧éã«åºåããå¿ èŠããããŸãã
T-SQLã䜿çšããŠã¹ã¯ãªãããçæããæ¹ãã¯ããã«äŸ¿å©ã§ãã 以äžã®ã¹ã¯ãªããã¯ãçŸåšã®ããŒã¿ããŒã¹ã®åããŒãã«ã®è¡æ°ãååŸããããã®T-SQLã¹ããŒãã¡ã³ãã®ã»ãããçæããŸãã å®è¡ããŠãçµæãæ°ãããŠã£ã³ããŠã«ã³ããŒããŠå®è¡ããŸãã
SELECT 'Select ''' + DB_NAME() + '.' + SCHEMA_NAME(SCHEMA_ID) + '.' + LEFT(o.name, 128) + ''' as DBName, count(*) as Count From ' + o.name + ';' AS ' Script generator to get counts for all tables' FROM sys.objects o WHERE o.[type] = 'U' ORDER BY o.name; GO

翻蚳è ã®ã¡ã¢ ïŒãªã¯ãšã¹ãã¯ããŸããããŸããã§ãããããŒãã«åã«ã¹ããŒããè¿œå ããŸããã
SELECT 'Select ''' + DB_NAME() + '.' + SCHEMA_NAME(SCHEMA_ID) + '.' + LEFT(o.name, 128) + ''' as DBName, count(*) as Count From ' + SCHEMA_NAME(SCHEMA_ID) + '.' + o.name + ';' AS ' Script generator to get counts for all tables' FROM sys.objects o WHERE o.[type] = 'U' ORDER BY o.name;
sp_msForEachTable
Sp_msforeachtableã¯ãããŒã¿ããŒã¹å ã®ãã¹ãŠã®ããŒãã«ããééãããã¯ãšãªãå®è¡ãããïŒãã«çœ®ãæããŠãææžåãããŠããªãé¢æ°ã§ãã çŸåšã®ããŒãã«ã®ååã ããŒã¿ããŒã¹ã¬ãã«ã§æ©èœããåæ§ã®é¢æ°sp_msforeachdbããããŸãã
ãã®ææžåãããŠããªãæ©èœã«ã¯ããªããžã§ã¯ãåã«ç¹æ®æåã䜿çšãããªã©ãããã€ãã®åé¡ããããŸãã ã€ãŸã ããŒãã«ãŸãã¯ããŒã¿ããŒã¹ã®ååã«ã-ãèšå·ãå«ãŸããŠããå Žåã以äžã«ãªã¹ããããŠããã¹ãã¢ãããã·ãŒãžã£ã¯å€±æããŸãã
CREATE TABLE #rowcount ( Tablename VARCHAR(128) , Rowcnt INT ); EXEC sp_MSforeachtable 'insert into #rowcount select ''?'', count(*) from ?' SELECT * FROM #rowcount ORDER BY Tablename , Rowcnt; DROP TABLE #rowcount;
ã¬ã³ãŒãã®æ°ãååŸããæéã®æ¹æ³-ã¯ã©ã¹ã¿ãŒã€ã³ããã¯ã¹
以åã®ãã¹ãŠã®ã¡ãœããã¯COUNTïŒ*ïŒã䜿çšããŠããŸããããããŒãã«ã«50äžä»¶ãè¶ ããã¬ã³ãŒããããå Žåã¯ãåŸã ã«æ©èœããŸãã
ããŒãã«å ã®ã¬ã³ãŒãæ°ãååŸããæéã®æ¹æ³ã¯ãã¯ã©ã¹ã¿ãŒã€ã³ããã¯ã¹ãŸãã¯ããŒãå ã®ã¬ã³ãŒãæ°ãååŸããããšã§ãã ãã®æ¹æ³ã¯æéã§ãããæ å ±ã®æŽæ°ã«å°ãæéãããããããã€ã³ããã¯ã¹ãšã³ããªã®æ°ãšããŒãã«å ã®å®éã®è¡æ°ã«é¢ããæ å ±ã¯äžèŽããªãå¯èœæ§ããããšMSãèšã£ãŠããããšãèŠããŠãããŠãã ããã ã»ãšãã©ã®å Žåããããã®å€ã¯åãããéåžžã«è¿ãå€ã§ãããããã«åãå€ã«ãªããŸãã
-- -- Hint: , SELECT @@ServerName AS Server , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(p.object_id) AS SchemaName , OBJECT_NAME(p.object_id) AS TableName , i.Type_Desc , i.Name AS IndexUsedForCounts , SUM(p.Rows) AS Rows FROM sys.partitions p JOIN sys.indexes i ON i.object_id = p.object_id AND i.index_id = p.index_id WHERE i.type_desc IN ( 'CLUSTERED', 'HEAP' ) -- This is key (1 index per table) AND OBJECT_SCHEMA_NAME(p.object_id) <> 'sys' GROUP BY p.object_id , i.type_desc , i.Name ORDER BY SchemaName , TableName; -- OR -- , DMV dm_db_partition_stats SELECT @@ServerName AS ServerName , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(ddps.object_id) AS SchemaName , OBJECT_NAME(ddps.object_id) AS TableName , i.Type_Desc , i.Name AS IndexUsedForCounts , SUM(ddps.row_count) AS Rows FROM sys.dm_db_partition_stats ddps JOIN sys.indexes i ON i.object_id = ddps.object_id AND i.index_id = ddps.index_id WHERE i.type_desc IN ( 'CLUSTERED', 'HEAP' ) -- This is key (1 index per table) AND OBJECT_SCHEMA_NAME(ddps.object_id) <> 'sys' GROUP BY ddps.object_id , i.type_desc , i.Name ORDER BY SchemaName , TableName; GO
ããŒãã®æ€çŽ¢ïŒã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã®ãªãããŒãã«ïŒ
ããŒãã®æäœã¯ãããŒã¿ããŒã¹ã§ã¯ãªããã©ãããã¡ã€ã«ã®æäœã«äŒŒãŠããŸãã ã¯ãšãªã®å®è¡æã«ããŒãã«å šäœã®ã¹ãã£ã³ãä¿èšŒããå Žåã¯ãããŒãã䜿çšããŸãã éåžžããã¹ãŠã®ããŒãããŒãã«ã«äž»ããŒãè¿œå ããããšããå§ãããŸãã
-- ( 1) SELECT @@Servername AS ServerName , DB_NAME() AS DBName , t.Name AS HeapTable , t.Create_Date FROM sys.tables t INNER JOIN sys.indexes i ON t.object_id = i.object_id AND i.type_desc = 'HEAP' ORDER BY t.Name --OR -- ( 2) SELECT @@Servername AS ServerName , DB_NAME() AS DBName , t.Name AS HeapTable , t.Create_Date FROM sys.tables t WHERE OBJECTPROPERTY(OBJECT_ID, 'TableHasClustIndex') = 0 ORDER BY t.Name; --OR -- ( 3) + SELECT @@ServerName AS Server , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(ddps.object_id) AS SchemaName , OBJECT_NAME(ddps.object_id) AS TableName , i.Type_Desc , SUM(ddps.row_count) AS Rows FROM sys.dm_db_partition_stats AS ddps JOIN sys.indexes i ON i.object_id = ddps.object_id AND i.index_id = ddps.index_id WHERE i.type_desc = 'HEAP' AND OBJECT_SCHEMA_NAME(ddps.object_id) <> 'sys' GROUP BY ddps.object_id , i.type_desc ORDER BY TableName;
ããŒãã«å ã®ã¢ã¯ãã£ããã£ãåŠçããŸã
ããã©ãŒãã³ã¹ã®æé©åã«åãçµããšããã©ã®ããŒãã«ãã¢ã¯ãã£ãã«èªã¿åãããã©ã®ããŒãã«ãã¢ã¯ãã£ãã«æžã蟌ãŸããããç¥ãããšãéåžžã«éèŠã§ãã åã«ãããŒãã«ã«ããã¬ã³ãŒãã®æ°ã確èªããŸããããä»åºŠã¯ã¬ã³ãŒãã®æžã蟌ã¿ãšèªã¿åãã®é »åºŠã確èªããŸãã
dmvããã®ãã®æ å ±ã¯ãSQL Serverãåèµ·åãããã³ã«æ¶å»ãããããšã«æ³šæããŠãã ããã ãµãŒããŒã®å®è¡æéãé·ãã»ã©ãçµ±èšã®ä¿¡é Œæ§ãé«ããªããŸãã 1é±éã«åéãããçµ±èšãããã30æ¥éã«åéãããçµ±èšã®æ¹ãã¯ããã«èªä¿¡ããããŸãã
-- / -- , -- , SQL Server SELECT @@ServerName AS ServerName , DB_NAME() AS DBName , OBJECT_NAME(ddius.object_id) AS TableName , SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups) AS Reads , SUM(ddius.user_updates) AS Writes , SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups + ddius.user_updates) AS [Reads&Writes] , ( SELECT DATEDIFF(s, create_date, GETDATE()) / 86400.0 FROM master.sys.databases WHERE name = 'tempdb' ) AS SampleDays , ( SELECT DATEDIFF(s, create_date, GETDATE()) AS SecoundsRunnig FROM master.sys.databases WHERE name = 'tempdb' ) AS SampleSeconds FROM sys.dm_db_index_usage_stats ddius INNER JOIN sys.indexes i ON ddius.object_id = i.object_id AND i.index_id = ddius.index_id WHERE OBJECTPROPERTY(ddius.object_id, 'IsUserTable') = 1 AND ddius.database_id = DB_ID() GROUP BY OBJECT_NAME(ddius.object_id) ORDER BY [Reads&Writes] DESC; GO
ãã®ã¯ãšãªã®ããé«åºŠãªããŒãžã§ã³ã¯ããµãŒããŒäžã®ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãã¹ãŠã®ããŒãã«ã«é¢ããæ å ±ãåéããã«ãŒãœã«ã§è¡šãããŸãã äžè¬ã«ãç§ã¯ã«ãŒãœã«ã®ããã©ãŒãã³ã¹ãäœããããã«ãŒãœã«ã®ãã¡ã³ã§ã¯ãããŸããããç°ãªãããŒã¿ããŒã¹ã移åããããšã¯ã«ãŒãœã«ã«ãšã£ãŠçŽ æŽãããã¢ããªã±ãŒã·ã§ã³ã§ãã
-- -- , -- , SQL Server -- -- , tempdb DECLARE DBNameCursor CURSOR FOR SELECT Name FROM sys.databases WHERE Name NOT IN ( 'master', 'model', 'msdb', 'tempdb', 'distribution' ) ORDER BY Name; DECLARE @DBName NVARCHAR(128) DECLARE @cmd VARCHAR(4000) IF OBJECT_ID(N'tempdb..TempResults') IS NOT NULL BEGIN DROP TABLE tempdb..TempResults END CREATE TABLE tempdb..TempResults ( ServerName NVARCHAR(128) , DBName NVARCHAR(128) , TableName NVARCHAR(128) , Reads INT , Writes INT , ReadsWrites INT , SampleDays DECIMAL(18, 8) , SampleSeconds INT ) OPEN DBNameCursor FETCH NEXT FROM DBNameCursor INTO @DBName WHILE @@fetch_status = 0 BEGIN ---------------------------------------------------- -- Print @DBName SELECT @cmd = 'Use ' + @DBName + '; ' SELECT @cmd = @cmd + ' Insert Into tempdb..TempResults SELECT @@ServerName AS ServerName, DB_NAME() AS DBName, object_name(ddius.object_id) AS TableName , SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups) AS Reads, SUM(ddius.user_updates) as Writes, SUM(ddius.user_seeks + ddius.user_scans + ddius.user_lookups + ddius.user_updates) as ReadsWrites, (SELECT datediff(s,create_date, GETDATE()) / 86400.0 FROM sys.databases WHERE name = ''tempdb'') AS SampleDays, (SELECT datediff(s,create_date, GETDATE()) FROM sys.databases WHERE name = ''tempdb'') as SampleSeconds FROM sys.dm_db_index_usage_stats ddius INNER JOIN sys.indexes i ON ddius.object_id = i.object_id AND i.index_id = ddius.index_id WHERE objectproperty(ddius.object_id,''IsUserTable'') = 1 --True AND ddius.database_id = db_id() GROUP BY object_name(ddius.object_id) ORDER BY ReadsWrites DESC;' --PRINT @cmd EXECUTE (@cmd) ----------------------------------------------------- FETCH NEXT FROM DBNameCursor INTO @DBName END CLOSE DBNameCursor DEALLOCATE DBNameCursor SELECT * FROM tempdb..TempResults ORDER BY DBName , TableName; --DROP TABLE tempdb..TempResults;
翻蚳è 泚 ïŒãªã¹ãã«ONLINE以å€ã®ç¶æ ã®ããŒã¿ããŒã¹ãããå Žåãã«ãŒãœã«ã¯æ©èœããŸããã
èŠèŽåæ°
è¡šçŸã¯ãæ¯èŒçèšãã°ãããŒã¿ããŒã¹ã«æ ŒçŽãããŠããã¯ãšãªã§ãã ãããã¯ä»®æ³ããŒãã«ãšèããããšãã§ããŸãã ããŒã¿ã¯ãã¥ãŒã«ä¿åãããŸããããã¯ãšãªã§ã¯ããŒãã«ãšåãæ¹æ³ã§åç §ããŸãã
SQL Serverã§ã¯ãå Žåã«ãã£ãŠã¯ãã¥ãŒã䜿çšããŠããŒã¿ãæŽæ°ã§ããŸãã èªã¿åãå°çšãã¥ãŒãååŸããã«ã¯ãäœææã«SELECT DISTINCTã䜿çšã§ããŸãã ãã¥ãŒã®ãã¹ã«ãŒãããŒã¿ã¯ããã¥ãŒã®åè¡ããããŒã¹ãããŒãã«ã®1è¡ã®ã¿ã«å¯Ÿå¿ããå Žåã«ã®ã¿å€æŽã§ããŸãã ãã®åºæºãæºãããªãè¡šçŸãã€ãŸã è€æ°ã®ããŒãã«äžã«æ§ç¯ãããããã°ã«ãŒãåãéèšé¢æ°ãããã³èšç®ã䜿çšããŠãèªã¿åãå°çšã«ãªããŸãã
SELECT @@Servername AS ServerName , DB_NAME() AS DBName , o.name AS ViewName , o.[Type] , o.create_date FROM sys.objects o WHERE o.[Type] = 'V' -- View ORDER BY o.NAME --OR SELECT @@Servername AS ServerName , DB_NAME() AS DBName , Name AS ViewName , create_date FROM sys.Views ORDER BY Name --OR SELECT @@Servername AS ServerName , TABLE_CATALOG , TABLE_SCHEMA , TABLE_NAME , TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW' ORDER BY TABLE_NAME --OR -- CREATE VIEW Code SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , o.name AS 'ViewName' , o.Type , o.create_date , sm.[DEFINITION] AS 'View script' FROM sys.objects o INNER JOIN sys.sql_modules sm ON o.object_id = sm.OBJECT_ID WHERE o.Type = 'V' -- View ORDER BY o.NAME; GO
å矩èª
ç§ã®ãã£ãªã¢ã®äžã§äœåºŠããã¯ãšãªãã¢ã¯ã»ã¹ããŠããããŒãã«ãç解ã§ããªãç¶æ³ã«ééããŸããã åçŽãªSELECT * FROMã¯ã©ã€ã¢ã³ãã¯ãšãªãéä¿¡ããŸãã ClientãšããããŒãã«ãæ¢ããŠããŸãããèŠã€ãããŸããã ãŸããç§ã¯ããããã®ãã¥ãŒã§ããã«éããªããšæããç§ã¯ã¯ã©ã€ã¢ã³ããšåŒã°ãããã¥ãŒãæ¢ããŠããŸããããããèŠã€ããããšãã§ããŸããã ããŒã¿ããŒã¹ãééã£ãŠããã®ã§ããããïŒ ãã®çµæãClientã¯é¡§å®¢ã®å矩èªã§ãããããŒãã«ã¯å®éã«ã¯CustomerãšåŒã°ããŠããŸãã ããŒã±ãã£ã³ã°éšéã¯ããã®ããŒãã«ãã¯ã©ã€ã¢ã³ããšããŠåç §ããããšãæãã§ãããããå矩èªãäœæãããŸããã 幞ããªããšã«ãå矩èªã䜿çšããããšã¯ãŸãã§ãããæºåãã§ããŠããªãå Žåã¯èšŽèšãå°é£ã«ãªãå¯èœæ§ããããŸãã
SELECT @@Servername AS ServerName , DB_NAME() AS DBName , o.name AS ViewName , o.Type , o.create_date FROM sys.objects o WHERE o.[Type] = 'SN' -- Synonym ORDER BY o.NAME; --OR -- SELECT @@Servername AS ServerName , DB_NAME() AS DBName , s.name AS synonyms , s.create_date , s.base_object_name FROM sys.synonyms s ORDER BY s.name; GO
ã¹ãã¢ãããã·ãŒãžã£
ã¹ãã¢ãããã·ãŒãžã£ã¯ãåäžã®å®è¡ãã©ã³ã«ã³ã³ãã€ã«ãããã¹ã¯ãªããã®ã°ã«ãŒãã§ãã ã«ã¿ãã°è¡šçŸã䜿çšããŠãäœæãããKPãå®è¡ãããã¢ã¯ã·ã§ã³ãããã³ããŒãã«ã決å®ã§ããŸãã
-- SELECT @@Servername AS ServerName , DB_NAME() AS DBName , o.name AS StoredProcedureName , o.[Type] , o.create_date FROM sys.objects o WHERE o.[Type] = 'P' -- Stored Procedures ORDER BY o.name --OR -- SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , o.name AS 'ViewName' , o.[type] , o.Create_date , sm.[definition] AS 'Stored Procedure script' FROM sys.objects o INNER JOIN sys.sql_modules sm ON o.object_id = sm.object_id WHERE o.[type] = 'P' -- Stored Procedures -- AND sm.[definition] LIKE '%insert%' -- AND sm.[definition] LIKE '%update%' -- AND sm.[definition] LIKE '%delete%' -- AND sm.[definition] LIKE '%tablename%' ORDER BY o.name; GO
WHEREã«åçŽãªæ¡ä»¶ãè¿œå ãããšãããšãã°INSERTæäœãå®è¡ããã¹ãã¢ãããã·ãŒãžã£ã«é¢ããæ å ±ã®ã¿ãååŸã§ããŸãã
WHERE o.[type] = 'P' -- Stored Procedures AND sm.definition LIKE '%insert%' ORDER BY o.name âŠ
WHEREã®æ¡ä»¶ãå°ãå€æŽããããšã«ãããç¹å®ã®ããŒãã«ãæŽæ°ãåé€ããŸãã¯ã¢ã¯ã»ã¹ããããã»ããµãŒã«é¢ããæ å ±ãåéã§ããŸãã
æ©èœ
é¢æ°ã¯SQL Serverã«æ ŒçŽãããããã€ãã®ãã©ã¡ãŒã¿ãŒãååŸããŠç¹å®ã®ã¢ã¯ã·ã§ã³ãŸãã¯èšç®ãå®è¡ããçµæãè¿ããŸãã
-- SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , o.name AS 'Functions' , o.[Type] , o.create_date FROM sys.objects o WHERE o.Type = 'FN' -- Function ORDER BY o.NAME; --OR -- SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , o.name AS 'FunctionName' , o.[type] , o.create_date , sm.[DEFINITION] AS 'Function script' FROM sys.objects o INNER JOIN sys.sql_modules sm ON o.object_id = sm.OBJECT_ID WHERE o.[Type] = 'FN' -- Function ORDER BY o.NAME; GO
ããªã¬ãŒ
ããªã¬ãŒã¯ããã®ããªã¬ãŒãå±ããããŒãã«ã§ç¹å®ã®ã¢ã¯ã·ã§ã³ã«å¿ããŠå®è¡ãããäžçš®ã®ã¹ãã¢ãããã·ãŒãžã£ã§ãã ããšãã°ãINSERTãUPDATEãããã³DELETEããªã¬ãŒãäœæã§ããŸãã
-- SELECT @@Servername AS ServerName , DB_NAME() AS DBName , parent.name AS TableName , o.name AS TriggerName , o.[Type] , o.create_date FROM sys.objects o INNER JOIN sys.objects parent ON o.parent_object_id = parent.object_id WHERE o.Type = 'TR' -- Triggers ORDER BY parent.name , o.NAME --OR SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , Parent_id , name AS TriggerName , create_date FROM sys.triggers WHERE parent_class = 1 ORDER BY name; --OR -- SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , OBJECT_NAME(Parent_object_id) AS TableName , o.name AS 'TriggerName' , o.Type , o.create_date , sm.[DEFINITION] AS 'Trigger script' FROM sys.objects o INNER JOIN sys.sql_modules sm ON o.object_id = sm.OBJECT_ID WHERE o.Type = 'TR' -- Triggers ORDER BY o.NAME; GO
ãã§ãã¯å¶é
CHECKå¶çŽã¯ãããŒã¿ããŒã¹ã«ããžãã¹ããžãã¯ãå®è£ ããè¯ãæ¹æ³ã§ãã ããšãã°ãäžéšã®ãã£ãŒã«ãã¯æ£ãŸãã¯è² ã§ããå¿ èŠããããŸãããŸãã¯ã1ã€ã®åã®æ¥ä»ãä»ã®åã®æ¥ä»ããã倧ããå¿ èŠããããŸãã
-- Check Constraints SELECT @@Servername AS ServerName , DB_NAME() AS DBName , parent.name AS 'TableName' , o.name AS 'Constraints' , o.[Type] , o.create_date FROM sys.objects o INNER JOIN sys.objects parent ON o.parent_object_id = parent.object_id WHERE o.Type = 'C' -- Check Constraints ORDER BY parent.name , o.name --OR --CHECK constriant definitions SELECT @@Servername AS ServerName , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(parent_object_id) AS SchemaName , OBJECT_NAME(parent_object_id) AS TableName , parent_column_id AS Column_NBR , Name AS CheckConstraintName , type , type_desc , create_date , OBJECT_DEFINITION(object_id) AS CheckConstraintDefinition FROM sys.Check_constraints ORDER BY TableName , SchemaName , Column_NBR GO
ããŒã¿ã¢ãã«ã®è©³çŽ°
以åã¯ãããŒã¿ããŒã¹ãæ§æãããªããžã§ã¯ãã®ããããã¬ãã«ãã®ã¢ã€ãã¢ãæäŸããã¹ã¯ãªããã䜿çšããŸãããã«ã©ã ããããã®ããŒã¿åãäžããããããã©ã«ãå€ãååšããïŒååšããã¹ãïŒããŒããã³ã€ã³ããã¯ã¹ãªã©ãããŒãã«ã«é¢ããããŒã¿ãããã«ååŸããå¿ èŠãããå ŽåããããŸãããã®ã»ã¯ã·ã§ã³ã§æ瀺ãããã¯ãšãªã¯ãæ¢åã®ããŒã¿ã¢ãã«ã®ãšã³ãžãã¢ãªã³ã°ãã»ãŒéã«ããæ段ãæäŸããŸãã
å
次ã®ã¹ã¯ãªããã¯ãããŒã¿ããŒã¹å šäœã®ããŒãã«ãšåã«ã€ããŠèª¬æããŠããŸãããã®ã¯ãšãªã®çµæã¯Excelã«ã³ããŒã§ããŸããExcelã§ãã£ã«ã¿ãŒãšäžŠã¹æ¿ããæ§æããããŒã¿ããŒã¹ã§äœ¿çšãããããŒã¿åãããèŠãããšãã§ããŸãããŸããåãååã§ç°ãªãããŒã¿åã®åãèŠãŠãã ããã
SELECT @@Servername AS Server , DB_NAME() AS DBName , isc.Table_Name AS TableName , isc.Table_Schema AS SchemaName , Ordinal_Position AS Ord , Column_Name , Data_Type , Numeric_Precision AS Prec , Numeric_Scale AS Scale , Character_Maximum_Length AS LEN , -- -1 means MAX like Varchar(MAX) Is_Nullable , Column_Default , Table_Type FROM INFORMATION_SCHEMA.COLUMNS isc INNER JOIN information_schema.tables ist ON isc.table_name = ist.table_name -- WHERE Table_Type = 'BASE TABLE' -- 'Base Table' or 'View' ORDER BY DBName , TableName , SchemaName , Ordinal_position; -- -- / SELECT @@Servername AS Server , DB_NAME() AS DBName , Column_Name , Data_Type , Numeric_Precision AS Prec , Numeric_Scale AS Scale , Character_Maximum_Length , COUNT(*) AS Count FROM information_schema.columns isc INNER JOIN information_schema.tables ist ON isc.table_name = ist.table_name WHERE Table_type = 'BASE TABLE' GROUP BY Column_Name , Data_Type , Numeric_Precision , Numeric_Scale , Character_Maximum_Length; -- SELECT @@Servername AS ServerName , DB_NAME() AS DBName , Data_Type , Numeric_Precision AS Prec , Numeric_Scale AS Scale , Character_Maximum_Length AS [Length] , COUNT(*) AS COUNT FROM information_schema.columns isc INNER JOIN information_schema.tables ist ON isc.table_name = ist.table_name WHERE Table_type = 'BASE TABLE' GROUP BY Data_Type , Numeric_Precision , Numeric_Scale , Character_Maximum_Length ORDER BY Data_Type , Numeric_Precision , Numeric_Scale , Character_Maximum_Length -- Large object data types or Binary Large Objects(BLOBs) -- , "online" SELECT @@Servername AS ServerName , DB_NAME() AS DBName , isc.Table_Name , Ordinal_Position AS Ord , Column_Name , Data_Type AS BLOB_Data_Type , Numeric_Precision AS Prec , Numeric_Scale AS Scale , Character_Maximum_Length AS [Length] FROM information_schema.columns isc INNER JOIN information_schema.tables ist ON isc.table_name = ist.table_name WHERE Table_type = 'BASE TABLE' AND ( Data_Type IN ( 'text', 'ntext', 'image', 'XML' ) OR ( Data_Type IN ( 'varchar', 'nvarchar', 'varbinary' ) AND Character_Maximum_Length = -1 ) ) -- varchar(max), nvarchar(max), varbinary(max) ORDER BY isc.Table_Name , Ordinal_position;
ããã©ã«ãå€
ããã©ã«ãå€ã¯ãæ¿å ¥äžã«åã«å€ãæå®ãããŠããªãå Žåã«ä¿åãããå€ã§ããå€ãã®å Žåãæ¥ä»ãæ ŒçŽããåã«ã¯get_dateïŒïŒãèšå®ãããŸãããŸããç£æ»ã«ã¯ããã©ã«ãå€ã䜿çšãããŸããç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŠãŒã¶ãŒã¢ã«ãŠã³ããå€å¥ããããã«system_userãæ¿å ¥ãããŸãã
-- Table Defaults SELECT @@Servername AS ServerName , DB_NAME() AS DBName , parent.name AS TableName , o.name AS Defaults , o.[Type] , o.Create_date FROM sys.objects o INNER JOIN sys.objects parent ON o.parent_object_id = parent.object_id WHERE o.[Type] = 'D' -- Defaults ORDER BY parent.name , o.NAME --OR -- Column Defaults SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , OBJECT_SCHEMA_NAME(parent_object_id) AS SchemaName , OBJECT_NAME(parent_object_id) AS TableName , parent_column_id AS Column_NBR , Name AS DefaultName , [type] , type_desc , create_date , OBJECT_DEFINITION(object_id) AS Defaults FROM sys.default_constraints ORDER BY TableName , Column_NBR --OR -- Column Defaults SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , OBJECT_SCHEMA_NAME(t.object_id) AS SchemaName , t.Name AS TableName , c.Column_ID AS Ord , c.Name AS Column_Name , OBJECT_NAME(default_object_id) AS DefaultName , OBJECT_DEFINITION(default_object_id) AS Defaults FROM sys.Tables t INNER JOIN sys.columns c ON t.object_id = c.object_id WHERE default_object_id <> 0 ORDER BY TableName , SchemaName , c.Column_ID GO
èšç®å
èšç®åãšã¯ãååãšããŠãããŒãã«ã®ä»ã®åã®å€ã«åºã¥ããŠå€ãèšç®ãããåã§ãã
-- SELECT @@Servername AS ServerName , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(object_id) AS SchemaName , OBJECT_NAME(object_id) AS Tablename , Column_id , Name AS Computed_Column , [Definition] , is_persisted FROM sys.computed_columns ORDER BY SchemaName , Tablename , [Definition]; --Or -- Computed Columns SELECT @@Servername AS ServerName , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(t.object_id) AS SchemaName, t.Name AS TableName , c.Column_ID AS Ord , c.Name AS Computed_Column FROM sys.Tables t INNER JOIN sys.Columns c ON t.object_id = c.object_id WHERE is_computed = 1 ORDER BY t.Name , SchemaName , c.Column_ID GO
IDå
IDENTITYåã«ã¯ãã·ã¹ãã ã«ãã£ãŠäžæã®å€ãèªåçã«å ¥åãããŸããäžè¬ã«ãã¬ã³ãŒãã®ã·ãŒã±ã³ã¹çªå·ãããŒãã«ã«ä¿åããããã«äœ¿çšãããŸãã
SELECT @@Servername AS ServerName , DB_NAME() AS DBName , OBJECT_SCHEMA_NAME(object_id) AS SchemaName , OBJECT_NAME(object_id) AS TableName , Column_id , Name AS IdentityColumn , Seed_Value , Last_Value FROM sys.identity_columns ORDER BY SchemaName , TableName , Column_id; GO
ããŒãšã€ã³ããã¯ã¹
åã«æžããããã«ãããŒãã«ã«äž»ããŒãšããã«å¯Ÿå¿ããã€ã³ããã¯ã¹ãæã€ããšã¯ããã¹ããã©ã¯ãã£ã¹ã®1ã€ã§ããå¥ã®ãã¹ããã©ã¯ãã£ã¹ã¯ãå€éšããŒã«å«ãŸããåã«å€éšããŒã®ã€ã³ããã¯ã¹ãæ§ç¯ããããšã§ããå€éšããŒã€ã³ããã¯ã¹ã¯ãããŒãã«ã®çµåã«æé©ã§ãããããã®ã€ã³ããã¯ã¹ã¯ãã¬ã³ãŒããåé€ãããšãã®ããã©ãŒãã³ã¹ã«ãè¯ã圱é¿ãäžããŸãã
ã©ããªã€ã³ããã¯ã¹ããããŸããïŒ
çŸåšã®ããŒã¿ããŒã¹ã®ãã¹ãŠã®ããŒãã«ã®ãã¹ãŠã®ã€ã³ããã¯ã¹ãæ€çŽ¢ããã¹ã¯ãªããã
SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , o.Name AS TableName , i.Name AS IndexName FROM sys.objects o INNER JOIN sys.indexes i ON o.object_id = i.object_id WHERE o.Type = 'U' -- User table AND LEFT(i.Name, 1) <> '_' -- Remove hypothetical indexes ORDER BY o.NAME , i.name; GO
æ¬ èœããŠããã€ã³ããã¯ã¹ã¯äœã§ããïŒ
SQL Serverã¯ã以åã«å®è¡ãããã¯ãšãªã«åºã¥ããŠãããŒã¿ããŒã¹å ã®æ¬ èœããŠããã€ã³ããã¯ã¹ã«é¢ããæ å ±ãæäŸããŸããäœæãããšãçç£æ§ãåäžããŸãã
ç²ç®çã«ãããã®ã€ã³ããã¯ã¹ãè¿œå ããªãã§ãã ãããææ¡ãããåã€ã³ããã¯ã¹ã«ã€ããŠèããŸããããšãã°ãå«ãŸããŠããåã䜿çšãããšãããªã¥ãŒã ãå€§å¹ ã«å¢å ããã®ã§äŸ¿å©ã§ãã
-- DMV SELECT @@ServerName AS ServerName , DB_NAME() AS DBName , t.name AS 'Affected_table' , ( LEN(ISNULL(ddmid.equality_columns, N'') + CASE WHEN ddmid.equality_columns IS NOT NULL AND ddmid.inequality_columns IS NOT NULL THEN ',' ELSE '' END) - LEN(REPLACE(ISNULL(ddmid.equality_columns, N'') + CASE WHEN ddmid.equality_columns IS NOT NULL AND ddmid.inequality_columns IS NOT NULL THEN ',' ELSE '' END, ',', '')) ) + 1 AS K , COALESCE(ddmid.equality_columns, '') + CASE WHEN ddmid.equality_columns IS NOT NULL AND ddmid.inequality_columns IS NOT NULL THEN ',' ELSE '' END + COALESCE(ddmid.inequality_columns, '') AS Keys , COALESCE(ddmid.included_columns, '') AS [include] , 'Create NonClustered Index IX_' + t.name + '_missing_' + CAST(ddmid.index_handle AS VARCHAR(20)) + ' On ' + ddmid.[statement] COLLATE database_default + ' (' + ISNULL(ddmid.equality_columns, '') + CASE WHEN ddmid.equality_columns IS NOT NULL AND ddmid.inequality_columns IS NOT NULL THEN ',' ELSE '' END + ISNULL(ddmid.inequality_columns, '') + ')' + ISNULL(' Include (' + ddmid.included_columns + ');', ';') AS sql_statement , ddmigs.user_seeks , ddmigs.user_scans , CAST(( ddmigs.user_seeks + ddmigs.user_scans ) * ddmigs.avg_user_impact AS BIGINT) AS 'est_impact' , avg_user_impact , ddmigs.last_user_seek , ( SELECT DATEDIFF(Second, create_date, GETDATE()) Seconds FROM sys.databases WHERE name = 'tempdb' ) SecondsUptime FROM sys.dm_db_missing_index_groups ddmig INNER JOIN sys.dm_db_missing_index_group_stats ddmigs ON ddmigs.group_handle = ddmig.index_group_handle INNER JOIN sys.dm_db_missing_index_details ddmid ON ddmig.index_handle = ddmid.index_handle INNER JOIN sys.tables t ON ddmid.OBJECT_ID = t.OBJECT_ID WHERE ddmid.database_id = DB_ID() ORDER BY est_impact DESC; GO
å€éšããŒ
å€éšããŒã¯ããŒãã«éã®é¢ä¿ãå®çŸ©ããåç §æŽåæ§ãå¶åŸ¡ããããã«äœ¿çšãããŸãããšã³ãã£ãã£é¢ä¿å³ã§ã¯ãããŒãã«éã®ç·ã¯å€éšããŒã瀺ããŸãã
-- Foreign Keys SELECT @@Servername AS ServerName , DB_NAME() AS DB_Name , parent.name AS 'TableName' , o.name AS 'ForeignKey' , o.[Type] , o.Create_date FROM sys.objects o INNER JOIN sys.objects parent ON o.parent_object_id = parent.object_id WHERE o.[Type] = 'F' -- Foreign Keys ORDER BY parent.name , o.name --OR SELECT f.name AS ForeignKey , SCHEMA_NAME(f.SCHEMA_ID) AS SchemaName , OBJECT_NAME(f.parent_object_id) AS TableName , COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName , SCHEMA_NAME(o.SCHEMA_ID) ReferenceSchemaName , OBJECT_NAME(f.referenced_object_id) AS ReferenceTableName , COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id ORDER BY TableName , ReferenceTableName; GO
å€éšããŒã€ã³ããã¯ã¹ããããŸãã
å ã»ã©èšã£ãããã«ãå€éšããŒã«å«ãŸããåã«ã€ã³ããã¯ã¹ãæ§ç¯ããããšãæãŸããã§ããããã«ãããéåžžã¯å€éšããŒã§çµåãããŠããããŒãã«ã®çµåãå€§å¹ ã«é«éåãããŸãããããã®ã€ã³ããã¯ã¹ã¯ãåé€æäœãå€§å¹ ã«é«éåããŸãããã®ãããªã€ã³ããã¯ã¹ããªãå ŽåãSQL Serverã¯ããæåã®ãããŒãã«ããã¬ã³ãŒããåé€ããããã³ã«ããªã³ã¯ãããããŒãã«ã®ããŒãã«ã¹ãã£ã³ãå®è¡ããŸãã
-- Foreign Keys missing indexes -- , -- , , SELECT DB_NAME() AS DBName , rc.Constraint_Name AS FK_Constraint , -- rc.Constraint_Catalog AS FK_Database, -- rc.Constraint_Schema AS FKSch, ccu.Table_Name AS FK_Table , ccu.Column_Name AS FK_Column , ccu2.Table_Name AS ParentTable , ccu2.Column_Name AS ParentColumn , I.Name AS IndexName , CASE WHEN I.Name IS NULL THEN 'IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N''' + RC.Constraint_Schema + '.' + ccu.Table_Name + ''') AND name = N''IX_' + ccu.Table_Name + '_' + ccu.Column_Name + ''') ' + 'CREATE NONCLUSTERED INDEX IX_' + ccu.Table_Name + '_' + ccu.Column_Name + ' ON ' + rc.Constraint_Schema + '.' + ccu.Table_Name + '( ' + ccu.Column_Name + ' ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = ON, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = ON);' ELSE '' END AS SQL FROM information_schema.referential_constraints RC JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON rc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu2 ON rc.UNIQUE_CONSTRAINT_NAME = ccu2.CONSTRAINT_NAME LEFT JOIN sys.columns c ON ccu.Column_Name = C.name AND ccu.Table_Name = OBJECT_NAME(C.OBJECT_ID) LEFT JOIN sys.index_columns ic ON C.OBJECT_ID = IC.OBJECT_ID AND c.column_id = ic.column_id AND index_column_id = 1 -- index found has the foreign key -- as the first column LEFT JOIN sys.indexes i ON IC.OBJECT_ID = i.OBJECT_ID AND ic.index_Id = i.index_Id WHERE I.name IS NULL ORDER BY FK_table , ParentTable , ParentColumn; GO
äŸåé¢ä¿
ç¶æ³ã«ãã£ãŠç°ãªããŸã...åã«ãã®è¡šçŸãèããããšããããšæããŸããããŒã¿ããŒã¹ã®äŸåé¢ä¿ãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ãããããã®3ã€ã®ç°ãªãæ¹æ³ãæ€èšããŸããæåã®æ¹æ³ã¯ãsp_msdependeciesã¹ãã¢ãããã·ãŒãžã£ã䜿çšããããšã§ãã2çªç®ã¯ãå€éšããŒã«é¢é£ä»ããããã·ã¹ãã ããŒãã«ã§ãã3çªç®ã®æ¹æ³ã¯ãCTEã䜿çšããããšã§ãã
sp_msdependencies
Sp_msdependenciesã¯ãè€éãªããŒãã«ã®çžäºäŸåé¢ä¿ã®è§£æã«éåžžã«åœ¹ç«ã€ããã¥ã¡ã³ãåãããŠããªãã¹ãã¢ãããã·ãŒãžã£ã§ãã
EXEC sp_msdependencies '?' -- Displays Help sp_MSobject_dependencies name = NULL, type = NULL, flags = 0x01fd name: name or null (all objects of type) type: type number (see below) or null if both null, get all objects in database flags is a bitmask of the following values: 0x10000 = return multiple parent/child rows per object 0x20000 = descending return order 0x40000 = return children instead of parents 0x80000 = Include input object in output result set 0x100000 = return only firstlevel (immediate) parents/children 0x200000 = return only DRI dependencies power(2, object type number(s)) to return in results set: 0 (1 - 0x0001) - UDF 1 (2 - 0x0002) - system tables or MS-internal objects 2 (4 - 0x0004) - view 3 (8 - 0x0008) - user table 4 (16 - 0x0010) - procedure 5 (32 - 0x0020) - log 6 (64 - 0x0040) - default 7 (128 - 0x0080) - rule 8 (256 - 0x0100) - trigger 12 (1024 - 0x0400) - uddt shortcuts: 29 (0x011c) - trig, view, user table, procedure 448 (0x00c1) - rule, default, datatype 4606 (0x11fd) - all but systables/objects 4607 (0x11ff) â all
sp_msdependenciesã䜿çšããŠãã¹ãŠã®äŸåé¢ä¿ãå°åºãããšãTypeãObjNameãOwnerïŒSchemaïŒãSequenceã®4ã€ã®åãåŸãããŸãã
ã·ãŒã±ã³ã¹çªå·ïŒã·ãŒã±ã³ã¹ïŒã«æ³šæããŠãã ãã-1ããå§ãŸããé 次å¢å ããŸããã·ãŒã±ã³ã¹ã¯ãäŸåé¢ä¿ã®ãã·ãªã¢ã«çªå·ãã§ãã
éåžžã«å€§ããªããŒã¿ããŒã¹ã§ã¢ãŒã«ã€ããŸãã¯åé€ãå®è¡ããå¿ èŠããããšãã«ããã®æ¹æ³ãæ°å䜿çšããŸãããããŒãã«ã®äŸåé¢ä¿ãããã£ãŠããå ŽåããããŒãããããããããŸããããŒã¿ãã¢ãŒã«ã€ããŸãã¯åé€ããã«ã¯ãã©ã®é åºã§å¿ èŠã§ããã[ã·ãŒã±ã³ã¹]åã®å€ãæãé«ãããŒãã«ããéå§ããéã®é åºïŒå€§ãããã®ããå°ãããã®ãžïŒã§ç§»åããŸããåãSequenceå€ãæã€ããŒãã«ã¯åæã«åé€ã§ããŸãããã®ã¡ãœããã¯å€éšããŒã®å¶éã«éåãããå¶çŽãäžæçã«åé€ããã³åæ§ç¯ããã«ã¬ã³ãŒãã転é/åé€ã§ããŸãã
EXEC sp_msdependencies NULL -- EXEC sp_msdependencies NULL, 3 --

SSMSã§ã¯ãããŒãã«åãå³ã¯ãªãã¯ãããšããäŸåé¢ä¿ã®è¡šç€ºããšãTABLENAMEã«äŸåãããªããžã§ã¯ãããéžæã§ããŸãã

ãã®æ å ±ã¯æ¬¡ã®æ¹æ³ã§ãååŸã§ããŸãã
-- sp_MSdependencies â -- , EXEC sp_msdependencies N'Sales.Customer',null, 1315327 -- Change Table Name

SSMSã®äŸåé¢ä¿ã衚瀺ãããŠã£ã³ããŠã§ã[TABLENAMEã«äŸåãããªããžã§ã¯ã]ãéžæãããã¹ãŠã®ã¬ãã«ãå±éãããšã次ã®

ããã«è¡šç€ºãããŸããsp_msdependenciesã«ãã£ãŠåãæ å ±ãè¿ãããŸãã
-- sp_MSdependencies - -- , EXEC sp_MSdependencies N'Sales.Customer', NULL, 266751 -- Change Table Name

ãŸããSSMSã§ã¯ãéžæããããŒãã«ãäŸåãããªããžã§ã¯ãã確èªã§ããŸãã

msdependenciesã䜿çšãã次ã®ã¯ãšãªã¯ãåãæ å ±ãè¿ããŸãã
-- , EXEC sp_MSdependencies N'Sales.Customer', null, 1053183 -- Change Table

ããŒãã«ã®äŸåé¢ä¿ã®ãªã¹ããå¿ èŠãªå Žåã¯ãäžæããŒãã«ã䜿çšããŠãã¿ã€ãããšã«äŸåé¢ä¿ããã£ã«ã¿ãªã³ã°ã§ããŸãã
CREATE TABLE #TempTable1 ( Type INT , ObjName VARCHAR(256) , Owner VARCHAR(25) , Sequence INT ); INSERT INTO #TempTable1 EXEC sp_MSdependencies NULL SELECT * FROM #TempTable1 WHERE Type = 8 --Tables ORDER BY Sequence , ObjName DROP TABLE #TempTable1;
ã·ã¹ãã ã«ã¿ãã°ãã¥ãŒãžã®ãªã¯ãšã¹ã
ããŒã¿ããŒã¹ã®äŸåé¢ä¿ãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããã2çªç®ã®æ¹æ³ã¯ãå€éšããŒã«é¢é£ä»ãããããã£ã¬ã¯ããªã·ã¹ãã è¡šçŸãç §äŒããããšã§ãã
--Independent tables SELECT Name AS InDependentTables FROM sys.tables WHERE object_id NOT IN ( SELECT referenced_object_id FROM sys.foreign_key_columns ) -- Check for parents AND object_id NOT IN ( SELECT parent_object_id FROM sys.foreign_key_columns ) -- Check for Dependents ORDER BY Name -- Tables with dependencies. SELECT DISTINCT OBJECT_NAME(referenced_object_id) AS ParentTable , OBJECT_NAME(parent_object_id) AS DependentTable , OBJECT_NAME(constraint_object_id) AS ForeignKeyName FROM sys.foreign_key_columns ORDER BY ParentTable , DependentTable -- Top level of the pyramid tables. Tables with no parents. SELECT DISTINCT OBJECT_NAME(referenced_object_id) AS TablesWithNoParent FROM sys.foreign_key_columns WHERE referenced_object_id NOT IN ( SELECT parent_object_id FROM sys.foreign_key_columns ) ORDER BY 1 -- Bottom level of the pyramid tables. -- Tables with no dependents. (These are the leaves on a tree.) SELECT DISTINCT OBJECT_NAME(parent_object_id) AS TablesWithNoDependents FROM sys.foreign_key_columns WHERE parent_object_id NOT IN ( SELECT referenced_object_id FROM sys.foreign_key_columns ) ORDER BY 1 -- Tables with both parents and dependents. -- Tables in the middle of the hierarchy SELECT DISTINCT OBJECT_NAME(referenced_object_id) AS MiddleTables FROM sys.foreign_key_columns WHERE referenced_object_id IN ( SELECT parent_object_id FROM sys.foreign_key_columns ) AND parent_object_id NOT IN ( SELECT referenced_object_id FROM sys.foreign_key_columns ) ORDER BY 1; -- in rare cases, you might find a self-referencing dependent table. -- Recursive (self) referencing table dependencies. SELECT DISTINCT OBJECT_NAME(referenced_object_id) AS ParentTable , OBJECT_NAME(parent_object_id) AS ChildTable , OBJECT_NAME(constraint_object_id) AS ForeignKeyName FROM sys.foreign_key_columns WHERE referenced_object_id = parent_object_id ORDER BY 1 , 2;
CTEã䜿çšãã
äŸåé¢ä¿ã®éå±€ãååŸãã3çªç®ã®æ¹æ³ã¯ãååž°CTEã䜿çšããããšã§ãã
-- How to find the hierarchical dependencies -- Solve recursive queries using Common Table Expressions (CTE) WITH TableHierarchy ( ParentTable, DependentTable, Level ) AS ( -- Anchor member definition (First level group to start the process) SELECT DISTINCT CAST(NULL AS INT) AS ParentTable , e.referenced_object_id AS DependentTable , 0 AS Level FROM sys.foreign_key_columns AS e WHERE e.referenced_object_id NOT IN ( SELECT parent_object_id FROM sys.foreign_key_columns ) -- Add filter dependents of only one parent table -- AND Object_Name(e.referenced_object_id) = 'User' UNION ALL -- Recursive member definition (Find all the layers of dependents) SELECT --Distinct e.referenced_object_id AS ParentTable , e.parent_object_id AS DependentTable , Level + 1 FROM sys.foreign_key_columns AS e INNER JOIN TableHierarchy AS d ON ( e.referenced_object_id ) = d.DependentTable ) -- Statement that executes the CTE SELECT DISTINCT OBJECT_NAME(ParentTable) AS ParentTable , OBJECT_NAME(DependentTable) AS DependentTable , Level FROM TableHierarchy ORDER BY Level , ParentTable , DependentTable;
ãããã«
ãããã£ãŠã1ã2æéã§ãäžèšã®ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ãã®æ¹æ³ã䜿çšããŠãããŒã¿ããŒã¹ã®å éšãææ¡ã§ããŸãã翻蚳è 泚ïŒããã¹ãå ã®ãã¹ãŠã®ã¯ãšãªïŒ1ã€ãé€ããããã¹ãå ã«ããŒã¯ãããŠããŸãïŒã¯ãSQL Server 2005 SP3以éã®ãšãã£ã·ã§ã³ã§åäœããŸããããã¹ãã¯ããªãããªã¥ãŒã ããããŸããå¯èœãªéãå·®ãåŒããŠãã¹ïŒæäœãæ§æãã»ãã³ãã£ãã¯ãªã©ïŒãèŠã€ããããšããŸããããäœãã«æ°ãã€ããªãã£ãããããããæ°ã¥ããªãã£ãã®ã§ãPMãæžããŠãã ããã