출처 : http://smlim.tistory.com/189



간혹 이런 경우가 있다 칼럼명을 알고 있는데 테이블 명을 모를때 

이런 경우 테이블 명을 찾을 수 있는 쿼리문이 있다

select OBJECT_NAME(id) from sys.syscolumns where name='컬럼명'

태국에 게임 서버 서비스를 하려고 이것 저것 테스트 하던 도중

이상하게 쿼리를 한번에 3만개 정도 실행 시키면, 데드락 걸리면서 쿼리가 제대로 실행이 안되는 경우가 발생했습니다.

 

처음엔 이게 시간과 관련된 쿼리라 태국의 로컬시간대랑 뭔가 연관이 있지 않을까 이것 저것 보던중

태국에서 셋팅한 윈도우 설정에 문제가 있다는걸 확인했습니다.

 

CPU가 Xeon X5675 @ 3.07Ghz 에다가 16GB 렘이 있는 시스템인데

윈도우 2003 (32bit)를 설치해서 메모리를 제대로 소화를 못하는거 같더군요.

 

그런 고로, 메모리를 설정하는 것을 구글에서 찾아내서 적용시켜 보니 쌩쌩 날아다니는 DB....

ㅁㄴㅀㄴㅏㅣㅓㅈㅎㅁ5!@$

 

어쨋든.... 메모리 설정에 대해선

http://toe10.tistory.com/63 을 참고해서 셋팅했습니다.

 

혹시 모를 폭파 위험에 여기서 제가 한 셋팅 순서도 올려 놓겠습니다.

 

1. MSSQL에서 AWE(Address Windowing Extensions)을 설정해야 합니다만,

32bit 운영체제 이므로 그전에 Lock page in memory 권한을 얻어와야 합니다.

 

시작 -> 프로그램 -> 관리도구 -> 서비스에서

SQL Server Agent(MSSQLSERVER)의 사용자 명을 확인합니다.

 

 

 

2. 시작 -> 실행 -> gpedit.msc 를 실행한뒤 아래 그림처럼

Lock pages in memory 권한을 1과 같은 사용자에게 줍니다.

 

3. 서버 설정 탭에 들어와서 AWE 사용을 체크하고

최대 서버 메모리를 설정합니다 (단위는 MB)

 

4. 네트워크 속성에서 네트워크 응용 프로그램을 취해 데이터 처리량 최대화를 선택합니다.

...

문제는 "Microsoft SQL Server 2005 포켓 컨설턴트 관리자용"이란 책에선 이 옵션을 피하라고 기술 되어있습니다만..

 

음....

 

 

특정 테이블의 레코드들만 따로 백업할때 쓰는 방법 입니다. 

 

(보안상 중요한 텍스트는 다 삭제)

 

command 에 들어가서

백업

$> bcp [db명].dbo.[백업할 테이블명] out [백업 파일명] -c /U[db의 유저명] /P[db의 암호]

 

복구

$> bcp [db명].dbo.[백업할 테이블명] in [백업 파일명] -c /U[db의 유저명] /P[db의 암호] 

 

 

서버 점검하던중 뭔가 설정이 초기화 됬는지,

갑자기 서버 관리자 페이지에서 쿼리가 먹히지 않더군요.   (사용자 'x맨'이(가) 로그인 하지 못했습니다)

 

먼저 서비스 DB에 연결 되어있는건 확인됬고,

다음 게임 컨텐츠 DB에 연결 하려고, 안의 프로시저를 실행해본 결과, 특정 DB에만 접속을 못하고 아래의 에러가 나왔습니다.

"메시지 18456, 수준 14, 상태 1, 서버 <computer_name>, 줄 1"

"사용자 '<user_name>'이(가) 로그인하지 못했습니다."

"메시지 4064, 수준 16, 상태 1,"

사용자 기본 데이터베이스를 열 수 없습니다. 

 

 

결국, 이 얘긴 해당 DB에서 상대쪽 DB에 접근이 안된다는 의미이고,

msdn 의 http://support.microsoft.com/kb/307864/ko 의 도움말을 살펴본 결과

 

상대쪽 DB 보안 -> 로그인 -> 해당 계정의 기본 DB지정에 문제가 있음을 알게 되었습니다.

 

 

결국... 기본 DB를 연결해 주려는 DB로 설정하니 말끔이 해결...

 

... 알고나면 허망한 sql 세계 ㅠㅠ

+ Recent posts