原文:监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)


如果你要同步不同数据库之间的数据,首先会想到的是数据库复制技术,但如果让你同步数据库的结构,你会想到什么呢?

下面是一个例子,用来说明通过sql server中的DDL触发器,来记录create table、alter table、drop table等ddl操作。


  1. --2.1在master数据库中建立服务器级别跟踪表
  2. use master
  3. go
  4. create table server_eventdata
  5. (eventdata xml,
  6. principal_user nvarchar(100),
  7. login_user nvarchar(100)
  8. )
  9. go
  10. /*
  11. select * from sys.trigger_event_types
  12. where type_name like '%table%' or
  13. type_name like '%deny%' or
  14. type_name like '%revoke%'
  15. */
  16. --2.2建立服务器级别触发器
  17. create trigger gyy_server
  18. on all server
  19. for create_table,
  20. alter_table,
  21. drop_table
  22. as
  23. insert into server_eventdata
  24. select EVENTDATA(),USER,SUSER_NAME()
  25. go
  26. --2.3
  27. create database wc
  28. go
  29. use wc
  30. go
  31. create table dbo.wc_table(v int)
  32. insert into dbo.wc_table values(1)
  33. go
  34. use wc
  35. go
  36. alter table dbo.wc_table
  37. add name varchar(100)
  38. alter table dbo.wc_table
  39. add tt datetime default getdate()
  40. go
  41. --查看记录的事件
  42. select --EVENTDATA, --里面是所有的信息
  43. eventdata.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)') as '事件类型',
  44. eventdata.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(100)') as 'sql语句',
  45. eventdata.value('(/EVENT_INSTANCE/PostTime)[1]','datetime') as '执行时间'
  46. /*
  47. '登录名' + eventdata.value('(/EVENT_INSTANCE/LoginName)[1]','nvarchar(100)') +
  48. '用户名' + eventdata.value('(/EVENT_INSTANCE/UserName)[1]','nvarchar(100)') + ',授予者'+
  49. eventdata.value('(/EVENT_INSTANCE/Grantor)[1]','nvarchar(100)') + ' 把类型为:' +
  50. eventdata.value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(100)') + '的对象' +
  51. eventdata.value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(100)') + '.' +
  52. eventdata.value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '.' +
  53. eventdata.value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '的' +
  54. eventdata.value('(/EVENT_INSTANCE/Permissions/Permission)[1]','nvarchar(100)') +'权限授予给' +
  55. eventdata.value('(/EVENT_INSTANCE/Grantees)[1]','nvarchar(100)')
  56. */
  57. from master.dbo.server_eventdata t
  58. /*
  59. 事件类型 sql语句 执行时间 (无列名)
  60. CREATE_TABLE create table dbo.wc_table(v int) 2013-11-07 10:22:31.157 NULL
  61. ALTER_TABLE alter table dbo.wc_table add name varchar(100) 2013-11-07 10:23:59.987 NULL
  62. ALTER_TABLE alter table dbo.wc_table add tt datetime default getdate() 2013-11-07 10:24:00.013 NULL
  63. */

发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

监控SQL:通过SQL Server的DDL触发器来监控数据库结构的变化(1)的更多相关文章

  1. 监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2)

    原文:监控SQL:通过SQL Server的DML触发器来监控哪些IP对表的数据进行了修改(2) 在有些公司中,由于管理的不规范,或者是便于开发人员直接修改.部署程序,往往任何开发人员,都能登录到生产 ...

  2. SQL Server DDL触发器运用

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 基础知识(Rudimentary Knowledge) DDL运用场景(DDL Scene) ...

  3. SQL Server DDL触发器

    DDL 触发器作用: DDL 触发器主要用于防止对数据库架构.视图.表.存储过程等进行的某些修改. DDL 触发器事件: DDL 触发器在创建用来监视并响应该数据库或服务器实例中的活动的事件通知时,可 ...

  4. DDL触发器的应用

    一般来说,DML触发器可以监测得到具体对象的具体数据的变更.然而,DDL触发器则能够对一些服务器的行为作出监控,比如我们可以利用DDL触发器来做登录限制啊,做一些日志控制啊之类的. 好,然后简单粗暴上 ...

  5. Sql Server系列:触发器

    触发器的一些常见用途: ◊ 强制参照完整性 ◊ 常见审计跟踪(Audit Trails):这意味着写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据. ◊ 创建与CHECK约束 ...

  6. SQL Server 中的触发器(trigger)

    SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...

  7. SQL Server 2005/2008 触发器的管理和查看

    1.通过可视化操作来管理和查看触发器 在Microsoft SQL Server Management Studio中,选中某一数据库的某一张表时,在“对象资源管理器详细”窗口中有“触发器”项.通过“ ...

  8. SQL Server封闭掉 触发器递归

    SQL Server关闭掉 触发器递归SQL Server  是有一个开关, 可以关闭掉 触发器递归的.EXEC sp_dboption '数据库名字', 'recursive triggers', ...

  9. SQL Server自动化运维系列——监控性能指标脚本(Power Shell)

    需求描述 一般在生产环境中,有时候需要自动的检测指标值状态,如果发生异常,需要提前预警的,比如发邮件告知,本篇就介绍如果通过Power shell实现状态值监控 监控值范围 根据经验,作为DBA一般需 ...

随机推荐

  1. excel怎么把一个sheet的 全部内容打印到一页纸上

    参考 https://jingyan.baidu.com/article/5225f26b04005ee6fa090830.html

  2. Android中为什么主线程不会因为Looper.loop()方法造成阻塞

    很多人都对Handler的机制有所了解,如果不是很熟悉的可以看看我 如果看过源码的人都知道,在处理消息的时候使用了Looper.loop()方法,并且在该方法中进入了一个死循环,同时Looper.lo ...

  3. PHP获取上周一和上个月

    PHP获取上周一有个坑,如果今天是周一,获取的是上周一.如果今天是周二到周日,获取的是本周一. 根据传递的页码数和每页显示多少条,获取对应的数据: if ($data['type'] == 'day' ...

  4. ISO/IEC 9899:2011 条款6.2.2——标识符的连接

    6.2.2 标识符的连接 1.在不同作用域中声明的一个标识符或在同一作用域多次出现的一个标识符可以被用作对同一个对象或函数的引用,通过一个称为连接的过程.[注:在两个不同的标识符之间没有连接.]有三种 ...

  5. ISO/IEC 9899:2011 条款6.2.5——类型

    6.2.5 类型 1.存储在一个对象中的值或由一个函数所返回的值的意义由用于访问该对象的表达式的类型来确定.(声明为一个对象的一个标识符是最简单的这种表达式:其类型在标识符的声明中指定.)类型被划分为 ...

  6. Linux下设置Tomcat开机自启动

    --未验证 第一步:在/etc/init.d下新建一个文件tomcat(需要root操作权限) vi /etc/init.d/tomcat 然后点击"i"写下如下代码,tomcat ...

  7. 整理Mac系统 node-sass 安装失败的原因及解决办法

    转载与:https://segmentfault.com/a/1190000010984731 声明:本文非原创,如有侵权请留言或发邮件告知,作者会立即停止侵权并删除本文.发布此文章主要是希望跟作者遇 ...

  8. 一百四十七:CMS系统之celery实现邮件和短信异步发送

    celery工作原理 celery官方文档:https://docs.celeryproject.org/en/latest/ 安装:pip install celery windows下还需安装ev ...

  9. Web聊天室的实现

    Tornado普通方式实现聊天室 普通的http方式连接的话,基本思路是前端页面通过JS重复连接后端服务器. 核心文件:app.py #!/usr/bin/env python # -*- codin ...

  10. Node.js中使用pipe拷贝大文件不能完全拷贝的解决办法

    原来的代码如下: var readable = fs.createReadStream( filepath ); var writable = fs.createWriteStream( outFil ...