SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED


SELECT
  DB_NAME()     AS DBNAME
 , ss.name      AS SchemaName
 , st.name      AS TableName
 , s.name      AS IndexName
 , STATS_DATE(s.id,s.indid) AS [Statistics Last Updated]
 , s.rowcnt     AS [Row Count]
 , s.rowmodctr     AS [Number Of Changes]
 , CAST((CAST(s.rowmodctr AS DECIMAL(28,8))/CAST(s.rowcnt AS DECIMAL(28,2)) * 100.0) AS DECIMAL(28,2)) AS [% Rows Changed]
INTO #Statistics_Change
FROM sys.sysindexes s
  INNER JOIN sys.tables st ON st.[object_id] = s.[id]
  INNER JOIN sys.schemas ss ON ss.[schema_id] = st.[schema_id]
WHERE s.id > 100
  AND s.indid > 0
  AND s.rowcnt >= 500
  AND CAST((CAST(s.rowmodctr AS DECIMAL(28,8))/CAST(s.rowcnt AS DECIMAL(28,2)) * 100.0) AS DECIMAL(28,2)) > 5
  AND 1= 2
ORDER BY [% Rows Changed] DESC

EXEC sp_MSForEachDB 'USE [?];

IF DB_NAME() NOT IN ( ''master'', ''msdb'', ''model'', ''tempdb'', ''distribution'' )
BEGIN
 INSERT INTO #Statistics_Change
 SELECT
   DB_NAME() AS DBNAME
  , ss.name AS SchemaName
  , st.name AS TableName
  , s.name AS IndexName
  , STATS_DATE(s.id,s.indid) AS [Statistics Last Updated]
  , s.rowcnt AS [Row Count]
  , s.rowmodctr AS [Number Of Changes]
  , CAST((CAST(s.rowmodctr AS DECIMAL(28,8))/CAST(s.rowcnt AS DECIMAL(28,2)) * 100.0) AS DECIMAL(28,2)) AS [% Rows Changed]
 FROM sys.sysindexes s
   INNER JOIN sys.tables st ON st.[object_id] = s.[id]
   INNER JOIN sys.schemas ss ON ss.[schema_id] = st.[schema_id]
 WHERE s.id > 100
   AND s.indid > 0
   AND s.rowcnt >= 500
   AND CAST((CAST(s.rowmodctr AS DECIMAL(28,8))/CAST(s.rowcnt AS DECIMAL(28,2)) * 100.0) AS DECIMAL(28,2)) > 5
 ORDER BY [% Rows Changed] DESC
END
'

SELECT * FROM #Statistics_Change
ORDER BY [% Rows Changed] DESC


DROP TABLE #Statistics_Change

Replication을 구성해서 운영하다 어떤 문제로 인해서 replication을 다시 구성해야 하는 경우가 발생한다.

 

그런데 Distribute를 제거하지 않은 경우 기존의 데이터가 남아 있어서  문제가 없지만 

 

Replication Monitor에 X 자로 Red 표시가 나오는 경우가 있다.

 

이런 경우 아래의 프로시져로 상태를 업데이트 해주면 해결이 된다.

 

EXEC sp_MSload_replication_status

 

 

trigger 및 Procedure 에서 텍스트 찾기

 

DECLARE @Search varchar(255)
SET @Search='Search Text'

SELECT DISTINCT
    o
.name AS Object_Name,o.type_desc
   
FROM sys.sql_modules        m
       
INNER JOIN sys.objects  o ON m.object_id=o.object_id
   
WHERE m.definition Like '%'+@Search+'%'
   
ORDER BY 2,1

CREATE TABLE #tempww (
    LoginName nvarchar(max),
    DBname nvarchar(max),
    Username nvarchar(max),
    AliasName nvarchar(max)
)
GO

INSERT INTO #tempww
EXEC master..sp_msloginmappings

-- display results
SELECT *
FROM   #tempww
ORDER BY dbname, username

-- cleanup
DROP TABLE #tempww

Replication 삭제시 구독 서버에 접속 안되는 경우나 구독서버에서 구독을 삭제 한 경우

 

구독 서버에 접속 할 수 없다는 18482 에러가 발생한다.

 

그런 경우

 

USB [게시자 DB]

GO

sp_removedbreplication

 

로 삭제 할 수 있다.

+ Recent posts