楼主: Cherish_j_wang

[精华] MSSQL DBA 精华总结[处理对象名称中特殊字符]

[复制链接]
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
71#
 楼主| 发表于 2012-3-28 21:55 | 只看该作者
MSSQL DBA 精华总结
之查询使用了某个关键字的对象
背景
在MSSQL DBA平时的工作中,经常会遇到下面的Case:
1.        请帮忙查看使用到表(或者对象)XXX的数据库对象有哪些?
2.        请帮忙查看UPDATE/DELETE/INSERT表(或者对象)XXX的数据库对象有哪些?
3.        查看有哪些对象引用到对象XXX?
可能开始的时候,我们遇到这样需求的时候,会不知所措,使用下面的脚本,可以很轻松的解决这个问题。
脚本
  1. use master
  2. GO
  3. SET NOCOUNT ON

  4. --===========public variables
  5. declare
  6.         @database_name sysname
  7.         , @object_type sysname
  8.         , @Search_key nvarchar(2000)
  9. ;
  10. select
  11.         @database_name        = 'test'                        -- NULL:all databases;
  12.         , @object_type        = 'V'                                -- NULL:all object_name types;P=proc,V=view,FN/TF/IF=Function
  13.         , @Search_key = N'Test'     -- the search content you wanted
  14. ;
  15.        

  16. IF object_ID('tempdb.dbo.#temp','u') IS NOT NULL
  17.         DROP TABLE #temp

  18. CREATE TABLE #temp(
  19.         database_name        sysname NULl,
  20.         schema_name                sysname NULL,
  21.         object_name                sysname NULL,
  22.         object_type                sysname NULL,
  23.         create_date                datetime NULL
  24.         ,modify_date        datetime NULL
  25. )
  26. ;

  27. --===========private variables
  28. DECLARE
  29.         @sql                nvarchar(2000)--because sp_msforeachdb support nvarchar(2000) only
  30. ;

  31. SELECT
  32.         @sql = N'
  33. USE [?]
  34. -- USE [pubs] for example
  35. RAISERROR(N''Search on database: ?'', 10, 1) WITH NOWAIT
  36. INSERT #temp
  37. SELECT DB_NAME()
  38.                 , schema_name(o.schema_id)
  39.                 , O.name
  40.                 , O.type
  41.                 , O.create_date
  42.                 , O.modify_date
  43. FROM sys.objects O WITH(NOLOCK)
  44.         INNER JOIN sys.sql_modules C WITH(NOLOCK)
  45.         ON O.object_id = C.object_id
  46. WHERE
  47.         O.type IN (''P'',''V'',''FN'',''TF'',''IF'')
  48.         AND C.definition LIKE N''%' + @Search_key + N'%'''

  49. --for each database search
  50. EXEC sys.sp_msforeachdb @sql

  51. --show the resule
  52. SELECT DISTINCT
  53.                 database_name
  54.                 , schema_name
  55.                 , object_name
  56.                 , object_type = CASE object_type
  57.                                                         WHEN N'P' THEN 'Procedure'
  58.                                                         WHEN N'V' THEN 'View'
  59.                                                         ELSE 'User Function'
  60.                                                 END
  61.                 , create_date
  62.                 , modify_date
  63.                 , sp_helptext = database_name + '.' + schema_name + '.sp_helptext ' + object_name
  64. FROM #temp
  65. WHERE
  66.         database_name = ISNULL(@database_name,database_name)
  67.         AND object_type = ISNULL(@object_type,object_type)
  68. ORDER BY database_name, schema_name, object_name
复制代码
我的测试结果
database_name        schema_name        object_name        object_type        create_date        modify_date        sp_helptext
test        dbo        UV_Test        View        2012-03-27 20:50:39.727        2012-03-27 20:50:39.727        test.dbo.sp_helptext UV_Test


使用道具 举报

回复
论坛徽章:
0
72#
发表于 2012-3-29 11:53 | 只看该作者
支持原创分享

使用道具 举报

回复
论坛徽章:
0
73#
发表于 2012-3-31 21:24 | 只看该作者
很不错 谢谢分享

使用道具 举报

回复
论坛徽章:
5
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19ITPUB 11周年纪念徽章
日期:2012-10-23 16:55:31紫蛋头
日期:2013-06-25 23:34:02双鱼座
日期:2015-11-23 21:55:40
74#
发表于 2012-4-3 10:59 | 只看该作者
真的很不错,,

使用道具 举报

回复
论坛徽章:
0
75#
发表于 2012-4-4 23:33 | 只看该作者
好贴~~~留个mark,,细细品尝!!楼主辛苦!

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
76#
 楼主| 发表于 2012-4-7 12:53 | 只看该作者
好久没有来弄这个帖子了,也不知道大家希望获取哪个方面的信息,现在不知道要为大家分享什么东西了~

使用道具 举报

回复
论坛徽章:
14
迷宫蛋
日期:2012-03-13 09:50:292014年新春福章
日期:2014-02-18 16:44:08优秀写手
日期:2013-12-18 09:29:15迷宫蛋
日期:2012-06-13 15:28:34咸鸭蛋
日期:2012-06-11 16:11:11灰彻蛋
日期:2012-05-31 10:18:54双黄蛋
日期:2012-05-28 17:45:17茶鸡蛋
日期:2012-05-28 17:27:32蜘蛛蛋
日期:2012-05-28 16:54:09迷宫蛋
日期:2012-05-17 19:00:48
77#
 楼主| 发表于 2012-4-7 21:55 | 只看该作者
本帖最后由 Cherish_j_wang 于 2012-4-7 21:56 编辑

MSSQL DBA精华总结
之查看对象引用的关系
先把附件放到这里
FindTableTypeReferences.sql (51.05 KB, 下载次数: 55)
背景:
今天在做MSSQL Server 2008 Value Table Parameter测试的时候,遇到一个问题,在表值类型对象被引用以后,我们再想要删除、修改这个表值类型,就会报告错误,错误信息如下:
Msg 3732, Level 16, State 1, Line 5Cannot drop type 'testTableType' because it is being referenced by object 'Up_testTableParameter'. There may be other objects that reference this type.   
那么,我们的问题是,如果在生产系统中,如果我们创建了很多的用户定义(表)类型,当我们需要去修改或者删除这些类型的时候,我们如何去找出这些引用到他们的对象呢?这个就是我们今天要解决的问题:   这个错误出现在执行下面的脚本:
  1. --table value parameter
  2. use test
  3. go
  4. if exists(
  5.                 select * from sys.types
  6.                 where name = 'testTableType'
  7.                 )
  8.         drop type testTableType
  9. GO
  10. create type testTableType as table
  11. (
  12.         rowid int not null primary key
  13.         ,name varchar(20) null
  14.         ,city varchar(20) null
  15. );
  16. GO

  17. --create test procedure
  18. if OBJECT_ID('dbo.Up_testTableParameter','p') is not null
  19.         drop proc dbo.Up_testTableParameter
  20. GO

  21. create proc dbo.Up_testTableParameter
  22. (
  23.         @tableParameter testTableType READONLY
  24. )
  25. AS
  26. BEGIN
  27.         select *
  28.         from @tableParameter;
  29. END
  30. GO

  31. --test drop table value type
  32.         drop type testTableType
复制代码
解决方法:
   请使用附件中的脚本来查看对象引用关系
我的测试结果结果如下:由于表格列太多,只贴出了部分列

object_id


object_name


object_schema


object_db


257


testTableType


dbo


test


407672500


Up_testTableParameter


dbo


test


使用道具 举报

回复
论坛徽章:
26
生肖徽章2007版:牛
日期:2008-03-30 21:31:492012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:372013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-06-02 17:52:32现代
日期:2013-09-29 18:50:29一汽
日期:2013-11-26 22:28:36马上有房
日期:2014-08-16 20:10:49马上有房
日期:2014-10-24 03:01:31暖羊羊
日期:2015-03-04 14:50:37
78#
发表于 2012-4-9 02:43 | 只看该作者
楼主讲讲关于索引维护方面的吧

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
79#
发表于 2012-4-23 00:09 | 只看该作者
有无邮件发送设置,实现查看sql 作业是否错误之类的方法?

使用道具 举报

回复
论坛徽章:
26
ITPUB伯乐
日期:2012-05-22 15:05:35喜羊羊
日期:2015-05-14 12:15:30美羊羊
日期:2015-07-02 22:22:59秀才
日期:2015-08-24 09:51:48天枰座
日期:2015-11-05 16:53:35双鱼座
日期:2015-12-05 19:22:56巨蟹座
日期:2015-12-20 18:46:10摩羯座
日期:2016-05-19 09:54:17ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-02-22 15:16:26
80#
发表于 2012-4-25 10:12 | 只看该作者
路人ABCD 发表于 2012-4-23 00:09
有无邮件发送设置,实现查看sql 作业是否错误之类的方法?

你是指在Job运行结束之后,发出邮件吗?
可以选择到运行结束发送邮件,运行成功发送邮件,运行失败发送邮件.
可以参考
http://space.itpub.net/16754036/viewspace-700263

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表