RT
能不能根据图中信息查到数据页内保存的具体数据?

解决方案 »

  1.   

    DBCC TRACEON(3604)
    GO
    DBCC PAGE(5,1,989172)
      

  2.   

    这个我知道,但是读出来的东东看不懂,也看不到保存的具体数据啊~
    比如记录的userid是1还是100w这样的还有就是。。这个对死锁分析具体有什么作用呢~
      

  3.   

    嗯。。好吧,也是,其实我主要是想问问能不能直接用pageid提取出直观的数据来?
    这个技术内幕有记录吗?是哪一部啊?
      

  4.   

    死锁分析比较好的一本书:《sqlserver 2012 实施与管理实战指南》 徐海蔚著,她写的2008估计你很难找到了。
      

  5.   


    呵呵,我做的一个实验,你可以参考参考:--1.先建表
    CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10) NULL)INSERT INTO TEST
    SELECT 1,'abcdefg'
    UNION ALL
    SELECT 2,'hijklmn'
    --SELECT * FROM TESTSELECT *
    FROM sys.tables 
    WHERE name = 'test'--2.查询元数据
    --hobt_id : 72057594043236352
    SELECT hobt_id
    FROM sys.partitions
    WHERE object_id = object_id('test')
    /*
    first_page :0x790500000100拆分成2部分:0100和79050000这2部分要翻转,也就是0001 和 00000579前面表示fileId,后面是pageId,都是16机制的表示方法,通过calc计算器的转换,就是10进制就是1和1401*/
    SELECT first_page    --转换值的顺序
    FROM sys.system_internals_allocation_units
    WHERE container_id = 72057594043236352--3.这里创建一个表,用来存放dbcc page的结果
    if exists(select * from sys.tables where name = 'dbcc_page')
       drop table dbcc_page
    go
    create table dbcc_page
    (
    ParentObject varchar(500),
    Object       varchar(2000),
    Field        varchar(1000),
    Value        nvarchar(max)
    )
    go
    --4.参数分别是数据库名,fileid,pageid,显示格式
    --注意:这里是在自己的电脑上实验,用的master数据库,大家不要在正是服务器上尝试
    /*
    --这样会报错,只能采用下面的,建一个存储过程
    insert into dbcc_page(ParentObject,Object,Field,Value)
    DBCC page(master,1,1401,3) with tableresults
    */
    if exists(select * from sys.procedures where name = 'proc_dbcc_page')
       drop procedure proc_dbcc_page
    gocreate procedure proc_dbcc_page
    asDBCC page(master,1,1401,3) with tableresultsgo
    --5.把dbcc page的结果插入到表中
    insert into dbcc_page(ParentObject,Object,Field,Value)
    exec proc_dbcc_page
    --6.查看数据
    select *
    from dbcc_page
    --过滤大部分其他元数据,选出表test中的数据,与最上面的数据相一致
    select OBJECT,
           Field,
           value
    from dbcc_page
    where Object like 'Slot%Column%'
    /*
    OBJECT                                                Field value
    Slot 0 Column 1 Offset 0x4 Length 4 Length (physical) 4 idd     1
    Slot 0 Column 2 Offset 0xf Length 7 Length (physical) 7 name abcdefg
    Slot 1 Column 1 Offset 0x4 Length 4 Length (physical) 4 idd     2
    Slot 1 Column 2 Offset 0xf Length 7 Length (physical) 7 name hijklmn
    */
      

  6.   


    呵呵,我做的一个实验,你可以参考参考:--1.先建表
    CREATE TABLE test(idd INT NOT NULL,name VARCHAR(10) NULL)INSERT INTO TEST
    SELECT 1,'abcdefg'
    UNION ALL
    SELECT 2,'hijklmn'
    --SELECT * FROM TESTSELECT *
    FROM sys.tables 
    WHERE name = 'test'--2.查询元数据
    --hobt_id : 72057594043236352
    SELECT hobt_id
    FROM sys.partitions
    WHERE object_id = object_id('test')
    /*
    first_page :0x790500000100拆分成2部分:0100和79050000这2部分要翻转,也就是0001 和 00000579前面表示fileId,后面是pageId,都是16机制的表示方法,通过calc计算器的转换,就是10进制就是1和1401*/
    SELECT first_page    --转换值的顺序
    FROM sys.system_internals_allocation_units
    WHERE container_id = 72057594043236352--3.这里创建一个表,用来存放dbcc page的结果
    if exists(select * from sys.tables where name = 'dbcc_page')
       drop table dbcc_page
    go
    create table dbcc_page
    (
    ParentObject varchar(500),
    Object       varchar(2000),
    Field        varchar(1000),
    Value        nvarchar(max)
    )
    go
    --4.参数分别是数据库名,fileid,pageid,显示格式
    --注意:这里是在自己的电脑上实验,用的master数据库,大家不要在正是服务器上尝试
    /*
    --这样会报错,只能采用下面的,建一个存储过程
    insert into dbcc_page(ParentObject,Object,Field,Value)
    DBCC page(master,1,1401,3) with tableresults
    */
    if exists(select * from sys.procedures where name = 'proc_dbcc_page')
       drop procedure proc_dbcc_page
    gocreate procedure proc_dbcc_page
    asDBCC page(master,1,1401,3) with tableresultsgo
    --5.把dbcc page的结果插入到表中
    insert into dbcc_page(ParentObject,Object,Field,Value)
    exec proc_dbcc_page
    --6.查看数据
    select *
    from dbcc_page
    --过滤大部分其他元数据,选出表test中的数据,与最上面的数据相一致
    select OBJECT,
           Field,
           value
    from dbcc_page
    where Object like 'Slot%Column%'
    /*
    OBJECT                                                Field value
    Slot 0 Column 1 Offset 0x4 Length 4 Length (physical) 4 idd     1
    Slot 0 Column 2 Offset 0xf Length 7 Length (physical) 7 name abcdefg
    Slot 1 Column 1 Offset 0x4 Length 4 Length (physical) 4 idd     2
    Slot 1 Column 2 Offset 0xf Length 7 Length (physical) 7 name hijklmn
    */

    这个可以有