เกร็ดความรู้ประกอบการกู้หรือย้ายฐานข้อมูล 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

Leave a Reply