Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 7건
  replication 을 완전히 삭제하고 싶다면... 
작성일시 : 2008.05.29 18:17 | 분류 : SQL Server/Administration | 태그 : Delete, is_dts_replicated, is_merge_published, is_replicated, Replication, sql DAC 모드, SQL Server 2005, sys.columns

이전에 지웠다고 다 지운 리플리케이션 정보 중 일부가 sys.columns 에 아직도 남아 있어 삭제하는 일을 했습니다.
혼자 기억하기는 아쉬워서 남겨 봅니다.

[현상]
컬럼의 길이 등을 변경하거나, sp_rename 을 실행할 때 아래와 같은 메시지가 뜨면서 변경에 실패한다.
Msg 4928, Level 16, State 1, Procedure sp_rename, Line 520
Cannot alter column '<column-name>' because it is 'REPLICATED'.

[원인]
Replication 또는 이전에 설정해 놓은 Replication 설정이 남아 있어 발생한다.
아래와 같이 sys.columns의 is_replicated 및 is_merge_published is_dts_replicated의 칼럼값을 확인 하여 설정 여부를 확인 할 수 있습니다. 제가 경험했던 케이스의 경우에는  is_non_sql_subscribed 칼럼이 1로 설정이 되어 해당 컬럼에 대한 변경이 불가능했었습니다.

[Action Item]
아래 3가지 쿼리를 통해 replication의 설정 여부를 확인 할 수 있습니다.
DB replication 설정 여부 확인 : select is_published, * from sys.databases
Table의 게시 여부 여부 확인 : select is_published, * from sys.objects where is_published=1
Column의 게시 여부 확인 : select * from sys.columns where object_id = object_id('Table 명')

replication이 걸려 있음을 확인 했다면 해당 설정을 삭제 해 줍니다.
sp_msunmarkreplinfo 을 통해 특정 테이블에 대한 게시 정보를 삭제를 할 수 있습니다.
하지만 쉽지 않더군요...

제가 이전에 사용했던 방법은 sp_removedbreplication  인데, 실제로 데드락으로 인해 실패하는 경우가 많아 모든 정보를 지우는데 실패한 경험이 있습니다. 해당 프로시저에 대해서는 이전 포스트(http://maystyle.tistory.com/348)를 참조하시면 됩니다.

마지막으로 제가 선택한 방법은 sp_MSarticlecol 였습니다. 해당 내용은 SSIS, DTS 쪽 블로그를 통해서 확인 할 수 있습니다.

먼저 더미 replication을 만듭니다.
다음으로 게시 정보의 ID를 확인 합니다.
exec sp_helparticle 'replication 이름'

그런 다음 cmd 창을 열어 sql DAC 모드로 연결 합니다.
C:>sqlcmd -A -S'서버명'

마지막으로 is_non_sql_subscribed 의 값을 0으로 설정하기 위해 다음 쿼리를 수행 합니다.
1) EXEC sys.sp_MSarticlecol @artid='위에서 확인한 리플리케이션의 article id', @colid=NULL, @type='nonsqlsub', @operation='drop';
2) go

[기타 정보 확인을 위해 사용 했던 쿼리]
sp_help, select * from sys.objects where type='u'

[출처]
Microsoft 기술 지원 엔지니어 분 및 SSIS 팀 블로그
http://blogs.msdn.com/mangeshd/archive/2008/05/22/altering-properties-of-a-column-fails-with-cannot-alter-column-column-name-because-it-is-replicated.aspx

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  복제가 정말 정말 안지워지십니까? 
작성일시 : 2008.05.15 10:50 | 분류 : SQL Server/Administration | 태그 : Delete, menual remove, Remove, Replication, sp_removedbreplication, SQL Server

별 짓을 다해봐도 복제가 안지워 지십니까?

방법 1 : http://msdn.microsoft.com/ko-kr/library/ms152757.aspx
방법 2: http://support.microsoft.com/kb/324401

1번과 2번 모두 써 보셨습니까?
마지막으로 희망을 하나 걸어 보세요.
sp_removedbreplication : 모든 복제 관련 개체를 삭제 합니다.

먼저 다음 쿼리를 이용하여 복제 구성이 잘 삭제 됐는지 확인 합니다.
select replinfo, * from sysobjects where replinfo=0 인 녀석을 찾으면 됩니다.

[구문]
sp_removedbreplication [ [ @dbname = ] 'dbname' ] [ , [ @type = ] type ]

[인수]
@dbname= 'dbname'데이터베이스의 이름입니다. dbnamesysname이며 기본값은 NULL입니다. NULL인 경우 현재 데이터베이스를 사용합니다.

@type = type
데이터베이스 개체를 제거 중인 복제의 유형입니다. typenvarchar(5)이며 다음 값 중 하나일 수 있습니다.
tran : 트랜잭션 복제 게시 개체를 제거합니다.
merge : 병합 복제 게시 개체를 제거합니다.
both(기본값) : 모든 복제 게시 개체를 제거합니다.

[참고]
http://msdn.microsoft.com/ko-kr/library/ms188734.aspx

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  압축(ZIP) 폴더 메뉴 삭제하는 스크립트 
작성일시 : 2008.03.06 16:04 | 분류 : Windows Server/Kernel | 태그 : Delete, script, send to, ZIP

보내기 > 압축(ZIP) 폴더 메뉴 삭제하는 스크립트

[스크립트]
On Error Resume Next

Const SENDTO = &H9&

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objShell.Namespace(SENDTO)
Set objFolderItem = objFolder.Self

strFile = objFolderItem.Path & "\*.ZFSendToTarget"

Wscript.Echo strFile
objFSO.DeleteFile(strFile), DeleteReadOnly

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  Script를 이용한 레지스트리 키, 값 컨트롤 
작성일시 : 2008.03.06 12:01 | 분류 : Windows Server/Kernel | 태그 : Delete, Registry, VBS

목차
1. 레지스트리의 사용
2. 레지스트리 루트기
3 예제 : 마우스 오른쪽 버튼 화면 컨트롤
4 예제 : Script를 이용한 레지스트리 키, 값 컨트롤

레지스트리 루트키 정의
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_CURRENT_CONFIG = &H80000005

[스크립트]
이전 포스트 "마우스 오른쪽 버튼 화면 컨트롤" 의 파일에 대한 메뉴 삭제를 스크립트화 시키면 아래와 같다.
하위 subkey까지 모두 삭제 시켜준다.

Const HKEY_CLASSES_ROOT = &H80000000

strComputer = "."
strKeyPath = "*\shellex\ContextMenuHandlers\ALzip"

Set objRegistry = GetObject("winmgmts:\\" & _
    strComputer & "\root\default:StdRegProv")

DeleteSubkeys HKEY_CLASSES_ROOT, strKeypath

Sub DeleteSubkeys(HKEY_CLASSES_ROOT, strKeyPath)
    objRegistry.EnumKey HKEY_CLASSES_ROOT, strKeyPath, arrSubkeys

    If IsArray(arrSubkeys) Then
        For Each strSubkey In arrSubkeys
            DeleteSubkeys HKEY_CLASSES_ROOT, strKeyPath & "\" & strSubkey
        Next
    End If

    objRegistry.DeleteKey HKEY_CLASSES_ROOT, strKeyPath
End Sub

[결과]
ALZip 관련 메뉴가 삭제 된 것을 알 수 있다.

[관련 문서]
http://support.microsoft.com/kb/310516
http://articles.techrepublic.com.com/5100-6268_11-5194791.html
http://technet.microsoft.com/ko-kr/magazine/cc160952(en-us).aspx
http://www.serverwatch.com/tutorials/article.php/1476831

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  마우스 오른쪽 버튼 화면 컨트롤 
작성일시 : 2008.03.06 10:57 | 분류 : Windows Server/Kernel | 태그 : Alzip, Delete, mouse right button, Registry, 마우스 오른쪽 버튼, 삭제, 응용

목차
1. 레지스트리의 사용
2. 레지스트리 루트기
3 예제 : 마우스 오른쪽 버튼 화면 컨트롤

오늘은 이전의 레지스트리에 대한 설명과 함께 좀더 재미있게 컨트롤 하고자 직접 레지스트리를 수정하고 수정된 결과를 확인하도록 하겠습니다.

[목표]
아래 그림의 ALZip 과 관련된 메뉴를 삭제한다.

[관련 Registry]
해당 설정과 관련된 Registry는 아래와 같다
HKCU\SOFTWARE\Class 및 HKLM\SOFTWARE\Class의 데이터들은 HKCR 에서 확인 할 수 있다
즉 해당 레지스트리를 수정하면 원하는 목표를 이룰 수 있다
(참 다행입니다... 소프트웨어 및 파일에 대한 설정을 한곳에서 할 수 있어서요...^^)

File에 대한 설정
[HKCR\<ProgID>\shellex\ContextMenuHandlers\]
[HKCR \*\shellex\ContextMenuHandlers\]
[HKCR\*\shell\]
[HKCR\AllFilesystemObjects\shellex\ContextMenuHandlers\]

Directory에 대한 설정
[HKCR\Folder\Shell\]
[HKCR\Folder\ShellEx\ContextMenuHandlers\]
[HKCR\Directory\Shell\]
[HKCR\Directory\ShellEx\ContextMenuHandlers\]
[HKCR\AllFilesystemObjects\shell\]
[HKCR \ AllFilesystemObjects \ shellex \ ContextMenuHandlers\]

[Action ITEM]

먼저 파일에 대한 ALZip 압축을 막기 위하여 HKCR \*\shellex\ContextMenuHandlers\ 를 확인한다.
 

ALZIP 을 삭제한다.
이제 파일에 대한 ALZIP 관련 메뉴가 사라졌다
 

하지만 여전히 폴더에서는 ALZIP 관련 메뉴가 보이고 있다.
 

이제 폴더에서도 않보이도록 삭제 하도록 하겠다.
HKCR\Directory\ShellEx\ContextMenuHandlers\ 의 ALZIP 을 삭제한다.
 

역시 HKCR\Folder\ShellEx\ContextMenuHandlers\ 의 ALZIP 도 삭제한다.

완전히 삭제 된 것을 볼 수 있다.

다음에는 이렇게 레지스트를 직접 수정하는 것이 아니라 스크립트를 통하여 컨트롤 하는 것을 해보도록 하겠다.

[관련 문서]
http://windowsxp.mvps.org/context_folders.htm

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  After 트리거를 이용하여 수정 및 삭제된 데이터를 보관하고 변경된 일자 및 사람을 저장하자. 
작성일시 : 2007.11.27 14:40 | 분류 : SQL Server/Development | 태그 : after trigger, audit, Delete, slq2005, sysbol path, table, trigger, Update

Select의 경우 서버 성능상의 치명적인 이슈가 제기 될 수 있으므로 생략한다.

AuditTest 라는 데이터 베이스를 생성하고 해당 데이터 베이스에 AuditTable 이라는 대상 Table과 AuditTableChanged 이라는 데이터 삭제 및 변경 시 저장할 Table을 만들었다.

변경 또는 삭제가 발생했을 때 작동하는 트리거를 AuditTable 에 부착한다.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  tempdb의 ndf가 삭제가 되지 않는다. 
작성일시 : 2007.11.18 03:14 | 분류 : SQL Server/Administration | 태그 : Delete, error, Level 16, Msg 5042, ndf, Remove, State 1, tempdb, TroubleShooting

[에러 메세지]
Server: Msg 5042, Level 16, State 1, Line 1
The file 'tempdev4' cannot be removed because it is not empty.
File 'E:\Microsoft SQL Server\MSSQL\data\tempdev4.ndf' modified in
sysaltfiles. Delete old file after restarting SQL Server.

tempdb의 ndf 파일이 삭제가 않된다는 애기를 듣는 경우가 있다.
원인은 해당 ndf에 table이 존제하기 때문인데, 간단한 쿼리를 통하여 해당 ndf를 삭제하는 방법을 공유하도록 하겠다.

[Action Item]
먼저  Tempdb의 file 구성을 확인 한다.
use tempdb
go
sp_helpfile

위의 커멘드를 통하여 Name 및 Filename을 확인 했으면 직접 삭제 해 보도록 하겠다.
dbcc shrinkfile(tempdev_1, emptfle) //  TempDB 내부 데이터를 삭제
go
alter database tempdb
remove file tempdev_1 // tempdb의 첫번째 ndf 삭제


이제 손쉽게 tempdb의 ndf를 삭제하도록 하자.

신고
크리에이티브 커먼즈 라이선스
Creative Commons License
 Prev   1   Next 

티스토리 툴바