데이터베이스

Total 205
Today 0
profile_image
지나니
07-09-17 10:38 0개 579회
MSSQL
시스템 카탈로그 엿보기

이번에 진행할 이야기는? 시스템 카탈로그 입니다. ^_^

master 데이터베이스, 등등의 시스템 데이터베이스들과 모든 데이터베이스에 들어 있는

시스템 테이블들을 의미 하지요.

우선 마스터 데이터베이스 등의 데이터베이스가 안 보이는 분들은?

아래처럼 해주시면 됩니다.

999915.JPG

이렇게 먼저 엔터프라이즈 관리자에서 <등록된 SQL Server 속성 편집>을 택하시고

 

999914.JPG

붉은 색의 줄이 쳐진 <시스템 데이터베이스 및 시스템 개체 표시> 를 체크 하시면?

이후 시스템 데이터베이스 들이 보일 겁니다.

999913.JPG

이러한 식으로 master, model, msdb, tempdb가 보일 겁니다.

 

- 시스템 데이터베이스들
   - master
   - model
   - tempdb
   - msdb

이렇게 4개의 시스템 데이터베이스가 있답니다.

먼저 이름도 중요할 듯 한 master 데이터베이스 입니다.

 

master database
  - 서버 전체에 영형을 미치는 데이터베이스
  - 사용자, 사용자 데이터베이스 들과 SQL서버의 동작을 관리
  - 잘못될 경우에 치명적인 결과를 초래하므로 사용자의 직접 접근을 허용하지 않는다.
  - 복구작업도 어려우므로 자주 백업해야한다.
  - master 데이터베이스에 기록되는 내용
    - 로그인 계정(syslogins)
    - 시스템 오류 메시지(sysmessages)
    - 저장된 데이터베이스(sysdatabases)
    - 각 데이터베이스에 할당된 저장장치(sysdevices)
    - 시스템 관리에 사용되는 시스템 프로시져(sysprocedures)

 

뭔가 무시무시 하지요?  master database는 그럼 수작업으로 수정은 불가한가?

입니다. 가능 합니다.

 
--수정을 가능하게 한다.
sp_configure 'allow updates',1
GO
RECONFIGURE WITH OVERRIDE
GO
--master 데이터베이스 수정 작업
 
--수정을 불가하게 만든다.
sp_configure 'allow updates',0
GO
RECONFIGURE WITH OVERRIDE
GO
 

 

다음은 Model 데이터베이스 입니다.

model database
  - 새로 생성되는 데이타베이스의 원형으로 이용된다.
    새로운 사용자 데이타베이스를 생성하는 명령을 수행하면 SQL서버가 
    model 데이타베이스를 복사하여 새로운 데이타베이스를 구성한다.
    모든 사용자 데이타베이스에 포함되는 시스템 테이블을 가지고 있다.
  - model 데이타베이스에대한 변경은 이후에 생성되는 모든 데이타베이스에 반영된다.
    생성될 사용자 데이타베이스에 항상 포함하고자하는 항목들을 추가하거나 변경시킬수 있다.   

이녀석은 조금 느낌이 오시겠지만.. 사용자가 데이터베이스를 생성하면? 기본적인 구조는

모두 이 model 데이터베이스에서 복사해 옵니다. 따라서 이 model 데이터베이스가

탬플릿이 된다는 거지요. 이곳에 데이터베이스 개체를 생성해 두시면? 추후 생성되는

데이터베이스에 모든 개체가 그대로 복사 되는 겁니다.

 

이 model 데이터베이스에 두면 좋을 것은?

model database 에 일반적으로 변경하는 항목들
  - 사용자 정의 자료형(user-defined datatype), 규칙, 디폴트, 
    저장 프로시져(stored procedure)의 추가
  - SQL 서버의 모든 데이타베이스에 접근할 수 있는 사용자의 추가
  - 디폴트 권한의 추가
  - 데이타베이스 구성 옵션들의 설정

이런 정보를 두면? 추후 유용하게 사용이 가능 하지요.

 

다음은 tempdb 데이터베이스 입니다.

temp database
  - 임시 테이블들과 GROUP BY, ORDER BY, DISINCT 등의 중간 결과 저장에 필요한 
     임시 저장 공간을 제공
  - SQL서버 설치 중에 자동적으로 생성된다.
특징
  - 전역 임시 테이블을 제외한 모든 임시 테이블은 사용자가 SQL서버와 접속을 끝낼때 삭제된다.
  - SQL서버가 정지되면 모든 테이블이 tempdb로부터 삭제된다.
  - 사용하고 있는 데이타베이스와 관계없이 모든 임시 테이블은 tempdb에 저장된다.
 
NT와 윈도우즈 2000 등에 페이지 화일 이라는 임시 공간이 있는 것처럼... SQL서버도 이런
임시 공간을 가지고 있답니다.
 
USE pubs
GO
--임시 테이블을 생성
CREATE TABLE #A(
a int
)

INSERT INTO #A VALUES(1)
INSERT INTO #A VALUES(2)


SELECT * FROM #A
a 
----------- 
1
2

(2개 행 적용됨)

--새로운 사용자로 쿼리 분석기에 하나를 더 연다. 화일 -> 연결 을 눌러 접속 시킨다.
--그후 다시 SELECT를 해 보면?
SELECT * FROM #A
서버: 메시지 208, 수준 16, 상태 1, 줄 2
Invalid object name '#A'.
 

#테이블명은 세션 사용자에게만 국한되는 임시 테이블 입니다.

다른 세션(서버가 부여하는 ID)의 사용자는 이 임시 테이블 사용이 불가 하지요.

 

 
USE tempdb
GO

SELECT * FROM sysobjects WHERE type = 'U'
 

하시면 테이블을 볼 순 있답니다.

 

전역 임시 테이블인 ##테이블명  으로 생성하는 임시 테이블 샘플 입니다.

 

USE pubs
GO
--전역 임시 테이블 ##B를 생성한다.
CREATE TABLE ##B(
b int
)

INSERT INTO ##B VALUES(1)
INSERT INTO ##B VALUES(2)


SELECT * FROM ##B
--새로운 사용자로 쿼리 분석기에 하나를 더 연다. 화일 -> 연결 을 눌러 접속 시킨다.
--그후 다시 SELECT를 해 보면?
USE pubs
GO

SELECT * FROM ##B
--결과가 보일 것이다.

USE tempdb
GO

SELECT * FROM sysobjects WHERE type = 'U'
 

##과 #의 차이는 #는 세션사용자에 제한 된다는 것, 아울러 ##는 전체 로긴된 사용자가

사용이 가능한 임시 테이블이라는 것입니다.

 

 
SHUTDOWN
 

MSSQL서버를 종료 합니다.

 

999912.JPG

위처럼 명령 프롬프트를 실행 하시고..

net start mssqlserver 라고 하시면? SQL서버를 시작할 수 있습니다.

또는 서비스 매니져에서 실행을 시키셔도 됩니다. 실행을 시키신후..

 

 
USE tempdb
GO

SELECT * FROM sysobjects WHERE type = 'U'
 

라고 해 보시면? #A 테이블과 ##B테이블이 없어진게 보이실 겁니다.

 

다음은 msdb에 대한 설명입니다.

msdb database
- SQL Executive Service(replication, task scheduling, alerts management)의 지원
: SQL agent Service에 관련된 시스템 정의 테이블들을 유지한다.
- sysalerts
: 모든 사용자정의 경보(alert)들에대한 정보를 저장한다.
- sysbackupdetail(sysrestoredetail)
: 백업(restore)에 사용될 디바이스에 대한 요약 정보를 저장한다.
- sysbackuphistory(sysrestorehistory)
: 백업 작업에대한 요약정보를 저장한다.
- syshistory
: 경보, 작업의 성공/실패, email을 받은 운영자의 신원, 작업 재시도 횟수, 실행 일시 등에 대한 이력을 저장한다.
- sysservermessages
: 서버와 관련된 정보에 대한 모든 메시지를 저장한다.
- sysnitifications
: 어떤 운영자가 어떤 경보와 관련되어 있는지와 운영자에게 알리는 방법 등을 저장한다.
- sysoperators
: 작업 스케쥴, e-mail주소, 무선호출 번호 등 운영자에 대한 모든 정보를 저장한다.
- systasks
: 사용자 정의 작업들에 대한 정보를 저장한다.
: SQL agent Service는 이 테이블을 내용을 조사하여 어떤 작성이 시작되어야 하는지를 결정한다.
 

간단히 SQL 서버 Agent 라는 자동화 데몬과 관련된 작업을 하는 데이터베이스라고 생각 하심

쉬우실 겁니다.

 

다음은 모든 데이터베이스에 포함되는 시스템 테이블에 대해 알아 볼까요?

 
USE pubs
GO

SELECT name FROM sysobjects WHERE type = 'S'
 

식으로 데이터베이스 포함된 시스템 테이블을 보실 수 있습니다. 'S' 대신 'U'로 하심?

사용자 테이블만 볼 수도 있지요.

 

시스템 테이블들
- 데이타베이스의 구조를 정의한다.
        모든 시스템 테이블의 이름은 sys로 시작한다.
        master데이타베이스는 모든 시스템 테이블을 포함한다.
        사용자 데이타베이스는 시스템 테이블들 중에서 일부만을 포함한다.
- 모든 데이타베이스가 포함하는 시스템 테이블들
sysalternatives, syscolumns, syscomments, sysdepends, sysindexes, syskeys, syslogs, sysobjects, sysprocedures, sysprotects, syssegments, systypes, sysusers, sysreferences, sysconstraints, sysarticles, syspublications, syssubscriptions
- master 데이타베이스만이 포함하는 시스템 테이블들
syscharset, sysconfigures, syscurconfigs, sysdatabases, sysdevices, syslanguages, syslocks, syslogins, sysmessages, sysprocesses, sysremotelogins, sysservers, sysusages

 

시스템 테이블 이름과 간략한 설명
sysalternatives SQL서버 사용자와 데이타베이스 사용자간의 대응관계
syscolumns      
  테이블 또는 뷰의 각 컬럼과 저장프로시져의 매개 변수에 대한 정보 
syscomments     
  뷰, 규칙, 디폴트, 트리거, 저장 프로시져에 대한 SQL문
sysdepends      
  프로시져, 뷰, 트리거에 참조된 프로시져, 뷰, 트리거
sysindexes      
  각 인덱스에대한 정보
syskeys         
  참조키, 기본케에대한 정보
syslogs         
  트랜젝션 로그
sysobjects      
  각 객체(테이블, 뷰, 저장 프로시져, 규칙 등)에 대한 정보
sysprocedures   
  뷰, 규칙 디폴트, 트리거, 저장 프로시져에 대한 정보
sysprotects     
  사용자 권한에 대한 정보
syssegments     
  각 세그먼트에 대한 정보
systypes                
  시스템 타입 또는 사용자 정의 타입에 대한 정보
sysusers                
  해당 데이타베이스를 사용할 수 있는 각 사용자에 대한 정보
sysreferences   
  생성된 참조 제약에 대한 정보
sysconstraints  
  생성된 모든 제약에 대한 정보
sysarticles     
  replication을 위해 작성된 article에 대한 정보
syspublications 
  생성된 publication에 대한 정보
syssubscriptions        
  subscribing 서버의 각 subscription에 대한 정보

 

시스템 테이블들 많지요? ^_^

 

다음은 시스템 프로시져 입니다.

이는 북스 온라인에서 System Stored Procedures 로 검색해 보시면? 많은 자료를 보실 수 

있습니다. 간단히 자주 사용하는 것들 위주로 설명을 드리지요.

 

시스템 프로시져
- SQL의 일상적인 관리 작업을 위해 시스템 테이블을 질의하는 간단한 방법을 제공한다.
  SQL서버를 관리하고 데이타베이스와 사용자들에 대한 정보를 보기 위해 사용한다.
- 구성 및 특징
  미리 컴파일된 SQL문들의 집합
 master 데이타베이스에 존재한다.
 시스템 관리자가 소유하지만 모든 데이타베이스에서 실행이 가능하다.
시스템 프로시져 - 대표적인 시스템 프로시져들
  - sp_help [object name]
    데이터베이스 객체가 특정 데이터 유형들에대한 정보를 보여준다.
  - sp_helpdb[dbname]
    데이타베이스가 저장된 디바이스의 이름, 데이타베이스와 로그의 크기, 작성한 날짜 
      등을 보여준다.
  - sp_helpindex tablename
    색인들에 대한 정보를 보여준다.
  - sp_spaceused [objectname][[,]@updateusage = {true|false}]
    특정 객체가 사용하고 있는 공간의 크기를 알려준다.

 

시스템 테이블들 부가적인 내용
  syscharsets     문자 집합 또는 정렬 순서
  sysconfigures   구성 가능한 환경 변수들
  sysdatabases    해당 SQL서버에 존재하는 데이터베이스들
  sysdevices      서버에 알려진 language
  syslocks         active locks
  syslogins       사용자 계정정보
  sysmessages     시스템 오류 메시지
  sysprocesses    진행중인 process
  sysremotelogins remote 사용자 계정
  sysservers      remote 서버
  sysusages       각 데이터베이스에 할당된 용량

 

시스템 테이블과 데이타베이스 구성요소
        - 모든 데이타베이스 구성요소에 대한 정보는 시스템 테이블에 저장되어 있다.
 

데이타베이스 구성요소 

시스템 테이블

데이타베이스 객체  

인덱스  

자료형

제약사항 

 sysobject

  sysindexes

  systypes

sysconstraints, sysreferences

 
        !!!! sp_help tablename
        : 주어진 테이블에 대한 인덱스, 디폴트, 제약사항 등에 대한 정보를 보여준다.

 

자 여기까지가 시스템 프로시져 였습니다. ^_^

 

이정도면? 제가 드릴 이야기는 거의 드린듯 하네요. 시스템 카탈로그 많지요?

이녀석들이 실제 MSSQL서버2000을 유지하는 시스템 요소 랍니다.

 

끝으로 

 

마스터 데이터베이스의 전체 스키마

http://sqler.pe.kr/images/sys_diagram1.JPG 

 

일반 데이터베이스의 시스템테이블 구조

http://sqler.pe.kr/images/sys_diagram2.JPG

 

 

에서 보실 수 있습니다. 참고 하시길 바랍니다.

자 다음은 테이블들에 대한 이야기를 풀어 드리도록 하지요. 수고하셨습니다.

그럼 이만.

 

추천 0 비추천 0

댓글목록

등록된 댓글이 없습니다.