对数据库的操作sql语句通常都是在客户端的应用程序中生成的,但实际的执行是在Sql server中来实现的,请问在数据库中有没有什么方法能获取到这些被执行的sql语句呢?

解决方案 »

  1.   

    用事件追踪器,可查到。
    2005可用DDl触发器实现
      

  2.   

    使用跟踪实现的是对数据库引擎实例的跟踪吧?我现在只想获得针对某个具体数据库的操作,比方说对Northwind数据库的增删改操作。
      

  3.   

    实际问题是这样的,想为在两台计算机上的Sql server中的一个数据库做数据同步,但是由于这两台计算机不能互访,所以不能使用复制来同步,所以现在想能不能通过什么方式把A机中对数据库db1的增删改操作获取出来,记录到文件中,然后再到B机中去把这些操作重新执行一边。看了看,似乎觉得使用跟踪不太适合,或许我了解得太浅,不知道一些高级的用法,请大家详细指教一下,谢谢了。
    注:A、B机中的数据库db1的结构是相同的。先前试过在触发器中生成被更改的记录,但是那种只能记录出数据,具体的操作该怎么办呢?例如删除和更新操作,有受影响的数据似乎没什么用处啊。
      

  4.   

    另外两个服务器使用的都是sql2005
      

  5.   

    select r.session_id,r.start_time,r.command,s.text
    from sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS s
      

  6.   

    select r.session_id,r.start_time,r.command,
           SUBSTRING(st.text,(qs.statement_start_offset/2)+1,
             ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
               ELSE qs.statement_end_offset END
               -qs.statement_start_offset)/2)+1) AS statement_text
    from sys.dm_exec_requests AS r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS s
    where r.status='running' and r.command not in('SELECT','TASK MANAGER')