C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[97] DB Programming Tip 4 --- How to use Query Analyzer in MS-SQL && 깜짝 dba
에보니.^0^ [ebony] 8403 읽음    2001-06-24 15:27
안녕하세요 에보니입니다.

이번팁도 많이 늦어졌죠?

다름이아니라 제가 이제 좀 되다 보니까 각종 일로 바쁘고 오프나 세미나에도 참석하느라 많이 늦어지네요.

하하 사실은 놀러다녔지만여. -_-;;

예 약속대로 (근데 언제 약속햇지. ^0^) 이번팁은 MS-SQL 에서 오라클의 SQL*PLUS 와 같은 역할을 하는 Query Analyzer(QA) 에 대해서 알아보겠슴다.

이넘은 SQL-SERVER 를 어떤 방식으로 설치하시던 간에 같이 설치되고 --- 커스텀 방식으로 설치시 옵션에서

안빼면 된다 --- 있스면 좋은넘입니다. 그리고 오라클의 SQL*PLUS 가 NET EASY CONFIG 의 앨리어스와

사용자 정보를 가지고 서버에 기들어가 쿼리질(?)을 수행하는 것과 마찬가지로 이넘도 MS-SQL SERVER 의

사용자 계정과 앞에서 말한 CLIENT NETWORK UTILITY 에서 설정한 앨리어스를 가지고 서버에 기들어가

쿼리질을 수행하는 넘입니다. 즉 기본적으로 클라이언트 적인 측면에서 같은 역할을 한다는 말이죠.

시작/프로그램/SQL SERVER~/Query Analyzer 로 이놈을 부르면 오라클의 SQL*PLUS 에서 처럼 접속창이 뜹니다.

모든 클라이언트와 서버의 프로그램은 이런식으로 동작하죠? 데이타베이스도 마찬가지입니다.

서버가 잇스면 클라이언트가 반드시 잇죠. 로그인을 하고 인증을 받는 건 가장 기본적인 시스템 프로세스 겠죠?

자 이녀석을 함 보면 오라클의 SQL*PLUS 와는 달리 되게 비주얼하게 되어 있다는 것을 알 수 있을거에여.

위의 컴보박스는 어떤 앨리어스로 들어갈 것인가를 선택하는 목록인데 CLIENT NETWORK UTILITY 에서 설정한 앨리어스들의 목록이 보일 것입니다. 그러니까 오라클의 SQL*PLUS 에선 ebony/ebony@ebony 이렇게 쳐야 기들어 가는데 뒤의 @부분(앨리어스)을 비주얼하게 컴보박스로 꾸며 놓았습니다. 컴보박스에 아무것도 없다구요? 옆의 버튼을 누르시면 붙을수 있는 클라이언트 네트웍 유틸리티에서 등록한 앨리어스들이 나타납니다.

따라서 client network utility 에서 설정해 놓은 앨리어스 정보대로 여러대의 서버에 기들어가 붙을 수있겠죠?. 실제로 여러대의 MS-SQL SERVER를 관리하는 dba들의 경우 EM (Enterprise Manager) 과 이 QA 를 이용해서 자기들 터미널(꾸진 컴터)에서 원격의 서버를 가지고 놀아여.

근데 돈없는 회사의 개발자나 여건이 안되는 학생들은 자기 컴터에 걍 깔고 개발하고 관리하고 배웁니다. -_-;;

자 클라이언트 앨리어스를 정하면 그 밑의 보안모드가 있고 사용자 계정과 패스워드를 묻는 창이 보임니다.

어떤모드를 사용하여 붙을래? 모드에는 2가지가 있는데 Windows 인증과 SQL Server 인증입니다.

Windows 인증이란 데이타베이스 서버에 기들어 가기 전에 먼저 사용자가 Microsoft network 에 어떤 사용자로 로그인하여 그 network 에 참여하고 있느냐에 대한 정보를 가지고 이넘이 데이타베이스를 사용할수 있는 사람인지 판단하고 인증을 내리는 방법입니다.

즉 데이타베이스도 network 내의 resource (자원) 이기 때문에 그 네트웍이 도메인으로 구성되어 있는지 작업그룹으로 구성되어 있는지 아님 자원(데이타베이스 서버) 이 도메인 내의 자원인지 아님 독립적인 자원인지에 따라서 그에 맞는 권한과 자격이 주어집니다.

따라서 그 자원을 사용하기 위해서는 해당 자원이 존재하는 네트워크내에서 인증을 받고 다시 그 인증이 해당 자원 자체의 인증까지 거쳐야 하는 것이죠. 그래야 기들어가 사용할 수 있다는 거에요. 물론 네트워크내의 인증과 자원을 사용할 수 있는 인증은 연결시켜 나야 겠죠. 사실 이건 개발자가 알아야할 내용은 아니고 (캬캭... 그래도 알믄 좋다니깐) 네트웍 관리자나 dba들이 설정을 하는 사항입니다.

즉 위에서 한참 떠들었는데 요점은 윈도우즈 인증이란 Microsoft 네트워크내에서 자원을 강력하게 관리할 수 있는 방법이란 말입니다.

그러니깐 네트워크에 로그인 한넘만 써라 글구 그중에서도 해당 자원(데이타베이스) 사용권한이 있는 사람만 사용할수 있는 인증 방법입니다.

사실 보안은 강력해 지겠죠. Microsoft Windows Network 의 인터라넷 내에서 주로 사용하는 방법입니다.

SQL Server 인증이란 사실 오라클 팁에서 사용한 방법입니다. 말 그대로 Sql Server 내에 사용자 정보와 권한들이 있고 사용자가 로그인 했을때 인증하고 그에 맞는 권한을 점검하는 방법을 사용하는 인증방법입니다.

자 그럼 로그인 합니다.

일단 윈도우즈 인증으로 접속합니다. 이때 랜과 같은 간단한 네트워크 상에서 독립서버(NT 4 일 경우 독립서버로 깔고 2000일 경우 설치하고 가만히 나두면 지가 알아서 독립서버됨.. ^0^)에 SQL-SERVER 가 설치(보통이렇게씀다. 가난한 벤처에선. -_-;;)되어 있고 어드민 계정이 EBONY 이고 암호도 EBONY 일때는 그냥 이렇게 치고 기들어 감니다.

아니면 SQL SERVER 인증으로 접속할때는 옆에서 자고 있는 DBA를 협박하고 다그쳐서 사용자 계정이나 어드민 계정, 비밀번호를 뜯어 냅니다.

보통 게으르고 멍청할수록 어드민계정은 SA 이고 비밀번호는 없습니다. ^ㅅ^;;

그냥 사용자 계정으로 접속할 경우는 그에 맞는 데이타베이스(오라클에선 테이블 스페이스입니다. 보통 오라클의 경우 솔라리스니 리눅스, 유닉스에선 동일 머신에 서비스 네임만 다르게하고 오라클을 몇번이나 깔수 있서여. 그때 다른 서비스 인스턴스를 부를때 데이타베이스라고 함니다.) 에서 게으르고 멍청한 DBA ( <--- 자꾸 이런 말해서 죄송한데 바로 저보고 하는 얘기입니다. 개발자가 아니고 DBA냐구요 아니요 워낙 회사에 인원이 적고 워낙 많은 일을 하니 저도 내가 누군지 몰르겟네여. 사실 에보니는 네트웍이나 서버관리도 하고 DBA도 하고 PM 도 하고 코딩(빌더 밖에 못함) 만능 노가다맨 철의 노동자, 박쥐 같은 놈임당.. -_-;; 아고 언제 편안한 회사에 가보나~ 소개좀 시켜줘여. ㅆ-ㅆ) 가 정해 놓은 대로 맘대로 놀고 나올수 있슴다.

자 그럼 뜯어낸 어드민 계정으로 기들어가 맘대로 놀아봐여. 일단 어드민계정으로 붙으면 텍스트 창이 뜨고 위의 콤보박스 창에 데이타베이스가 나옵니다. master 라고 쓰여있져. 이 데이타베이스는 MS-SQL SERVER 의 시스템 영역 같은 곳입니다.

물론 테이블을 만들어도 되는데 여기따 만들면 좀 자원 낭비가 심해요. 걍 오라클에서 처럼 어드민이 기들어 가는 곳이라고 알아둡니다.  dba가 준 사용자 계정으로 붙을때는 그 사용자가 놀수 있는 데이타베이스가 보이겠죠. 

자 그럼 MASTER 에서 놀아볼까요.


1. 먼저 어떤 데이타베이스들이 있나 보자.

exec SP_HELPDB   <--- 헐 오라클이랑 달르져. 이넘은 스토어 프로시저라는 넘이에요.

// 현재 데이타베이스보기

2. 어떤 넘들이 기붙을수 있나 보자.

exec sp_helplogins <--- 데이타베이스에 상관없이 로긴할 수 있는 넘들 다 보여준다.

exec sp_helpuser   <--- 현재 데이타베이스의 유저들을 보여준다.

// 로긴명과 사용자 보기.

3. 자 맘속으로 어떤 짓을 함 해볼까 결정 햇스면 먼저 데이타베이스를 하나 만들어여.

create DATABASE Mortalpain
(
    NAME = MortalpainData,
    FILENAME = 'D:\DATA\MortalpainData.MDF',
    SIZE = 1MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1MB
)
LOG ON
(
    NAME = MortalpainLog,
    FILENAME = 'D:\DATA\MortalpainLog.LDF',
    SIZE = 1MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1MB
)

// 데이타베이스 생성

오라클에서랑 비슷하죠? 단지 테이블스페이스가 데이타베이스로 바뀐것 밖에 없어여.

단지 LOG ON 부분이 있는데 그건 MS-SQL 에서는 데이타베이스를 생성할때 로그파일도 같이 만들어져야 됨니다.

각각의 () 부분의 옵션은 일일이 설명 안해 드려도 아실만큼 직관적입니다.

이렇게 하시고 위의 삼각형 화살표를 찍 누르거나 CTRL +  E 키를 누르면 Mortalpain 데이타베이스가 만들어집니다.


4. 자 그럼 데이타베이스가 만들어졌으니 사용자로 에보니를 추가 시켜 볼까요.

exec sp_addlogin 'Ebony', '01199121988', 'Mortalpain', 'us_English'

사용자 Ebony, 비밀번호 01199121988, 기본 데이타베이스 Mortalpain 으로 영어를 기본문자셋으로 먹는 Ebony 가 생성됨니당.

잘못 만든 경우

exec sp_revokelogin 'Ebony' 로 철회함니다.

아예 사용자를 지우자

exec sp_droplogin 'Ebony'

5. 만들었스니 데이타베이스에 붙여야져. 권한을 줍니다.

use Mortalpain  <---  해당 데이타베이스로 이동합니다.

exec sp_grantdbaccess 'Ebony'    <------- 붙을 수 있게 합니다.

exec sp_addrolemember 'db_owner', 'Ebony'   <-----  데이타베이스 소유자 권한을 줌니다. 그래야 테이블을 만듭니다.

다른 애를 붙여 버렷다.

exec sp_revokedbaccess 'Ebony'

헐 이넘은 소유자 권한을 줘선 안되겟네...

exec sp_droprolemember 'db_owner', 'Ebony'

exec sp_addrolemember '자기가 만든 롤 내지는 이미있는 롤', 'Ebony'

exec sp_droprolemember '자기가 만든 롤 내지는 이미있는 롤', 'Ebony'

6. 준비해 놓은 테이블과 관계 관련 sql 문들을 불려들여 한꺼번에 쫙 뺍니다.


7. 이것으로 팁 2에서 오라클과 햇던 방법 그대로 ms-sql 버젼을 해 보았습니다.


다음은 데이타베이스 변경입니다.

Alter database Mortalpain
Add file
(
    name = MortalpainData,
    filename = 'D:\DATA\MortalpainData.mdf',
    size = 2,
    maxsize = 10,
    filegrowth = 2
)

Alter database Mortalpain
Add Log file
(
    name = MortalpainLog,
    filename = 'D:\DATA\MortalpainLog.LDF',
    SIZE = 1,
    MAXSIZE = 5,
    FILEGROWTH = 1
)

// 데이타베이스 변경

SP_DBOPTION Mortalpain, 'SINGLE USER', TRUE <---- 이름을 바꾸기 전에 dba 한사람만 사용하게 합니다.
SP_RENAMEDB 'Mortalpain', 'Ebony'           <---- 이름을 Mortalpain 에서 Ebony 로 바꿉니다.
SP_DBOPTION Ebony , 'SINGLE USER', FALSE      <---- 여러 사람이 사용할 수 있게 합니다.

// 데이타베이스 이름변경

Drop Database icon2000

// 데이타베이스 삭제

헐 머 이 정도인데 사실 ms-sql 에서는 EM 이 비주얼하게 워낙 잘 되어 있서서 오라클 보다는 훨씬 쉽게 작업할 수 있습니다.

사실 이렇게 쿼리 분석기로 하는 것 보다 EM 이 훨씬 편하고 직관적입니다. 그러나 머든 한쪽이 없을 때를 생각해서 작업을 하셔야 겠죠?

그리고 주로 오라클이 SQL 문과 비슷한 것을 사용해서 디비 객체들을 생성 변경 삭제 하는 것에 비해 주로 MS-SQL 은 스토어 프로시저를 사용해서 그런 작업을 수행합니다. 그리고 MS-SQL 도 도스창을 통하여 접속할수 있습니다.

SQL 디렉토리의 툴들 중에 osql.exe 가 그런일을 하는데 도스창에서

osql -u로그인아이디 -p패스워드 -S클라이언트측 앨리어스  로 치믄 도스창으로 쿼리질창이 뜹니다.

예를들면 osql -Uebony -Pebony -Sebony 이렇게요.

붙은 후 숫자로 된 프롬프트가 보이면 거기다 쿼리질을 하시면 됩니다.

오라클에서는 ; 를 마지막에 치고 엔터키엿스나 여기서는 다음줄에 go를 치고 엔터키를 치면 쿼리질을 수행할 수 있어여.

기나긴 글이엇는데요. RDBMS 팁에서 Sybase 도 할까 햇는데 거의 뭐 오라클, MS-SQL 과 클라이언트 구성방식이나 BDE 와의 연결방식 또한 비슷하기 때문에 (거의 같음. Sybase 에서는 앨리어스 설정하는 넘을 Open Client 라고 함 ) 이것으로 RDBMS 팁을 마치고 다음 부터는 보다 실제적인 C++ Builder Database Programming 원리나 기법등에 대해서 부족하지만 말해 보겠습니다.

이상 에보니 엿슴니다. 여러분 즐 프 하세요. ^ㅅ^*;;


+ -

관련 글 리스트
97 DB Programming Tip 4 --- How to use Query Analyzer in MS-SQL && 깜짝 dba 에보니.^0^ 8403 2001/06/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.