본문 바로가기

프로그램 경험/Database

[SqlServer] SQL Server 2005 Database suspect (주의대상) 복구 SQL Server 2005 트랜잭션 로그 손상에 의한 SUSPECT (주의대상) 발생 시 로그를 리빌드하여 복구하는 절차에 대해서 아래와 같이 정리하였습니다. [시나리오] LAIGO 데이터베이스 SUSPECT 발생 복구 절차 [복구절차] 1. 트랜잭션 로그 파일 이름 확인 USE LAIGO GO Exec sp_helpdb LAIGO 2. 데이터베이스 상태를 Single user 모드로 변경 ALTER DATABASE LAIGO SET SINGLE_USER WITH ROLLBACK IMMEDIATE 3. SQL Server 서비스 중지 및 기존 LDF 로그 파일의 이름을 변경 4. SQL Server 서비스 시작 5. 새로운 로그 파일 지정하여 rebuild log 수행 ALTER DATABASE LAI..
[SqlServer] 'sa'의 계정이 현재 잠겨 있으므로 로그인하지 못했습니다....(Error:18486) 프로그램이 안된다며 연락이 왔다. DB에 들어가려 했더니 이딴 오류 메시지... 재부팅을 통해서 문제는 해결했지만.. 원인을 찾아보았다. 원인은 해킹. 서버에 DB포트를 잠깐 열었던 사이에 1000번 이상의 로그인 시도 때문에 보안감사정책에 의해서 계정을 잠근것이었다. 제길..ㅡㅡ;
[SqlServer] FIX: SQL Server 2005 인스턴스를 부하가 높을 때 "17187" 오류 메시지는 오류 로그 파일에 기록될 수 있습니다. 특정 화면만 느려지는 현상이 있는 특정 거래처가 있다. 이 문제를 해결 하려 했지만 해결하지를 못했다. 그러던 중 이벤트 뷰어를 봤더니 아래와 같은 오류가 발견되었다. 이 문제에 관련된 해결책은 아래 링크를 참조 하면 된다. http://support.microsoft.com/kb/929376 이것이 해결책이길 간절히 빈다.
[SqlServer] MDF 파일 복원시 오류 '데이터베이스 xxx은(는) 읽기 전용이거나 읽기 전용 파일을 포함하고 있으므로 업그레이드할 수 없습니다. 데이터베이스 또는 파일을 쓰기 가능으로 설정한 다.. 거래처 PC가 맛이 가셨다. 하드 디스크를 복원했으니 데이터 복원 해달라고 해서 mssql 새로 깔고 이전에 있던 mdf 연결 하니 이딴 오류... '데이터베이스 xxx은(는) 읽기 전용이거나 읽기 전용 파일을 포함하고 있으므로 업그레이드할 수 없습니다. 데이터베이스 또는 파일을 쓰기 가능으로 설정한 다음 복구 작업을 다시 실행하십시오.' 파일이 읽기전용은 아니다..-_-;;; 관리도구 - 서비스에 가서 해당 sql 서비스의 속성을 열고 아래와 같이 변경한 후 다시 해보면 된다.
[SqlServer] 'PRIMARY' 파일 그룹이 꽉 차서 xxx 데이터베이스의 xxx 개체에 공간을 할당할 수 없습니다. 이런 경우를 본적이 있는가? 신규 거래처에서 갑자기 오류 메시지가 떴다면서 전화가 왔다. 저 오류 메시지를 검색해 보니 DB용량이 꽉 찬거니까 자동증가 기능을 사용하면 된다고 해서 해줬다. 안된다... 뭔가 잘못한게 아닐까 하면서 계속 설정해 봤지만 안된다... 혹시 몰라서 SQL을 다시 설치 하길 3번...안된다... 문제는 파일 시스템에 있었다. 데이터베이스 파일들이 있는 드라이브가 FAT32로 포맷 되어 있는 것! NTFS로 변경 하기 위해서 cmd 창을 열고 아래와 같이 하면 된다. 그전에 데이터베이스는 백업 받아야 한다. 포맷을 변환하고 나면 DB파일에 문제가 생기는 것 같다. 빨강색상은 자신의 시스템에 맞춰 변경하라. c:\> convert d: /fs:ntfs 파일 시스템 유형은 어쩌구 ~ ..
[SqlServer] DB 자동 닫힘 문제 거래처에서 프로그램이 간혹가다가 안된다고 해서 확인해 봤더니 DB 연결이 끊어졌다 연결 되었다 하는 현상을 발견 하였다. 대체 뭔 일인가 확인해 보니 데이터베이스 속성에 자동 닫기라는 속성이 활성화 되어서 자동을 끊어 버리는...ㅡㅡ; 아래와 같이 자동 닫기를 False로 해야 된다.
[SqlServer] @@IDENTITY 의문점들 후배와 ID열에 관련 대화를 하다가 SqlServer에 ID열이 자동 저장된 후 그 ID 데이터를 알수 있는 전역변수에 대해 생각났다. @@IDENTITY --이것이다! 이 변수는 자동증가형 ID 열에 마지막으로 삽입된 값을 보여준다. 이때 궁금한 점이 2개가 생겼다. 첫번째는 트랜젝션을 잡아두고 INSERT 할때 그 트랜젝션이 끝나지 않았을때 다른 트랜젝션에서 INSERT를 시도 하면 @@IDENTITY값은 무엇일까? 두번째는 INSERT를 다중으로 할때 중간에 INSERT 한 IDENTITY는 어떻게 알수 있을까? 우선 테이블을 하나 생성하고 테스트를 시작했다. CREATE TABLE [dbo].[TestIdentity]( [Id] [int] IDENTITY(1,1) NOT NULL, [data] [..
[SqlServer] 트랜잭션 로그 줄이기 SQL Server Management 에서 작업>축소>파일 로 해서는 줄어들지가 않는다. ㅡㅜ 아래와 같은 스크립트를 통해서 줄일수 있었다. Backup Log "DB명" With no_log DBCC SHRINKFILE ("논리적 로그명", 줄어들 MB) Backup Log Dentop With no_log DBCC SHRINKFILE (SetUpDB_log, 10) DB명이랑 논리적 이름은 다를수가 있다. 이 스크립트를 실행하면 로그가 10MB로 줄어들게 된다. //덧붙임 2010.3.8 SQL Server 데이터베이스 속성 - 파일 - 로그의 자동 증가 사용을 체크 해제 하면 로그가 증가 하지 않는줄 알았으나 전혀 상관 없었다. 적절한 최대 파일크기를 주어 자동증가 하게 하여야 한다.