Tag: เกร็ดความรู้ประกอบการกู้หรือย้ายฐานข้อมูล SQL Server

  • เกร็ดความรู้ประกอบการกู้หรือย้ายฐานข้อมูล SQL Server

    Count record แต่ละ tables ใน database

    SELECT T.name AS [TABLE NAME], I.row_count AS [ROWCOUNT]
    FROM sys.tables AS T
    INNER JOIN
    sys.dm_db_partition_stats AS I
    ON T.object_id = I.object_id AND I.index_id < 2
    ORDER BY I.row_count DESC

    หา Trigger ทั้งหมดในทุกๆ tables ใน Database

    SELECT [so].[name] AS [trigger_name], USER_NAME([so].[uid]) AS [trigger_owner],
    USER_NAME([so2].[uid]) AS [table_schema], OBJECT_NAME([so].[parent_obj]) AS [table_name],
    OBJECTPROPERTY( [so].[id], ‘ExecIsUpdateTrigger’) AS [isupdate],
    OBJECTPROPERTY( [so].[id], ‘ExecIsDeleteTrigger’) AS [isdelete],
    OBJECTPROPERTY( [so].[id], ‘ExecIsInsertTrigger’) AS [isinsert],
    OBJECTPROPERTY( [so].[id], ‘ExecIsAfterTrigger’) AS [isafter],
    OBJECTPROPERTY( [so].[id], ‘ExecIsInsteadOfTrigger’) AS [isinsteadof],
    OBJECTPROPERTY([so].[id], ‘ExecIsTriggerDisabled’) AS [disabled]
    FROM sysobjects AS [so]
    INNER JOIN sysobjects AS so2 ON so.parent_obj = so2.Id WHERE [so].[type] = ‘TR’

    ค้นหาข้อความในทุกๆ Stored Procedure ใน Database

    SELECT DISTINCT obj.name AS Object_Name,obj.type_desc
    FROM sys.sql_modules sm INNER JOIN sys.objects obj ON
    sm.object_id=obj.object_id
    WHERE sm.definition Like ‘%xxx%’

    วิธีการ Rebuild Full-text Catalogs of Database

    Use Management Studio
    1. In Object Explorer, expand the server, expand Databases, and then expand the
    database that contains the full-text catalogs that you want to rebuild.
    2. Expand Storage, and then right-click Full Text Catalogs.
    3. Select Rebuild All.
    4. To the question, Do you want to delete all full-text catalogs and rebuild them?,
    click OK.
    5. In the Rebuild All Full-Text Catalogs dialog box, click Close.

    rebuild all index in Database

    use DatabaseName;
    DECLARE @TableName varchar(255)
    DECLARE TableCursor CURSOR FOR
    SELECT table_name FROM information_schema.tables
    WHERE table_type = ‘base table’
    OPEN TableCursor
    FETCH NEXT FROM TableCursor INTO @TableName
    WHILE @@FETCH_STATUS = 0
    BEGIN
    DBCC DBREINDEX(@TableName,’ ‘,90)
    FETCH NEXT FROM TableCursor INTO @TableName
    END
    CLOSE TableCursor
    DEALLOCATE TableCursor

    ค้นหา tables ทั้งหมดใน Database ที่มี Identity Column

    select o.name,’set identity_insert [‘+s.name+’].[‘+o.name+’] ON;’ as ION,’set identity_insert
    [‘+s.name+’].[‘+o.name+’] OFF;’ as IOff
    from sys.objects o
    inner join sys.schemas s on s.schema_id=o.schema_id
    where o.[type]=’U‘ and
    exists(select 1 from sys.columns where object_id=o.object_id and is_identity=1)
    order by o.name

    ตัอย่างการ insert table ที่มี Identity Column

    set identity_insert [dbo].[AGroup] ON;
    insert into [xDB].[dbo].[AGroup] ([AGroupID],[AGroupName])
    select [AGroupID],[AGroupName]
    from [aDB].[dbo].[AGroup]
    order by AGroupID;
    set identity_insert [dbo].[AGroup] OFF;

    Compare two table data

    แบบที่ 1
    select * from zlog1
    except
    select * from zlog
    แบบที่ 2
    select * from
    ( select checksum(*) as chk, id as k from zlog1) as t1
    left join
    ( select checksum(*) as chk, id as k from zlog) as t2 on t1.k = t2.k
    where t1.chk <> t2.chk

    ## เสนอแนะ ถ้ามีการกู้หรือย้ายฐานข้อมูลโดยที่ตัวเดิมยังเปิดใช้งานอยู่ สิ่งที่ควรทำคือให้สร้าง User ขึ้นมาใหม่ที่มีสิทธิใช้งานเฉพาะ Database ตัวใหม่เท่านั้น เพื่อป้องกันการเรียกใช้งานฐานข้อมูลทั้งสองที่โดยที่เราอาจจะไม่รู้ซึ่งจะทำให้ข้อมูลในฐานข้อมูลมั่วมากจนอาจจะเกินเยียวยา โดยมากจะเกิดกับ การเขียน code Stored Procedure ที่มีการระบุชื่อ Database ไว้ใน Stored Procedure