Ambient Consultingã®dbaããã³SQL Serverããã©ãŒãã³ã¹æé©åã³ã³ãµã«ã¿ã³ããšããŠãåããŠç®ã«ããSQL Serverã€ã³ã¹ã¿ã³ã¹ã®ããã©ãŒãã³ã¹ããã«ããã¯ãåæããå¿
èŠæ§ã«ãã°ãã°ééããŸãã ããã¯å°é£ãªäœæ¥ã«ãªãå ŽåããããŸãã ååãšããŠãã»ãšãã©ã®äŒæ¥ã¯èªç€Ÿã®ããŒã¿ããŒã¹ã«é¢ããããã¥ã¡ã³ããæã£ãŠããŸããã ååšããå Žåãããã¯å€ããªã£ãŠããããæ€çŽ¢ã«æ°æ¥ããããŸãã
ãã®èšäºã§ã¯ãã·ã¹ãã 颿°ãã¹ãã¢ãããã·ãŒãžã£ãããŒãã«ãdmvã䜿çšããŠã¡ã¿ããŒã¿æ
å ±ãæãäžããåºæ¬çãªã¹ã¯ãªããã»ãããå
±æããŸãã äžç·ã«ãç®çã®ã€ã³ã¹ã¿ã³ã¹äžã®ããŒã¿ããŒã¹ã®ãã¹ãŠã®ç§å¯-ãµã€ãºããã¡ã€ã«ã®å ŽæãåãããŒã¿åãããã©ã«ãå€ãããŒãã€ã³ããã¯ã¹ãªã©ã®èšèšãæããã«ããŸãã
GUIã䜿çšããŠãã®æ
å ±ã®äžéšãååŸããããšããããšãããå Žåããããã®ã¹ã¯ãªããã®å©ããåããŠå³åº§ã«ååŸãããæ
å ±éã«é©ãããšã§ãããã
ä»ã®ã¹ã¯ãªãããšåæ§ã«ãéçšç°å¢ã§å®è¡ããåã«ããŸããã¹ãç°å¢ã§ãã¹ãããŸãã
AdventureWorksã pubsãªã©ã®MSãã¹ãããŒã¹ã§å®è¡ããããšããå§ãããŸãã
ããŠãååãªèšèã§ãã¹ã¯ãªããã玹ä»ããŸãããïŒ
ãµãŒããŒã調æ»ããŸã
ãµãŒããŒã«é¢ããæ
å ±ãæäŸããã¯ãšãªããå§ããŸãããã
åºæ¬æ
å ±
ãŸããåºæ¬çãªæ
å ±ãæäŸããããã€ãã®ç°¡åãª
@@颿° ã
æåŸã®åèµ·åãã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;
ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãªã¹ã
ãŸãããµãŒããŒäžã®ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãªã¹ããååŸããŸãã ã©ã®ãµãŒããŒã«ãã4ã€ãŸãã¯5ã€ã®ã·ã¹ãã ããŒã¿ããŒã¹ïŒã¬ããªã±ãŒã·ã§ã³ã䜿çšããå Žåã¯ãmasterãmodelãmsdbãtempdbãããã³distributionïŒãããããšã«æ³šæããŠãã ããã æ¬¡ã®ã¯ãšãªã§ãããã®ããŒã¿ããŒã¹ãé€å€ããããšããå§ãããŸãã SSMSã§ããŒã¿ããŒã¹ã®ãªã¹ãã衚瀺ããã®ã¯éåžžã«ç°¡åã§ããããããã®ã¯ãšãªã¯ããè€éãªã¯ãšãªã®ããã«ãã£ã³ã°ãããã¯ãã«ãªããŸãã
T-SQLã®ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãªã¹ããååŸããæ¹æ³ã¯ããã€ããããŸããã以äžã«ãããã®ããã€ãã瀺ããŸãã åã¡ãœããã¯åæ§ã®çµæãè¿ããŸãããããã€ãã®éãããããŸãã
EXEC sp_helpdb;
æåŸã®ããã¯ã¢ããïŒ
ãããŠïŒ å
ã«é²ãåã«ããã¹ãŠã®é©åãª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ã䜿çšã§ããŸãã
ããŒã¿ããŒã¹ãç ç©¶ããŠããŸã
ããã«è©³ããèŠãŠããã£ã¬ã¯ããªãšdmvã®ããŸããŸãªè¡šçŸã䜿çšããŠããã¹ãŠã®ããŒã¿ããŒã¹å
ã®ãªããžã§ã¯ãã«é¢ããæ
å ±ãåéããæ¹æ³ãèŠãŠã¿ãŸãããã ãã®ã»ã¯ã·ã§ã³ã§æç€ºãããã¯ãšãªã®ã»ãšãã©ã¯1ã€ã®ããŒã¿ããŒã¹ã®ãå
éšãã«ãããããSSMSã§ç®çã®ããŒã¿ããŒã¹ãéžæããããuse databaseã³ãã³ãã䜿çšããããšãå¿ããªãã§ãã ããã ãŸããselect db_nameïŒïŒã䜿çšããŠãã¯ãšãªãå®è¡ãããããŒã¿ããŒã¹ã®ã³ã³ããã¹ããåžžã«èŠãããšãã§ããããšãèŠããŠãããŠãã ããã
sys.objectsã·ã¹ãã ããŒãã«ã¯ãããŒã¿ã¢ãã«ãæ§æãããªããžã§ã¯ãã«é¢ããæ
å ±ãåéããããã®ããŒã®1ã€ã§ãã
以äžã¯ãæ
å ±ãååŸã§ãããªããžã§ã¯ãã®çš®é¡ã®ãªã¹ãã§ãïŒ
MSDNã® sys.objectsã®ããã¥ã¡ã³ããåç
§ïŒ
sys.objects.typeAF =çµ±èšé¢æ°ïŒ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 =å
éšããŒãã«ã
sys.tablesãsys.viewsãªã©ã®ä»ã®ãã£ã¬ã¯ããªãã¥ãŒã¯ãsys.objectsã«ã¢ã¯ã»ã¹ããç¹å®ã®çš®é¡ã®ãªããžã§ã¯ãã«é¢ããæ
å ±ãæäŸããŸãã ãããã®ãã¥ãŒãšOBJECTPROPERTY颿°ã䜿çšãããšãããŒã¿ããŒã¹ã¹ããŒããæ§æããåãªããžã§ã¯ãã«é¢ããèšå€§ãªæ
å ±ãååŸã§ããŸãã
ããŒã¿ããŒã¹ãã¡ã€ã«ã®å Žæ
ã¡ã€ã³ããŒã¿ãã¡ã€ã«ïŒmdfïŒããã©ã³ã¶ã¯ã·ã§ã³ãã°ãã¡ã€ã«ïŒldfïŒãªã©ãéžæããããŒã¿ããŒã¹ã®ç©ççãªå Žæã¯ããããã®ã¯ãšãªã䜿çšããŠååŸã§ããŸãã
EXEC sp_Helpfile;
ããŒãã«
ãã¡ãããSSMSã®ãªããžã§ã¯ããšã¯ã¹ãããŒã©ãŒã«ã¯ãéžæããããŒã¿ããŒã¹å
ã®ããŒãã«ã®å®å
šãªãªã¹ãã衚瀺ãããŸãããGUIã䜿çšããæ
å ±ã®äžéšã¯ãã¹ã¯ãªããã䜿çšãããããå
¥æãå°é£ã§ãã ANSIæšæºã§ã¯INFORMATION_SCHEMAãã¥ãŒãå¿
èŠã§ãããæšæºã®äžéšã§ã¯ãªããªããžã§ã¯ãïŒããªã¬ãŒãæ¡åŒµããã·ãŒãžã£ãªã©ïŒã«é¢ããæ
å ±ã¯æäŸãããªããããSQL Serverã«ã¿ãã°ãã¥ãŒã䜿çšããããšããå§ãããŸãã
EXEC sp_tables;
ããŒãã«å
ã®ãšã³ããªã®æ°
ããŒãã«ã«ã€ããŠäœãç¥ããªãå Žåããã¹ãŠã®ããŒãã«ã¯çããéèŠã§ãã ããŒãã«ã«ã€ããŠåŠç¿ããã°ããã»ã©ãããŒãã«ãæ¡ä»¶ä»ãã§éèŠåºŠãé«ããªããæ¡ä»¶ä»ãã§éèŠåºŠãäœããªããŸãã äžè¬ã«ãèšå€§ãªæ°ã®ã¬ã³ãŒããæã€ããŒãã«ã¯ãããã©ãŒãã³ã¹ã«æ·±å»ãªåœ±é¿ãäžããããšããããããŸãã
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
ã¬ã³ãŒãã®æ°ãååŸããæéã®æ¹æ³-ã¯ã©ã¹ã¿ãŒã€ã³ããã¯ã¹
以åã®ãã¹ãŠã®ã¡ãœããã¯COUNTïŒ*ïŒã䜿çšããŠããŸããããããŒãã«ã«50äžä»¶ãè¶
ããã¬ã³ãŒããããå Žåã¯ãåŸã
ã«æ©èœããŸãã
ããŒãã«å
ã®ã¬ã³ãŒãæ°ãååŸããæéã®æ¹æ³ã¯ãã¯ã©ã¹ã¿ãŒã€ã³ããã¯ã¹ãŸãã¯ããŒãå
ã®ã¬ã³ãŒãæ°ãååŸããããšã§ãã ãã®æ¹æ³ã¯æéã§ãããæ
å ±ã®æŽæ°ã«å°ãæéãããããããã€ã³ããã¯ã¹ãšã³ããªã®æ°ãšããŒãã«å
ã®å®éã®è¡æ°ã«é¢ããæ
å ±ã¯äžèŽããªãå¯èœæ§ããããšMSãèšã£ãŠããããšãèŠããŠãããŠãã ããã ã»ãšãã©ã®å Žåããããã®å€ã¯åãããéåžžã«è¿ãå€ã§ãããããã«åãå€ã«ãªããŸãã
ããŒãã®æ€çŽ¢ïŒã¯ã©ã¹ã¿ãŒåã€ã³ããã¯ã¹ã®ãªãããŒãã«ïŒ
ããŒãã®æäœã¯ãããŒã¿ããŒã¹ã§ã¯ãªããã©ãããã¡ã€ã«ã®æäœã«äŒŒãŠããŸãã ã¯ãšãªã®å®è¡æã«ããŒãã«å
šäœã®ã¹ãã£ã³ãä¿èšŒããå Žåã¯ãããŒãã䜿çšããŸãã éåžžããã¹ãŠã®ããŒãããŒãã«ã«äž»ããŒã远å ããããšããå§ãããŸãã
ããŒãã«å
ã®ã¢ã¯ãã£ããã£ãåŠçããŸã
ããã©ãŒãã³ã¹ã®æé©åã«åãçµããšããã©ã®ããŒãã«ãã¢ã¯ãã£ãã«èªã¿åãããã©ã®ããŒãã«ãã¢ã¯ãã£ãã«æžã蟌ãŸããããç¥ãããšãéåžžã«éèŠã§ãã åã«ãããŒãã«ã«ããã¬ã³ãŒãã®æ°ã確èªããŸããããä»åºŠã¯ã¬ã³ãŒãã®æžã蟌ã¿ãšèªã¿åãã®é »åºŠã確èªããŸãã
dmvããã®ãã®æ
å ±ã¯ãSQL Serverãåèµ·åãããã³ã«æ¶å»ãããããšã«æ³šæããŠãã ããã ãµãŒããŒã®å®è¡æéãé·ãã»ã©ãçµ±èšã®ä¿¡é Œæ§ãé«ããªããŸãã 1é±éã«åéãããçµ±èšãããã30æ¥éã«åéãããçµ±èšã®æ¹ãã¯ããã«èªä¿¡ããããŸãã
ãã®ã¯ãšãªã®ããé«åºŠãªããŒãžã§ã³ã¯ããµãŒããŒäžã®ãã¹ãŠã®ããŒã¿ããŒã¹ã®ãã¹ãŠã®ããŒãã«ã«é¢ããæ
å ±ãåéããã«ãŒãœã«ã§è¡šãããŸãã äžè¬ã«ãç§ã¯ã«ãŒãœã«ã®ããã©ãŒãã³ã¹ãäœããããã«ãŒãœã«ã®ãã¡ã³ã§ã¯ãããŸããããç°ãªãããŒã¿ããŒã¹ãç§»åããããšã¯ã«ãŒãœã«ã«ãšã£ãŠçŽ æŽãããã¢ããªã±ãŒã·ã§ã³ã§ãã
翻蚳è
泚 ïŒãªã¹ãã«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'
å矩èª
ç§ã®ãã£ãªã¢ã®äžã§äœåºŠããã¯ãšãªãã¢ã¯ã»ã¹ããŠããããŒãã«ãçè§£ã§ããªãç¶æ³ã«ééããŸããã åçŽãª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'
ã¹ãã¢ãããã·ãŒãžã£
ã¹ãã¢ãããã·ãŒãžã£ã¯ãåäžã®å®è¡ãã©ã³ã«ã³ã³ãã€ã«ãããã¹ã¯ãªããã®ã°ã«ãŒãã§ãã ã«ã¿ãã°è¡šçŸã䜿çšããŠãäœæãããKPãå®è¡ãããã¢ã¯ã·ã§ã³ãããã³ããŒãã«ã決å®ã§ããŸãã
WHEREã«åçŽãªæ¡ä»¶ã远å ãããšãããšãã°INSERTæäœãå®è¡ããã¹ãã¢ãããã·ãŒãžã£ã«é¢ããæ
å ±ã®ã¿ãååŸã§ããŸãã
WHERE o.[type] = 'P'
WHEREã®æ¡ä»¶ãå°ã倿Žããããšã«ãããç¹å®ã®ããŒãã«ãæŽæ°ãåé€ããŸãã¯ã¢ã¯ã»ã¹ããããã»ããµãŒã«é¢ããæ
å ±ãåéã§ããŸãã
æ©èœ
颿°ã¯SQL Serverã«æ ŒçŽãããããã€ãã®ãã©ã¡ãŒã¿ãŒãååŸããŠç¹å®ã®ã¢ã¯ã·ã§ã³ãŸãã¯èšç®ãå®è¡ããçµæãè¿ããŸãã
ããªã¬ãŒ
ããªã¬ãŒã¯ããã®ããªã¬ãŒãå±ããããŒãã«ã§ç¹å®ã®ã¢ã¯ã·ã§ã³ã«å¿ããŠå®è¡ãããäžçš®ã®ã¹ãã¢ãããã·ãŒãžã£ã§ãã ããšãã°ãINSERTãUPDATEãããã³DELETEããªã¬ãŒãäœæã§ããŸãã
ãã§ãã¯å¶é
CHECKå¶çŽã¯ãããŒã¿ããŒã¹ã«ããžãã¹ããžãã¯ãå®è£
ããè¯ãæ¹æ³ã§ãã ããšãã°ãäžéšã®ãã£ãŒã«ãã¯æ£ãŸãã¯è² ã§ããå¿
èŠããããŸãããŸãã¯ã1ã€ã®åã®æ¥ä»ãä»ã®åã®æ¥ä»ããã倧ããå¿
èŠããããŸãã
ããŒã¿ã¢ãã«ã®è©³çް
以åã¯ãããŒã¿ããŒã¹ãæ§æãããªããžã§ã¯ãã®ããããã¬ãã«ãã®ã¢ã€ãã¢ãæäŸããã¹ã¯ãªããã䜿çšããŸãããã«ã©ã ããããã®ããŒã¿åãäžããããããã©ã«ãå€ãååšããïŒååšããã¹ãïŒããŒããã³ã€ã³ããã¯ã¹ãªã©ãããŒãã«ã«é¢ããããŒã¿ãããã«ååŸããå¿
èŠãããå ŽåããããŸãããã®ã»ã¯ã·ã§ã³ã§æç€ºãããã¯ãšãªã¯ãæ¢åã®ããŒã¿ã¢ãã«ã®ãšã³ãžãã¢ãªã³ã°ãã»ãŒéã«ããææ®µãæäŸããŸããå
次ã®ã¹ã¯ãªããã¯ãããŒã¿ããŒã¹å
šäœã®ããŒãã«ãšåã«ã€ããŠèª¬æããŠããŸãããã®ã¯ãšãªã®çµæã¯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 ,
ããã©ã«ãå€
ããã©ã«ãå€ã¯ãæ¿å
¥äžã«åã«å€ãæå®ãããŠããªãå Žåã«ä¿åãããå€ã§ããå€ãã®å Žåãæ¥ä»ãæ ŒçŽããåã«ã¯get_dateïŒïŒãèšå®ãããŸãããŸããç£æ»ã«ã¯ããã©ã«ãå€ã䜿çšãããŸããç¹å®ã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŠãŒã¶ãŒã¢ã«ãŠã³ããå€å¥ããããã«system_userãæ¿å
¥ãããŸãã
èšç®å
èšç®åãšã¯ãååãšããŠãããŒãã«ã®ä»ã®åã®å€ã«åºã¥ããŠå€ãèšç®ãããåã§ãã
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'
æ¬ èœããŠããã€ã³ããã¯ã¹ã¯äœã§ããïŒ
SQL Serverã¯ã以åã«å®è¡ãããã¯ãšãªã«åºã¥ããŠãããŒã¿ããŒã¹å
ã®æ¬ èœããŠããã€ã³ããã¯ã¹ã«é¢ããæ
å ±ãæäŸããŸããäœæãããšãçç£æ§ãåäžããŸããç²ç®çã«ãããã®ã€ã³ããã¯ã¹ã远å ããªãã§ãã ãããææ¡ãããåã€ã³ããã¯ã¹ã«ã€ããŠèããŸããããšãã°ãå«ãŸããŠããåã䜿çšãããšãããªã¥ãŒã ã倧å¹
ã«å¢å ããã®ã§äŸ¿å©ã§ãã
å€éšããŒ
å€éšããŒã¯ããŒãã«éã®é¢ä¿ãå®çŸ©ããåç
§æŽåæ§ãå¶åŸ¡ããããã«äœ¿çšãããŸãããšã³ãã£ãã£é¢ä¿å³ã§ã¯ãããŒãã«éã®ç·ã¯å€éšããŒã瀺ããŸãã
å€éšããŒã€ã³ããã¯ã¹ããããŸãã
å
ã»ã©èšã£ãããã«ãå€éšããŒã«å«ãŸããåã«ã€ã³ããã¯ã¹ãæ§ç¯ããããšãæãŸããã§ããããã«ãããéåžžã¯å€éšããŒã§çµåãããŠããããŒãã«ã®çµåã倧å¹
ã«é«éåãããŸãããããã®ã€ã³ããã¯ã¹ã¯ãå逿äœã倧å¹
ã«é«éåããŸãããã®ãããªã€ã³ããã¯ã¹ããªãå ŽåãSQL Serverã¯ããæåã®ãããŒãã«ããã¬ã³ãŒããåé€ããããã³ã«ããªã³ã¯ãããããŒãã«ã®ããŒãã«ã¹ãã£ã³ãå®è¡ããŸãã
äŸåé¢ä¿
ç¶æ³ã«ãã£ãŠç°ãªããŸã...åã«ãã®è¡šçŸãèããããšããããšæããŸããããŒã¿ããŒã¹ã®äŸåé¢ä¿ãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ãããããã®3ã€ã®ç°ãªãæ¹æ³ãæ€èšããŸããæåã®æ¹æ³ã¯ãsp_msdependeciesã¹ãã¢ãããã·ãŒãžã£ã䜿çšããããšã§ãã2çªç®ã¯ãå€éšããŒã«é¢é£ä»ããããã·ã¹ãã ããŒãã«ã§ãã3çªç®ã®æ¹æ³ã¯ãCTEã䜿çšããããšã§ããsp_msdependencies
Sp_msdependenciesã¯ãè€éãªããŒãã«ã®çžäºäŸåé¢ä¿ã®è§£æã«éåžžã«åœ¹ç«ã€ããã¥ã¡ã³ãåãããŠããªãã¹ãã¢ãããã·ãŒãžã£ã§ãã EXEC sp_msdependencies '?'
sp_msdependenciesã䜿çšããŠãã¹ãŠã®äŸåé¢ä¿ãå°åºãããšãTypeãObjNameãOwnerïŒSchemaïŒãSequenceã®4ã€ã®åãåŸãããŸããã·ãŒã±ã³ã¹çªå·ïŒã·ãŒã±ã³ã¹ïŒã«æ³šæããŠãã ãã-1ããå§ãŸããé æ¬¡å¢å ããŸããã·ãŒã±ã³ã¹ã¯ãäŸåé¢ä¿ã®ãã·ãªã¢ã«çªå·ãã§ããéåžžã«å€§ããªããŒã¿ããŒã¹ã§ã¢ãŒã«ã€ããŸãã¯åé€ãå®è¡ããå¿
èŠããããšãã«ããã®æ¹æ³ãæ°å䜿çšããŸãããããŒãã«ã®äŸåé¢ä¿ãããã£ãŠããå ŽåããããŒãããããããããŸããããŒã¿ãã¢ãŒã«ã€ããŸãã¯åé€ããã«ã¯ãã©ã®é åºã§å¿
èŠã§ããã[ã·ãŒã±ã³ã¹]åã®å€ãæãé«ãããŒãã«ããéå§ããéã®é åºïŒå€§ãããã®ããå°ãããã®ãžïŒã§ç§»åããŸããåãSequenceå€ãæã€ããŒãã«ã¯åæã«åé€ã§ããŸãããã®ã¡ãœããã¯å€éšããŒã®å¶éã«éåãããå¶çŽãäžæçã«åé€ããã³åæ§ç¯ããã«ã¬ã³ãŒãã転é/åé€ã§ããŸãã EXEC sp_msdependencies NULL
SSMSã§ã¯ãããŒãã«åãå³ã¯ãªãã¯ãããšããäŸåé¢ä¿ã®è¡šç€ºããšãTABLENAMEã«äŸåãããªããžã§ã¯ãããéžæã§ããŸãã
ãã®æ
å ±ã¯æ¬¡ã®æ¹æ³ã§ãååŸã§ããŸãã
SSMSã®äŸåé¢ä¿ã衚瀺ãããŠã£ã³ããŠã§ã[TABLENAMEã«äŸåãããªããžã§ã¯ã]ãéžæãããã¹ãŠã®ã¬ãã«ãå±éãããšã次ã®
ããã«è¡šç€ºãããŸããsp_msdependenciesã«ãã£ãŠåãæ
å ±ãè¿ãããŸãã
ãŸããSSMSã§ã¯ãéžæããããŒãã«ãäŸåãããªããžã§ã¯ãã確èªã§ããŸãã
msdependenciesã䜿çšããæ¬¡ã®ã¯ãšãªã¯ãåãæ
å ±ãè¿ããŸãã
ããŒãã«ã®äŸåé¢ä¿ã®ãªã¹ããå¿
èŠãªå Žåã¯ãäžæããŒãã«ã䜿çšããŠãã¿ã€ãããšã«äŸåé¢ä¿ããã£ã«ã¿ãªã³ã°ã§ããŸãã CREATE TABLE
ã·ã¹ãã ã«ã¿ãã°ãã¥ãŒãžã®ãªã¯ãšã¹ã
ããŒã¿ããŒã¹ã®äŸåé¢ä¿ãããªããŒã¹ãšã³ãžãã¢ãªã³ã°ããã2çªç®ã®æ¹æ³ã¯ãå€éšããŒã«é¢é£ä»ãããããã£ã¬ã¯ããªã·ã¹ãã 衚çŸãç
§äŒããããšã§ãã
CTEã䜿çšãã
äŸåé¢ä¿ã®éå±€ãååŸãã3çªç®ã®æ¹æ³ã¯ãååž°CTEã䜿çšããããšã§ãã
ãããã«
ãããã£ãŠã1ã2æéã§ãäžèšã®ããªããŒã¹ãšã³ãžãã¢ãªã³ã°ãã®æ¹æ³ã䜿çšããŠãããŒã¿ããŒã¹ã®å
éšãææ¡ã§ããŸãã翻蚳è
泚ïŒããã¹ãå
ã®ãã¹ãŠã®ã¯ãšãªïŒ1ã€ãé€ããããã¹ãå
ã«ããŒã¯ãããŠããŸãïŒã¯ãSQL Server 2005 SP3以éã®ãšãã£ã·ã§ã³ã§åäœããŸããããã¹ãã¯ããªãããªã¥ãŒã ããããŸããå¯èœãªéãå·®ãåŒããŠãã¹ïŒæäœãæ§æãã»ãã³ãã£ãã¯ãªã©ïŒãèŠã€ããããšããŸããããäœãã«æ°ãã€ããªãã£ãããããããæ°ã¥ããªãã£ãã®ã§ãPMãæžããŠãã ããã