• 运维脚本--快速了解数据库信息


    1. --  表结构查询  
    2. SELECT     
    3.     表名       = case when a.colorder=1 then d.name else '' end,    
    4.     表说明     = case when a.colorder=1 then isnull(f.value,'') else '' end,    
    5.     字段序号   = a.colorder,    
    6.     字段名     = a.name,    
    7.     标识       = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,    
    8.     主键       = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (    
    9.                      SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '√' else '' end,    
    10.     类型       = b.name,    
    11.     占用字节数 = a.length,    
    12.     长度       = COLUMNPROPERTY(a.id,a.name,'PRECISION'),    
    13.     小数位数   = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),    
    14.     允许空     = case when a.isnullable=1 then '√'else '' end,    
    15.     默认值     = isnull(e.text,''),    
    16.     字段说明   = isnull(g.[value],'')    
    17. FROM syscolumns a left join systypes b     
    18. on a.xusertype=b.xusertype    
    19. inner join sysobjects d     
    20. on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'    
    21. left join syscomments e     
    22. on a.cdefault=e.id    
    23. left join sys.extended_properties   g     
    24. on a.id=g.major_id and a.colid=g.minor_id      
    25. left join sys.extended_properties f    
    26. on d.id=f.major_id and f.minor_id=0    
    27. where d.name='tableName'    --如果只查询指定表,加上此条件    
    28. order by a.id,a.colorder   
    [sql] view plain copy
     
    1. --各字段元数据(数据字典,MSSQL 2012及以上版本)  
    2. select * from sys.dm_exec_describe_first_result_set (N'SELECT * FROM dbo.TabName', NULL, 0)  
    3. GO  
    [sql] view plain copy
     
    1. --查看数据库中所有外键  
    2. select oMain.name  AS  [主表名称]  
    3. ,oSub.name  AS  [子表名称]  
    4. ,fk.name AS  [外键名称]  
    5. ,MainCol.name AS [主表列名]  
    6. ,SubCol.name AS [子表列名]  
    7. from sys.foreign_keys fk    
    8. JOIN sys.all_objects oSub  ON (fk.parent_object_id = oSub.object_id)  
    9. JOIN sys.all_objects oMain ON (fk.referenced_object_id = oMain.object_id)  
    10. JOIN sys.foreign_key_columns fkCols ON (fk.object_id = fkCols.constraint_object_id)  
    11. JOIN sys.columns SubCol ON (oSub.object_id = SubCol.object_id    
    12.     AND fkCols.parent_column_id = SubCol.column_id)  
    13. JOIN sys.columns MainCol ON (oMain.object_id = MainCol.object_id    
    14.     AND fkCols.referenced_column_id = MainCol.column_id)  
    [sql] view plain copy
     
    1. --(导出扩展属性脚本)  
    2. SELECT 表名 = d.name,字段名 = a.name, 字段说明 = isnull(g.[value],'')   
    3. ,'EXEC sys.sp_addextendedproperty @name=N''MS_Description'', @value=N'''+CONVERT(VARCHAR(MAX),g.[value])  
    4. +''',@level0type=N''SCHEMA'',@level0name=N''dbo'',@level1type=N''TABLE'',@level1name=N'''+CONVERT(VARCHAR(MAX),d.name)  
    5. +''',@level2type=N''COLUMN'',@level2name=N'''+CONVERT(VARCHAR(MAX),a.name)+''''   
    6. FROM syscolumns a left join systypes b on a.xusertype=b.xusertype      
    7. inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'      
    8. left join syscomments e on a.cdefault=e.id      
    9. left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id   
    10. WHERE g.[value] IS NOT NULL  
    11. ORDER BY d.name,a.name  
    [sql] view plain copy
     
    1. --当前数据库表大小及行数  
    2. SELECT SCHEMA_NAME(tbl.schema_id) [Schema],tbl.name AS [TableName],  
    3. (CAST(ISNULL((select 8 * SUM(CASE WHEN a.type <> 1 THEN a.used_pages WHEN p.index_id < 2 THEN a.data_pages ELSE 0 END)   
    4. FROM sys.indexes as i  
    5. JOIN sys.partitions as p ON p.object_id = i.object_id and p.index_id = i.index_id  
    6. JOIN sys.allocation_units as a ON a.container_id = p.partition_id  
    7. where i.object_id = tbl.object_id),0.0)*1.0/1024 AS DECIMAL(18,3))) AS [DataSpaceUsed(MB)],SI.[rows]  
    8. FROM sys.tables AS tbl LEFT JOIN sys.sysindexes si ON tbl.object_id=si.id AND si.indid IN(0,1)  
    9. ORDER BY [Schema],[DataSpaceUsed(MB)] DESC  



    [sql] view plain copy
     
    1. --  查看表中的自增列是否为主键  
    2. SELECT  
    3. 表名= D.NAME,   
    4. 列名= A.NAME,  
    5. 是否自增= CASE WHEN COLUMNPROPERTY( A.ID,A.NAME, 'ISIDENTITY ')=1 THEN '√'ELSE '' END,  
    6. 主键= CASE WHEN EXISTS(SELECT 1 FROM SYSOBJECTS WHERE XTYPE= 'PK ' AND PARENT_OBJ=A.ID AND NAME IN (  
    7.     SELECT NAME FROM SYSINDEXES WHERE INDID IN(  
    8.     SELECT INDID FROM SYSINDEXKEYS WHERE ID = A.ID AND COLID=A.COLID))) THEN '√' ELSE '' END  
    9. FROM SYSCOLUMNS A  
    10. LEFT JOIN SYSTYPES B ON A.XUSERTYPE=B.XUSERTYPE  
    11. INNER JOIN SYSOBJECTS D ON A.ID=D.ID AND D.XTYPE= 'U' AND D.NAME <> 'DTPROPERTIES '  
    12. where  COLUMNPROPERTY( A.ID,A.NAME, 'ISIDENTITY ')=1  
    [sql] view plain copy
     
    1. --查看依赖此对象的子级对象(如字表/驶入/触发器等)  
    2. SELECT distinct so.name   
    3. FROM syscomments sc   
    4. INNER JOIN sysobjects so ON sc.id = so.id   
    5. WHERE charindex('OSAccounts', text) > 0  
    6.   
    7. EXEC sp_depends @objname = N'dbo.OSAccounts' ;  
    8. EXEC sp_MSdependencies N'dbo.OSAccounts', null, 1315327  
    9.   
    10. --查看此对象依赖的父级对象  
    11. EXEC sp_MSdependencies N'dbo.OSAccounts', null, 1053183  
    [sql] view plain copy
     
    1. --各表对象下的其他对象  
    2. select t1.[object_id],t1.[type],t1.name,t2.[object_id],t2.[type],t2.name  
    3. from sys.objects t1  
    4. inner join sys.objects t2 on t1.[object_id]=t2.parent_object_id  
    5. order by t1.[type],t1.name,t2.[type],t2.name  
    6.   
    7. select t1.id,t1.xtype,t1.name,t2.id,t2.xtype,t2.name  
    8. from sys.sysobjects t1  
    9. inner join sys.sysobjects t2 on t1.id=t2.parent_obj  
    10. order by t1.xtype,t1.name,t2.xtype,t2.name  

    --唯一键约束

    [sql] view plain copy
     
    1. SELECT tbl.name tab,i.name AS [Name]  
    2. FROM sys.tables AS tbl  
    3. INNER JOIN sys.indexes AS i ON (i.index_id > 0 and i.is_hypothetical = 0) AND (i.object_id=tbl.object_id)  
    4. WHERE (i.is_primary_key + 2*i.is_unique_constraint=2) and SCHEMA_NAME(tbl.schema_id)='dbo'  
    5. ORDER BY [Name] ASC  
    [sql] view plain copy
     
    1. --查看数据库约束  
    2. SELECT OBJECT_NAME(parent_object_id) as TableName,name,definition  
    3. FROM sys.default_constraints ORDER BY TableName,name  
    [sql] view plain copy
     
    1. --表各列约束  
    2. select OBJECT_NAME(t2.object_id) as TabName,t2.name as ColumnName,t1.name as [Constraint]  
    3. from sys.default_constraints t1  
    4. inner join sys.columns t2   
    5. on t1.parent_object_id=t2.object_id and t1.parent_column_id=t2.column_id  
    6. order by TabName,ColumnName,[Constraint]  



    [sql] view plain copy
     
    1. --  当前数据库文件增长设置情况  
    2. SELECT Name, FileName  
    3. CAST((Size * 8 / 1024) AS varchar(10)) + 'MB' AS FileSize  
    4. , MaxSize = CASE MaxSize WHEN -1 THEN 'Unlimited' ELSE CAST((Maxsize / 128) AS varchar(10)) + 'MB' END   
    5. FROM sys.sysfiles;  
    6.   
    7. --  所有数据库文件增长设置情况  
    8. select DB_NAME(database_id) as dbName,file_id,(size*8/1024)  as [size(mb)]  
    9. ,case when is_percent_growth = 1 then '10%' else CONVERT(varchar(10),growth*8/1024)+'M' end as growth  
    10. ,type_desc,physical_name   
    11. from sys.master_files   
    12. where state = 0 --and database_id=DB_id()  



    [sql] view plain copy
     
    1. --数据库的一些关键属性  
    2. SELECT db.[name] AS [Database Name], db.recovery_model_desc AS [Recovery Model],    
    3. db.log_reuse_wait_desc AS [Log Reuse Wait Description],    
    4. ls.cntr_value AS [Log Size (KB)], lu.cntr_value AS [Log Used (KB)],    
    5. CAST(CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)AS DECIMAL(18,2)) *    
    6. 100 AS [Log Used %], db.[compatibility_level] AS [DB Compatibility Level],    
    7. db.page_verify_option_desc AS [Page Verify Option], db.is_auto_create_stats_on,    
    8. db.is_auto_update_stats_on, db.is_auto_update_stats_async_on,    
    9. db.is_parameterization_forced,    
    10. db.snapshot_isolation_state_desc, db.is_read_committed_snapshot_on,    
    11. is_auto_shrink_on, is_auto_close_on    
    12. FROM sys.databases AS db WITH (NOLOCK)    
    13. INNER JOIN sys.dm_os_performance_counters AS lu WITH (NOLOCK)    
    14. ON db.name = lu.instance_name    
    15. INNER JOIN sys.dm_os_performance_counters AS ls WITH (NOLOCK)    
    16. ON db.name = ls.instance_name    
    17. WHERE lu.counter_name LIKE N'Log File(s) Used Size (KB)%'    
    18. AND ls.counter_name LIKE N'Log File(s) Size (KB)%'    
    19. AND ls.cntr_value > 0 OPTION (RECOMPILE);    
    [sql] view plain copy
     
    1. --最近一周内数据库备份情况  
    2. SELECT user_name AS [User]  
    3. ,server_name AS [Server]  
    4. ,database_name AS [Database]  
    5. ,recovery_model AS RecoveryModel   
    6. ,case type when 'D' then '数据库'  
    7.     when 'I' then '差异数据库'  
    8.     when 'L' then '日志'  
    9.     when 'F' then '文件或文件组'  
    10.     when 'G' then '差异文件'  
    11.     when 'P' then '部分'  
    12.     when 'Q' then '差异部分' else type end as [backupType]  
    13. ,convert(numeric(10,2),backup_size/1024/1024) as [Size(M)]  
    14. ,backup_start_date AS backupStartTime  
    15. ,backup_finish_date as backupFinishTime  
    16. ,name   
    17. ,expiration_date   
    18. from msdb.dbo.backupset   
    19. where backup_start_date >= DATEADD(D,-7,GETDATE())  
    [sql] view plain copy
     
    1. --  作业启用情况和所有者  
    2. select a.job_id,a.name,a.enabled,b.name  
    3. from msdb.dbo.sysjobs a  
    4. inner join master.sys.syslogins b on a.owner_sid=b.sid and a.owner_sid<>'0x01'  
    5. order by a.name  
    6.   
    7. --  更改作业所有者  
    8. EXEC msdb.dbo.sp_update_job @job_id=N'job_id', @owner_login_name=N'sa'  



    [sql] view plain copy
     
    1. --  索引 主键/类型/列 情况  
    2. ;with tb as(  
    3. SELECT tbl.name AS TableName,i.name AS IndexName,clmns.name AS ColumName,i.is_primary_key AS isPrimaryKey,i.type_desc  
    4. FROM sys.tables AS tbl    
    5. INNER JOIN sys.indexes AS i ON (i.index_id > 0 and i.is_hypothetical = 0) AND (i.object_id=tbl.object_id)    
    6. INNER JOIN sys.index_columns AS ic ON (ic.column_id > 0     
    7.     AND (ic.key_ordinal > 0 or ic.partition_ordinal = 0 or ic.is_included_column != 0))     
    8.     AND (ic.index_id=CAST(i.index_id AS int) AND ic.object_id=i.object_id)    
    9. INNER JOIN sys.columns AS clmns ON clmns.object_id = ic.object_id and clmns.column_id = ic.column_id    
    10. WHERE SCHEMA_NAME(tbl.schema_id) = N'dbo'  
    11. )  
    12. SELECT DISTINCT TableName,IndexName,isPrimaryKey,type_desc  
    13. ,STUFF((SELECT ','+ColumName FROM tb B WHERE A.TableName=B.TableName AND A.IndexName=B.IndexName FOR XML PATH('')),1,1,'') AS ColumName      
    14. FROM tb A ORDER BY TableName,IndexName,isPrimaryKey,type_desc  
    [sql] view plain copy
     
    1. --表主键对应的列   
    2. SELECT OBJECT_NAME(C.id) AS TAB,B.name,A.name AS PrimaryKey ,E.type_desc,fill_factor    
    3. FROM SYSCOLUMNS A,SYSOBJECTS B,SYSINDEXES C,SYSINDEXKEYS D , SYS.INDEXES E    
    4. WHERE B.xtype = 'PK'      
    5. AND B.parent_obj = A.id       
    6. AND C.id = A.id       
    7. AND B.name = C.name       
    8. AND D.id = A.id       
    9. AND D.indid = C.indid      
    10. AND A.colid = D.colid    
    11. AND B.name=E.name    
    12. ORDER BY TAB,B.name,PrimaryKey   
    13.   
    14.   
    15. SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE   
    16. WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME),'ISPRIMARYKEY')=1   
    17. --AND TABLE_NAME='TABLE_NAME'    
    [sql] view plain copy
     
    1. --所有表索引对应的键列和包含列  
    2. SELECT OBJECT_NAME(t1.id) as tab,t1.name  
    3. ,STUFF((SELECT ','+t3.name FROM sys.sysindexkeys t2,sys.syscolumns t3   
    4.     WHERE t1.indid=t2.indid and t1.id=t2.id and t2.id=t3.id and t2.colid=t3.colid and t2.keyno <> 0  
    5.     FOR XML PATH('')),1,1,'') AS IndexCols  
    6. ,STUFF((SELECT ','+t3.name FROM sys.sysindexkeys t2,sys.syscolumns t3   
    7.     WHERE t1.indid=t2.indid and t1.id=t2.id and t2.id=t3.id and t2.colid=t3.colid and t2.keyno = 0  
    8.     FOR XML PATH('')),1,1,'') AS IncludeCols  
    9. FROM sys.sysindexes t1   
    10. WHERE t1.root is not null  
    11. AND EXISTS(SELECT * FROM sys.tables t4 WHERE t1.id=t4.object_id)  
    12. ORDER BY tab,IndexCols  
    [sql] view plain copy
     
    1. --  查看表分区情况  
    2. select OBJECT_NAME(object_id) as tab,COUNT(partition_number) as part   
    3. from sys.partitions   
    4. where index_id in(0,1)  
    5. and OBJECT_NAME(object_id) not like 'conflict%'  
    6. and OBJECT_NAME(object_id) not like 'sys%'  
    7. group by object_id order by tab  



    [sql] view plain copy
     
    1. --  查看表备注信息  
    2. select distinct   
    3.  表名 = case when a.colorder=1 then d.name else '' end  
    4. ,表说明 = case when a.colorder=1 then isnull(f.value,'') else '' end  
    5. from syscolumns a   
    6. inner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'   
    7. inner join sys.extended_properties f  on d.id=f.major_id  
    8. where f.minor_id=0   
    9. --and CHARINDEX('',convert(varchar(max),f.value))<>0   
    [sql] view plain copy
     
    1. --  查看表中各列的属性及创建扩展属性脚本(默认架构dbo)  
    2. select o.name,c.name,p.name,p.value  
    3. ,N'EXEC sys.sp_addextendedproperty @name=N'''+p.name+ N''', @value=N'''+convert(nvarchar(4000),p.value)  
    4. +N''' , @level0type=N''SCHEMA'',@level0name=N''dbo'', @level1type=N''TABLE'',@level1name=N'''  
    5. +o.name+ N''', @level2type=N''COLUMN'',@level2name=N'''+c.name+ N'''' as script_addextendedproperty  
    6. from sys.sysobjects o   
    7. inner join sys.syscolumns c on o.id = c.id  
    8. inner join sys.extended_properties p on c.id=p.major_id and c.colid=p.minor_id     
    9. where o.xtype = N'U' --and o.name = 'tableName'  



    [sql] view plain copy
     
      1. -- 查看对象定义脚本    
      2. exec sp_helptext 'object_name'    
      3.     
      4. SELECT * from INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION' AND ROUTINE_NAME=''    
      5. SELECT * from INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME=''    
      6. SELECT * from sys.sql_modules M WHERE EXISTS(SELECT * from sys.triggers T WHERE M.object_id=T.object_id)  
      7.   
      8. SELECT o.name,o.type,o.create_date,o.modify_date,sm.definition    
      9. FROM sys.sql_modules sm inner join sys.objects o on sm.object_id=o.object_id    
      10. ORDER BY o.type,o.name    
      11.     
      12. SELECT * from sys.sql_modules     
      13. SELECT * from sys.all_sql_modules     
      14. SELECT * from sys.system_sql_modules     
  • 相关阅读:
    02-Node.js学习笔记-系统模块fs文件操作
    01-Node.js学习笔记-模块成员的导出导入
    Dom对象与jQuery对象的互转
    JDBC02----JDBC执行CURD操作
    JDBC00-----学习说明
    JDBC01-----JDBC的基本使用
    spring16-----XML命名空间和Spring配置文件中的头
    30 . (Java)面向对象编程六大基本原则
    spring15----AOP之通知顺序
    spring14-----AOP之通知参数
  • 原文地址:https://www.cnblogs.com/gered/p/9052375.html
Copyright © 2020-2023  润新知