2018년 2월 19일 월요일

리눅스





1. 리눅스 OS의 구조 및 특징

  CentOS : RHELL 소스 코드로 빌드한 공개 무료 배포판
  Ubuntu : 학교나 가정에서 사용하기 쉽도록 만들어진 공개 무료 배포판
              CLI를 통하지 않고, 그래픽 데스크탑 환경에서 리눅스를 쉽게 사용할 수 있도록 함. 
  Mint : 홈 엔터테인먼트용으로 만들어진 공개 무료 배포판
  리눅스 OS 설치 방법
  VirtualBox-5.2.4-119785-Win
   Oracle_VM_VirtualBox_Extension_Pack-5.2.4-119785
  https://www.ubuntu.com/download/desktop
  하드디스크는 Ubuntu.vmdk파일로 만들어짐. 



2. 리눅스 OS 파일시스템 구조와 기능
 
리눅스 파일시스템 표준 계층구조(Filesystem Hierarchy Standard, FHS)

  / : 루트 디렉토리, 리눅스 시스템의 모든 내용을 "/" 디렉토리 하위에 위치한다. 
  bin : binary 모든 사용자가 사용하는 필수 명령어(windows/system32 폴더와 유사함)
  dev: 디바이스 파일
  etc : 구성파일
  home : 사용자, 프로젝트 데이터 보관
  lib : /bin, /sbin 하위 실행 파일이 사용하는 라이브러리 
  media, mnt : 임시마운트 포인트
  proc : PID(process id)가 관리되고 있다. 
  sbin : super user 명령어
  usr : usr/bin/ 외부에서 받은 실행파일
  var : 로그파일, 메일등을 저장하는 파일크기를 예측할 수 없는 파일 저장
  dev, proc, var는 in-memory directory로 power-off 하면 다 날라간다. 
  윈도우와 리눅스 파일 공유방법 : virtual box의 공유폴더 기능을 사용한다. 
  VM MANAGER -> 설정 -> 공유폴더 -> 추가 ->  (C:\linux\shared, 자동마운트 체크)
  윈도우 해당폴더에 파일을 추가한다음, ubuntu 터미널 media/Sh_shared 에서 파일 확인이 가능하다. 
  리눅스 운영체계의 특징
  - 멀티 유저, 멀티 태스킹 운영체제 (파일권한 관리가 중요하다!)
  - 유닉스와 호환가능
  - CUI(Command User Interface), GUI(Graphic User Interface) 지원
  - 하드웨어를 제외하고는 비용이 들지 않는다. 
  - 저가 가격대의 하드웨어 플랫폼 상에서도 동작한다. 



3. 리눅스 쉘 기초 커맨드 기능 및 활용

  리눅스 쉘

  쉘(shell)이란?
사용자가 입력한 모든 명령어를 읽어서 해석하고 이에 따른 입출력을 제어하는 명령어 인터프리터임. 
  ubuntu terminal 에서 명령어 ps로 쉘의 종류를 확인할 수 있다. => bash 쉘 사용


  쉘명령어

  명령어 뒤에 -를 붙여 옵션을 추가할 수 있다. 해당 명령어에 붙여 사용할 수 있는 옵션은 man 명령어를 사용하여
 매뉴얼 페이지에서 상세확인 가능하다. 
  "|" : pipe, 다중 명령어를 쓸 때 사용한다. 
  echo : 변수명을 출력, 쉘에서 변수는 대문자로 쓴다. 
  lsblk : list block devices
  df -h : report file system disk space usage 
  cd : change directory
  cd ~ : go to home directory
  cd .. : go to parent directory, . 는 current directory를 의미하고 ..는 parent directory를 의미한다. 
  pushd, popd : 다른 디렉토리 갔다가 현재 디렉토리로 바로 돌아오고 싶을때, 현재 디렉토리 저장하고 불러옴 
  pwd : print out current working directory
  ls : list directory contents
  ls -a : see hidden files 
  ls -R : 루트밑에 파일 다 보여주기. -R 옵션은 계속 반복한다는 의미이다. 
  which : shows the full path of commands
  type : Display information about command type
  cat : reads files 
  head coffee.txt : coffee.txt 파일의 처음 열줄만 읽어서 보여준다. 
  tail coffee.txt : coffee.txt 파일의 마지막 열줄만 읽어서 보여준다. 
  ps : shows the currently running processes
  ps -ef : 현재 시스템 전체에서 실행 중인 프로세스의 목록과 상태 
  su : switch user
  su - : login 
  su와 su- 는 완전히 다른 개념이며, 환경변수와 working directory에 영향을 준다. 
  mkdir : make directory
  rmdir : remove directory
  touch : make file
  cp : copy
  cp -r aa bb : aa디렉토리의 내용 전체를 새로운 디렉토리 bb로 복사함
  mv : move
  mv bbb dir1 => destination이 디렉토리이면 옮겨가고, 아니면 rename 된다. 
  rm : remove
  chmod : change mode, 파일의 사용권한을 변경함
  umask : user mask, 새 폴더 새 파일의 permission을 결정하는 값
  whoami : shows the current effective user ID
  id : display complete user information, 모든 user는 id가 있고, Root의 id는 0이다. 
  grep : 문자열 찾기
  grep -n three count.txt : count.txt 파일에 three라는 문자열을 검색하고 line number도 출력
  grep -v t count.txt : count.txt 파일에 t가 없는 문자열을 검색
  find : 디렉터리 위치 검색
  ps -ef | grep hello : 현재 실행 중인 전체 프로세스 중에서 그 이름이 hello인 프로세스를 확인
  kill : send signal to a process
  kill -l : show the list of kill signal

  1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
 11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
 16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
 21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
 26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
 31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
 38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
 43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
 48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
 53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
 58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
 63) SIGRTMAX-1    64) SIGRTMAX 

 15) SIGTERM : 이 시그널을 받는 프로세스는 프로그램을 종료하기 전에 프로그램을 종료하는 처리를 수행할 수 있다.
9) SIGKILL : 프로세스를 바로 강제종료한다. 
  kill -9 -1 : 중지시킬 수 있는 모든 프로세스를 중지시킴
  리눅스에서 파일의 특징
  리눅스에서 모든 것은 파일로 표현하며, 모든 파일 이름은 대,소문자를 구분함. 
  DAC(discretionary access control) : 리눅스 보안 매커니즘으로 모든 file에는 owner, group,  permission이 있다. 
  파일 소유권과 허가권 제어 명령어 활용
  r: read, w: write, x: execute
  permission에 따라서 명령어를 실행할 수 있고, permission denied 될 수 있다. 
  cd 명령어는 x(execute) 권한이 없으면 실행할 수 없고, ls 명령어는 r(read) 권한이 없으면 실행할 수 없다. 
  grep 명령어는 r(read) 권한이 있어야 한다. 
  mkdir 명령어로 새로 디렉토리를 만든다음, ls -l 명령어로 해당 디렉토리의 default permission을 확인할 수 있다. 
  기본 perssion을 변경하고 싶으면 umask 값을 변경하면 된다. 

  ex)
 inux@ubuntu:~/lab$mkdir dir4
 linux@ubuntu:~/lab$ls
 a.c  b.c  coffee.txt  count.txt  dir1  dir2  dir3  dir4  filecheck.txt
 linux@ubuntu:~/lab$ ls -ld dir4
 drwxrwxr-x 2 linux linux 4096  2월  9 09:54 dir4  // rwxrwxr-x 권한은 8진수로 775 : default permission
 linux@ubuntu:~/lab$ umask
 0002

 => directory full permission 은 777이며, -002 해서 775 가 default directory permission이 되었다. 
  rwt : 내가 쓴 것만 지울 수 있는 권한. 
  사용자 제어 관련 명령어 활용
  adduser : 사용자추가 
  useradd : 사용자 계정 생성
  사용자 권한 제어 
  사용자의 기본 디렉토리는 home 밑에 있다. 
  리눅스 리다이렉션
  >' : 출력을 특정 위치로 옮김
  ex)
터미널을 새로 연다음 tty 하면
linux@ubuntu:~$ tty
 /dev/pts/18
구터미널에서
linux@ubuntu:~/lab$ tty
 /dev/pts/4
 linux@ubuntu:~/lab$ ls -l > /dev/pts/18
하면 새 터미널에 출력된다. 



4. 리눅스 vi 편집기 동작 및 사용
  vi편집기
  vi의 3가지 모드 
  1. 들어가면 바로 명령모드 
  2. :q, :x, :wq :exit 모드 
  3. a, o, I 키 입력모드 
  vi편집기 안에서 shell 명령어를 다 사용할 수 있다. 명령어 안에 ! 를 붙이면 된다. 



5. 기타 내용
  Samba 사용하기, Samba를 사용하면 공유폴더가 필요없다. 
  Samba : standard Windows interoperability suite of programs for Linux and Unix
  sudo apt-get install samba
 linux@ubuntu:/etc/samba$ ls
 gdbcommands  smb.conf  tls
 linux@ubuntu:/etc/samba$ sudo vi smb.conf
 [sudo] password for linux:

맨 밑에
[linuxshare]
 path=/home/linux
 browseable=yes
 writeable=yes
 only guest=no
 public=no
 create mask=0644
 directory mask=0755
를 붙이고 :wq 를 입력하고 나온다.

linux@ubuntu:/etc/samba$ sudo smbpasswd -a linux
 New SMB password:
 Retype new SMB password:
 Added user linux.

리눅스가 삼바 그룹에 들어감


  linux@ubuntu:/etc/samba$ sudo /etc/init.d/samba restart
 [ ok ] Restarting nmbd (via systemctl): nmbd.service.
 [ ok ] Restarting smbd (via systemctl): smbd.service.
 [ ok ] Restarting samba-ad-dc (via systemctl): samba-ad-dc.service.

삼바를 실행한다.

linux@ubuntu:/etc/samba$ ifconfig
 Ip를 확인한다
 윈도우 탐색기에서 해당 IP 폴더로 접속한 다음에 linux ubuntu 계정으로 로그인한다

 그러면 path=/home/linux 이 파일들을 확인할 수 있다.

윈도우에서 파일을 만들고 리눅스에서 확인을 하면 아래와 같다.

linux@ubuntu:~/lab$ ls -l share.txt
 -rw-r--r-- 1 linux linux 0  2월  9 14:12 share.txt
  리눅스에서 절대로 마스킹 시키지 못하는 시그널 3개!
  1. 9번 SIGKILL : 마스킹하게 되면 프로세스가 무한정 돌아가게 될 수 있어서 절대로 마스킹할 수 없다. 
  2. ctrl+s : 일시정지
  3. ctrl_q : 다시시작




2018년 2월 6일 화요일

MSSQL - SMO(SQL Management Objects)




SMO(SQL Management Objects) 지원

관리자가 수행해야 하는 관리작업을 자동화하면, 관리작업에 대한 오류나 일관성이 없는 관리작업의 발생가능성을 줄여줄 수 있습니다. 특히, 다수의 SQL Server 와 인스턴스가 존재하는 엔터프라이즈 환경에서는 더욱 관리작업의 자동화가 필요합니다. SQL Server 2005에서는 반복적인 공통 관리 작업의 자동화를 지원하기 위한 SQL 관리 개체(SMO) API를 제공합니다.
SMO 란?
SMO는 관리작업을 위한 프로그램과 스크립트를 생성할 수 있는 기반의 역할을 합니다. SQL Server 개체와 작업을 관리하기 위해서 사용할 프로그램을 개발하기 위한 프로그래밍 개체 집합을 의미합니다.
SMO는 .NET 어셈블리(Microsoft.SqlServer.Smo.dll)로 구현되어 있습니다. SMO는 개체의 계층구조와 고유의 개체 모델을 제공합니다.
SMO를 사용하여 서버 구성 옵션의 조회 및 변경, SQL Server 에이전트 작업 관리, 백업일정계획 관리 등과 같은, 대부분의 관리작업을 수행하기 위한 어플리케이션을 개발할 수 있습니다.
SMO에서 지원하는 SQL Server 버전
SMO는 SQL Server 7.0, SQL Server 2000, SQL Server 2005가 구동중인 서버에 대한 프로그래밍 기반을 제공합니다. 단, SQL Server 가 호환성 수준 60이나 65로 구동중인 경우에 는, 일부 작업에 대해서 오류가 발생하게 됩니다.
SMO 구현
SQL 관리 개체는 .NET 어셈블리내에 클래스로 구현되어 있습니다. SMO를 사용하여 어플 리케이션을 개발하고자 할 때에서는, 기본적으로 다음과 같은 어셈블리를 사용해야 합니다.
  • Microsoft.SqlServer.Smo.dll - 대부분의 SMO 클래스를 제공합니다.
  • Microsoft.SqlServer.ConnectionInfo.dll - SQL Server 인스턴스와 연결에 사용되는 클래
    스를 제공합니다.
각 어셈블리에는 다수의 네임스페이스와 클래스가 포함되어 있습니다.
기존 SQL-DMO의 대체기능
SQL 분산관리개체(SQL-DMO)는 이전 버전 SQL Server 에서 지원되던 데이터베이스 관리를 위한 프로그래밍 인터페이스입니다. SMO는 기존 SQL-DMO를 대체하는 역할을 합니다. SMO는 SQL-DMO에 비해서 좀 더 효율적으로 자원을 사용하여, 관리작업을 자동화하기 위해 좀 더 세밀한 부분까지 통제할 수 있습니다. 기존 SQL-DMO에 대한 지식을 보유하고 있는 사용자라면, SMO에 대한 학습에 도움이 될 것입니다.
SMO의 기능
SQL Server 2005에서 지원하는 SMO의 주요기능은 다음과 같습니다.
  • 최적화된 인스턴스 생성. SMO는 SQL-DMO에서 사용하는 것처럼 전체 개체에 대한 인스턴스를 생성하지 않고 가능한 범위내에서 필요한 부분에 대한 인스턴스를 생성하기 때문에 성능을 향상시킬 수 있습니다. 코드에서 명시적으로 개체에 대한 참조를 설정하는 경우에만, 전체 개체에 대해서 인스턴스를 생성하게 됩니다.
  • 실행 보류. SMO는 기본값으로 각 명령을 즉시 수행합니다. 실행 보류 기능을 통해, 데이터베이스에 변경사항을 적용하기 전에 검토하기 위해서, 특정 시점까지 명령의 실행을 보류할 수 있습니다.
  • WMI 호환. SMO는 SQL Server WMI 공급자에 대한 래퍼 클래스를 제공하여, SQL Server에 대한 자동화된 코드의 일관성을 위지하기 위해 WMI 프로그래밍 인터페이스를 제공합니다.
  • 스크립트 작성. SMO는 Scripter 클래스를 통해, 단일 개체를 기반으로 하여 전체 종속성 트리에 대한 스크립트 작업을 자동화하는 것과 같은, 개선된 스크립트 기능을 제공합니다.
  • 서버옵션구성. SMO 는 sp_configure 저장 프로시저와 동일한 방법으로 서버 구성 옵션을 조회하고 변경할 수 있는 기능을 제공합니다.
SMO와 SQL Server 분산 관리 개체(SQL-DMO) 비교
SMO는 이전 버전 SQL Server 에서 제공하던 SQL Server 분산관리개체(SQL-DMO)의 역할을 완전히 대체합니다. SQL Server 2005 데이터베이스 엔진에 상당히 많은 내부구조상의 변경이 있었기 때문에, 이러한 변경사항의 효과를 충분히 활용할 수 있는 SMO를 사용해야 합니다. SMO는 가장 효율적인 자원활용을 할 수 있도록 최적화되어 있으며, 네트워크상에서 개체에 대한 인스턴스를 생성하기 위해 사용하는 메모리 사용량을 절감해 줍니다. SMO를 사용하면, 개발자가 개체에 대한 인스턴스를 생성하는 시점에 대해서 좀 더 세밀하게 통제할 수 있습니다.
[참고]
SQL Server 2005에도 SQL-DMO가 여전히 지원되지만, SQL-DMO는 하위버전호환성을 보장하기 위한 목적으로만 사용해야 합니다. SQL-DMO는 SQL Server 2005 환경에 최적화되어 있지 않습니다. 새로운 개발 프로젝트에서는 반드시 SMO를 사용해야 합니다.
SMO and WMI
SQL-DMO는 SQL Server 에 대해 프로그래밍 관점에서의 인터페이스를 제공하였습니다.
SMO에서는 프로그래밍 기능에 추가하여, WMI 와의 인터페이스를 단순화하는 기능을 통해 좀 더 관리자적인 접근이 가능하도록 지원합니다. SMO와 WMI을 사용하여 관리자는, SQL Server 2005 서버와 인스턴스에 대한 모니터링 및 구성작업을 효율적으로 관리할 수 있습니다.
SMO Scripting
SMO는 Scripter 클래스를 통해 좀 더 개선된 스크립트 작성 기능을 제공합니다. 예를 들어, Scripter 클래스를 사용하여, 단일 개체을 기반으로 한 전체 종속성 트리에 대한 스크립트 작업을 자동화할 수 있습니다.
SMO 개체모델
SMO 개체 모델에는 데이터베이스와 데이터베이스 서버를 관리하기 위한 전체 프로그래밍 인터페이스를 제공하는 역할을 하는 여러 개의 네임스페이스와 클래스가 포함되어 있습니다. 일부 클래스는 쉽게 찾을 수 있지만, 일부 클래스는 참조하기 위해 좀 더 자세한 탐색이 필요한 경우도 있습니다. SMO에서는 관리작업을 지원하기 위해, 크게 instance 클래스와 utility 클래스를 지원합니다.
개체 계측구조
계층구조로 된 Instance 클래스
Instance 클래스는 데이터베이스 서버, 데이터베이스, 테이블, 뷰, 사용자정의함수 등과 같은, SQL Server 개체를 포함하고 있습니다. 각 클래스는 표준 데이터베이스 개체 계층구조와 직접적으로 매핑되어 있기 때문에 좀 더 쉽게 개발작업을 수행할 수 있습니다. 부모개체는 다수의 자식 개체(예를 들어, 하나의 테이블에 다수의 컬럼 포함 가능)를 포함할 수 있고, 각 자식개체의 집합은 컬렉션 개체로 표현할 수 있습니다. 자 별도의 독립된 개체로 표현할 수 있습니다.
모든 컬렉션 클래스는 컬렉션 클래스에 포함된 개별개체에 접근하기 위한 인터페이스를 제공합니다. 예를 들어, Views 컬렉션 클래스에는 데이터베이스에 따라 하나 또는 그 이상의 View 개체를 포함할 수 있습니다. 또한, Views 컬렉션 클래스에 View 개체가 하나도 포함되지 않을 수도 있습니다.
Utility 클래스
Utility 클래스는 개별 서버나 데이터베이스 개체에 매핑되지 않고, 부가기능을 제공하기 위해서 존재합니다.
SMO 개체 참조
SMO를 사용하여 관리작업을 자동화하는 처리절차는 다음과 같습니다.
  1. .NET 기반 클라이언트 어플리케이션 생성.
  2. SQL SMO 어셈블리 참조.
  3. 코드내에서 Imports (Microsoft Visual C# 에서는 using 구문)구문을 사용하여, 필요한 네임스페이스에 대한 참조를 설정
.NET 기반 클라이언트 어플리케이션 생성
SMO는 모든 .NET 기반 어플리케이션(Windows Form 어플리케이션, 콘솔 어플리케이션, ASP.NET 웹 어플리케이션)에서 사용할 수 있습니다. 어플리케이션의 목적에 따라 개발할게 될 클라이언트의 유형이 결정됩니다. 예를 들어, 본사에서 전체 데이터베이스를 통합관리해야 하는 상황이라면, 클라이언트 컴퓨터에 별도의 설치가 필요없는 ASP.NET 기반 인트라넷 어플리케이션을 개발하는 것이 바람직합니다. 또한, 전세계 어느 곳에서도 관리작업을 수행할 수 있도록, ASP.NET 인트라넷 어플리케이션에서 보안이 보장된 연결을 사용할 수 있습니다.
SMO 어셈블리 참조
어플리케이션에서 관리작업을 수행하기 위해서는, 반드시 Microsoft.SqlServer.Smo.dll 어셈블리에 대한 참조를 .NET 프로젝트에 추가해야 합니다. 필요에 따라 추가적인 기능을 위해 다음과 같은, 관련 어셈블리도 추가할 수 있습니다.
어셈블리설명
Microsoft.SqlServer.ConnectionInfo.dllSQL Server 인스턴스에 대한 연결을 명시적으로 관리하기 위한 클래스 제공
Microsoft.SqlServer.SmoEnum일부 SMO 개체의 작업을 보조하기 위한 열거형 포함
SMO 어셈블리는 SQL Server 2005의 클라이언트 도구 설치 옵션의 일부로 포함되어 전역 어셈블리 캐시(GAC)에 등록됩니다. SMO 관련 어셈블리는 클라이언트 어플리케이션의 설치패키지에 일부로 포함되어 클라이언트 컴퓨터에 배포할 수 있습니다.
Microsoft Visual Studio.. .NET 프로젝트에서 참조를 추가하기 위해서는 다음 절차를 수행합니다.
  1. 프로젝트 메뉴-참조추가 옵션을 선택합니다.
  2. 참조 추가 대화상자의 어셈블리 목록에서 각 어셈블리를 선택한 다음 확인을 클릭합니다.
네임스페이스 추가
코드에 대한 가독성을 높이기 위해, 다음 예제와 같이, Visual Basic .NET에서는 Import 구문, Visual C#.NET에서는 using 구문을 사용하여, SMO 네임스페이스를 추가할 수 있습니다. .NET 프로젝트에 네임스페이스를 추가하면, 각 클래스에 대한 전체 이름을 지정하지 않고서도 해당 네임스페이스에 포함된 클래스에 쉽게 접근할 수 있습니다.
‘Visual Basic
   Imports Microsoft.SqlServer.Management.Smo
   Imports Microsoft.SqlServer.Management.Common
   //Visual C#
   using Microsoft.SqlServer.Management.Smo;
   using Microsoft.SqlServer.Management.Common;
서버속성조회
SMO를 사용하여 서버 및 데이터베이스 개체에 대한 정보를 조회할 수 있습니다. 서버 및 데이터베이스 개체에 대한 정보를 조회하기 위해서는, 다음과 같은 절차 Server 개체의 인스턴스를 생성합니다.
  1. 특정 서버명을 지정하여, Server 개체의 인스턴스를 생성합니다.
  2. Databases 컬렉션이나 서버의 다양한 속성에 대해 필요한 작업을 수행합니다.
Server 개체 인스턴스 생성
서버에 대한 작업을 수행하기 위해서는, 먼저, Server 개체를 선언하고 초기화해야 합니다. Server 개체는 Server 개체가 초기화될 때, 생성자 클래스내부에서 자동적으로 Windows 인증을 사용하여 SQL Server 에 연결됩니다. 다음 예제는 DBSERVER라는 SQL Server 인스턴스에 연결하는 방법을 나타냅니다.
‘Visual Basic
Dim svr As New Server“( DBSERVER”)

//Visual C#
Server svr = new Server“( DBSERVER”);
SQL Server 인증을 사용하거나, 명시적으로 연결정보를 통제해야할 필요가 있는 경우에는, ConnectionInfo 어셈블리에 대한 참조를 설정한 다음, 다음 예제와 같이, ServerConnection 개체를 사용해야 합니다.
Visual Basic
Dim conn As New ServerConnection“( DBSERVER”,“ sa”,“ P@ssword”)
Dim svr As New Server(conn)

//Visual C#
ServerConnection conn = new ServerConnection“( DBSERVER”,“ sa”,
“P@ssword”);
Server svr = new Server(conn);
다음 예제와 같이, SqlConnectionInfo 개체를 사용하여 좀 더 상세한 수준까지 연결정보를 설정할 수 있습니다.
‘Visual Basic
Dim conInfo As New SqlConnectionInfo“( DBSERVER”)
With conInfo
   .DatabaseName =“ AdventureWorks”
   .EncryptConnection = True
   .ApplicationName =“ AWClient”
End With
Dim conn As New ServerConnection(conInfo)
Dim svr As New Server(conn)

//Visual C#
SqlConnectionInfo conInfo = new SqlConnectionInfo“( DBSERVER”);
conInfo.DatabaseName =“ AdventureWorks”;
conInfo.EncryptConnection = true;
conInfo.ApplicationName =“ AWClient”;
ServerConnection conn = new ServerConnection(conInfo);
Server svr = new Server(conn);
속성에 대한 작업 수행
SQL Server 인스턴스에 연결을 생성한 다음, 다음 예제와 같이, Information, Settings, Configuration 속성을 사용하여 서버속성 정보를 조회할 수 있습니다.
’Visual Basic
Console.WriteLine(svr.Information.VersionString)
Console.WriteLine(svr.Settings.MasterDBPath)
Console.WriteLine(svr.Configuration.NestedTriggers.RunValue.ToString( ))

// Visual C#
Console.WriteLine(svr.Information.VersionString);
Console.WriteLine(svr.Settings.MasterDBPath);
Console.WriteLine(svr.Configuration.NestedTriggers.RunValue.ToString( ));’
또한, Databases 속성을 사용하여, 설치된 데이터베이스와 데이터베이스 개체에 대한 정보를 조회할 수 있습니다. 다음 예제는, 특정 SQL Server 인스턴스에 포함된 각 데이터베이스에 대한 간단한 정보(데이터베이스명과 데이터베이스 크기)를 조회하는 방법을 나타냅니다.
‘Visual Basic
For Each db As Database In svr.Databases
      Console.WriteLine(db.Name &“ :“ & db.Size &“ K”)
Next

//Visual C#
foreach (Database db in svr.Databases)
{
Console.WriteLine(db.Name +“ :“ + db.Size +“ K”);
}
SMO 개체 생성
SMO를 사용하여 새 데이터베이스 개체(데이터베이스, 테이블, 저장프로시저, 트리거, 뷰 등)를 생성할 수 있습니다. 데이터베이스 개체를 생성하는 처리절차는 다음과 같습니다.
  1. 테이블, 컬럼 등 생성하고자 하는 데이터베이스 개체에 대한 적절한 변수를 생성합니다.
  2. 해당 개체에 적절한 속성을 설정합니다.
  3. 해당 개체에 대한 부모 개체에 자식 개체를 추가하기 위해서, 부모 개체에서 제공하는 Create 메서드를 호출합니다.
변수 생성 및 초기화
속성을 설정하기 전에 추가하고자 하는 새 데이터베이스 개체에 대한 로컬 변수를 생성해야 합니다. 각 개체의 생성자 클래스에서는 개체를 생성하기 위해 다양한 속성값을 지정할 수 있도록 허용합니다. 생성자 클래스는 별도이 코딩없이 속성값을 설정할 수 있는 가장 효율적인 방법입니다. 하지만, 각 클래스별로 다른 생성자 클래스를 제공하기 때문에, 각 개체에 대한 자세한 정보를 확인하기 위해 해당 클래스에 대한 문서자료를 참조해야 합니다.
다음 예제는 데이터베이스 개체를 저장하기 위한 로컬 변수를 생성하고, AdventureWorks 데이터베이스를 참조하기 위해 Databases 컬렉션 속성에 인수로 데이터베이스명을 지정합니다. 그 다음, 해당 데이터베이스에 Table 개체와 두 개의 Column 개체를 추가하는 방법을 나타냅니다.
‘Visual Basic
Dim AWDBase As Database = Svr.Databases“( AdventureWorks”)
Dim DiscountsTable As New Table(AWDBase,“ Discounts”)
Dim DiscountID As New Column(DiscountsTable, _
“DiscountID”, DataType.Int)
Dim DiscountName As New Column(DiscountsTable, _
“DiscountName”, DataType.NVarChar(40))

//Visual C#
Database AWDBase = svr.Databases“[ AdventureWorks”];
Table DiscountsTable = new Table(AWDBase,“ Discounts”);
Column DiscountID = new Column(DiscountsTable,
“DiscountID”, DataType.Int);
Column DiscountName = new Column(DiscountsTable,
“DiscountName”, DataType.NVarChar(40));
속성 설정
개체에 대한 변수를 생성한 다음, 데이터베이스에 변경사항을 적용하기 전에 적절한 부가 속성을 지정할 수 있습니다. 다음 예제는 DiscountID 컬럼에 identity 속성을 설정하는 방법을 나타냅니다.
‘Visual Basic
DiscountID.Identity = True


//Visual C#
DiscountID.Identity = true;
데이터베이스 서버에 변경사항 적용
데이터베이스 개체를 저장할 변수를 생성하고, 적절한 속성을 설정한 다음, 새로 추가된 개체를 실제로 데이터베이스 서버에 추가하는 작업을 수행해야 합니다. 일반적으로, 다음의 예제와 같이, 부모 개체에 자식 개체를 추가하기 위해서 컬렉션 개체의 Add 메서드를 호출 한 다음, 변경사항을 실제 데이터베이스 서버에 반영하기 위해 부모 개체에서 제공하는 Create 메서드를 호출합니다.
‘Visual Basic
DiscountsTable.Columns.Add(DiscountID)
DiscountsTable.Columns.Add(DiscountName)
DiscountsTable.Create( )


//Visual C#
DiscountsTable.Columns.Add(DiscountID);
DiscountsTable.Columns.Add(DiscountName);
DiscountsTable.Create( );
현재 연결이 기본 실행 모드로 운영중인 상태라면, SMO에서는 해당 변경사항을 즉시 데이터베이스 서버에 반영합니다. 현재 연결의 SqlExecutionModes 속성이 CaptureSql 모드로 운영중인 상태라면, 향후 일정 시점이 경과된 이후에 실행될 수 있도록, 기존 T-SQL 문장이 해당 연결의 CapturedSql 속성에 저장됩니다.
SMO를 사용하여 기존 개체 변경
SMO를 사용하여 기존에 생성되어 있는 데이터베이스 개체(뷰, 테이블, 사용자정의함수, 트리거 등)를 변경할 수 있습니다.
  1. 수정대상이 되는 저장 프로시저나 테이블과 같은 적절한 개체를 지정합니다.
  2. 해당 개체에 필요한 속성을 수정하거나, 해당 개체의 적절한 메서드를 호출합니다.
  3. 변경사항을 데이터베이스 서버에 반영하기 위해 Alter 메서드를 호출합니다.
수정할 대상 개체 지정
개체를 변경하기 전에, 적절한 개체 컬렉션에서 수정할 대상이 되는 개체의 위치를 지정해야 합니다. 다음 예제는 데이터베이스에 있는 테이블과 컬럼의 위치를 지정하는 방법을 나타냅니다.
‘Visual Basic
Dim AWDBase As Database = Svr.Databases“( AdventureWorks”)
Dim DiscountsTable As Table = AWDBase.Tables“( Discounts”)
Dim DiscountName As Column = DiscountsTable.Columns“( DiscountName”)


//Visual C#
Database AWDBase = svr.Databases“[ AdventureWorks”];
Table DiscountsTable = AWDBase.Tables“[ Discounts“ ];
Column DiscountName = DiscountsTable.Columns“[ DiscountName”];
속성 변경
수정할 대상이 되는 개체의 위치를 지정한 다음, 해당 개체에 대한 변경사항을 데이터베이스 서버로 반영하기 전에 필요한 속성을 수정합니다. 다음 예제는 컬럼의 Null 허용여부를 변경하는 방법을 나타냅니다.
‘Visual Basic
DiscountName.Nullable = False

//Visual C#
DiscountName.Nullable = false;
또한, 개체의 속성값을 변경하는 대신 해당 개체에서 제공하는 메서드를 호출해야 하는 경우도 존재합니다. 예를 들어, Table 클래스, Column 클래스를 포함한 많은 클래스는 데이터베이스에 해당 개체를 삭제하기 위한 Drop 메서드를 제공합니다. 속성값을 변경하는 경우, 명시적으로 명령을 실행할 때까지 데이터베이스 서버에 변경사항이 적용되지 않는 것에 비해, 메서드를 호출하는 유형의 변경사항은 즉시 데이터베이스 서버에 변경사항이 반영됩니다. 다음 예제는 테이블에서 특정 컬럼을 즉시 삭제하는 방법을 나타냅니다.
‘Visual Basic
DiscountName.Drop( )

//Visual C#
DiscountName.Drop( );
서버에 속성값 변경사항을 적용
데이터베이스 개체에 대한 속성을 변경한 다음, 해당 변경사항을 명시적으로 데이터베이스 서버에 반영해야 합니다. 다음의 예제와 같이, 대부분의 SMO 개체는 변경된 속성값을 데이터베이스 서버에 반영하기 위해, Alter 메서드를 제공합니다.
‘Visual Basic
DiscountName.Alter( )

//Visual C#
DiscountName.Alter( );
SMO를 사용한 어플리케이션 개발 및 서버정보조회
Visual Studio 2005를 사용하여 SMO 기반 어플리케이션을 개발할 수 있습니다. VisualStudio 2005에서는 비즈니스 요구사항에 따라, Windows Form 어플리케이션, ASP.NET 웹어플리케이션, 콘솔 어플리케이션을 모두 개발할 수 있습니다. 예를 들어, 본사에서 각 지사에서 위치한 데이터베이스를 관리해야 하는 경우, 클라이언트에 별도의 설치가 필요없는 인트라넷 기반 ASP.NET 어플리케이션을 개발할 수 있습니다.
.NET 기반 SMO 어플리케이션 개발
다음은 .NET 기반 SMO 어플리케이션을 개발하기 위한 단계를 나타냅니다.
  1. Visual Studio 2005 실행.
  2. 필요한 비즈니스 요구조건에 따라 적절한 어플리케이션 유형의 프로젝트를 새로 생성합니다. 예를 들어, Visual Basic.NET Windows Form 프로젝트를 생성합니다.
  3. SQL SMO 어셈블리에 대한 참조를 설정합니다. SQL Server 에 대한 작업을 수행하기 위해서는 반드시 Microsoft.SqlServer.SMO 어셈블리를 참조해야 합니다. 어플리케이션의 기능상의 요구조건에 따라, Microsoft.SqlServer 네임스페이스에 포함된 다른 어셈블리(예를 들어, Microsoft.SqlServer.ConnectionInfo)도 추가해서 사용할 수 있습니다.
  4. Visual Basic.NET의 경우 Import 명령을 사용하고, Visual C#.NET의 경우 using 명령을 사용하여, SMO 네임스페이스를 추가합니다.
  5. Server 개체를 생성하고, ConnectionContext 개체를 획득한 다음, 서버명을 지정하고, 해당 서버에 연결하는 과정을 통해, 현재 운영 중인 SQL Server 에 연결을 생성합니다. SMO 어플리케이션을 개발하는 경우, 기본값으로, Windows 인증을 사용하여 서버에 연결합니다.
  6. 어플리케이션 코드를 작성합니다.
서버 정보 조회
SQL Server 가 운영중인 서버에 연결을 생성한 다음, Server 개체를 사용하여 서버 정보를조회할 수 있습니다. Server 개체에는 서버 속성중 변경할 수 없는 속성을 포함하고 있는 information 속성이 포함되어 있습니다.
다음 표에는 어플리케이션에서 Information 개체에 포함되어 있는 변경할 수 없는 속성의 목록이 나타나 있습니다.
속성설명
Edition현재 운영중인 SQL Server 의 에디션 정보를 저장
IsClustered현재 서버에 클러스터 환경이 구축되어 있는지 여부를 Boolean
값으로 저장
IsSingleUser현재 서버가 읽기전용상태로 운영중인지 여부를 Boolean 값으로 저장
LanguageSQL Server 가 운영중인 컴퓨터의 기본 언어 정보를 저장
NetName현재 서버의 NETBIOS 명을 저장
OSVersion현재 서버의 운영체제 버전 정보를 저장
Parent현재 Information 개체의 부모 개체에 해당하는 Server 개체를 저장
PhysicalMemory현재 서버의 총 RAM 정보를 저장
Platform현재 서버의 하드웨어 플랫폼 정보를 저장
Processors현재 서버에 설치된 CPU 수를 저장
Product현재 SQL Server 가 운영 중인 컴퓨터의 제품 타이틀 정보를 저장
ProductLevel현재 SQL Server 가 운영 중인 컴퓨터의 제품 레벨 정보를 저장
VersionString현재 SQL Server 가 운영 중인 컴퓨터의 버전 정보를 저장
SMO를 사용하여 데이터베이스 백업
SMO를 사용하여 데이터베이스 백업과 같은, 주기적으로 반복되는 관리작업을 수행할 수 있습니다. Backup 개체의 속성을 커스터마이즈하여, 필요한 비즈니스 요구사항을 충족할 수 있는 백업 작업을 수행할 수 있습니다.
데이터베이스 백업
다음은 SMO를 사용하여, 데이터베이스를 백업하기 위한 처리절차입니다.
  1. SQL Server 가 운영중인 서버에 연결을 생성합니다.
  2. Backup 개체를 선언하고 초기화합니다.
  3. Backup 개체에 다음과 같은 속성을 설정합니다.
    • Action
    • BackupSetName
    • Database
    • DeviceType
    • 기타 필요한 속성(예를 들어, Incremental, NoRewind)
  4. Backup 개체의 Devices.Add 메서드를 호출하고, 백업 디바이스에 대한 경로 정보를 전달합니다. Backup 개체의 SqlBackup 메서드를 호출하고, Server 개체를 전달합니다.
백업관련속성
비즈니스 요구조건을 충족시키는 백업 작업을 수행하기 위해, Backup 개체의 속성을 커스터마이즈할 수 있습니다. 다음 표는 Backup 개체의 핵심 속성의 목록이 나타나 있습니다.
속성설명
Action수행할 백업의 유형
BackupSetDescription백업 세트에 대한 텍스트 설명
BackupSetName백업 세트를 식별하기 위한 명칭
BlockSize백업 테이프를 포맷하기 위한 블록 크기
Checksum백업 및 복원 작업동안 유효성검사를 위한 체크섬(checksum)값을 계산할 것인지 지정하기 위한 Booleam 값
Database백업 또는 복원 작업을 수행할 대상 데이터베이스
DatabaseFileGroups백업 작업의 대상이 되는 SQL Server 파일 그룹
DatabaseFiles백업 작업의 대상이 되는 운영체제 파일
Devices백업 작업을 수행할 백업 디바이스
DeviceType백업 작업을 수행할 백업 디바이스의 디바이스 유형
ExpirationDate백업데이터가 더 이상 유효성을 보장할 수 없다고 판단하는, 백업 세트의 최종유효기간
FormatMedia백업 작업의 첫번째 단계로 백업 테이프를 포맷할 것인지 여부를 지정하기 위한 Boolean 값
Incremental차등 백업을 수행할 것인지 여부를 지정하기 위한 Boolean 값
Initialize백업 작업의 일부로, 백업작업 수행할 디바이스를 초기화할 것인지 여부를 지정하기 위한 Boolean 값
LogTruncation백업 작업의 일부로 데이터베이스 로그 파일을 삭제하기 위해서 사용할 메서드 명칭
MediaDescription백업 세트를 포함하고 있는 백업 미디어에 대한 텍스트 설명
MediaName특정 미디어 세트를 식별하기 위한 미디어 명칭
NoRewind백업 작업 후에 백업 데이프를 오픈된 상태로 유지할 것인지 여부를 지정하기 위한 Boolean 값
Restart백업이 중단된 경우, 해당 백업 작업을 다시 시작할 것인지를 지정하기 위한 Boolean 값
RetainDays백업 세트를 덮어쓰기(overwrite)전에 경과해야 하는 기간 일수
SkipTapeHeader백업 미디어가 정상적으로 로드되었는지 체크하기 위한 운영 로직을 적용할 것인지 여부를 결정
UnloadTapeAfter백업 작업이 완료된 다음, 백업 테이프 미디어를 다시 감아서 언로드할 것인지 여부를 지정하기 위한 Boolean 값
SMO를 사용하여 데이터베이스 목록 생성 및 새 데이터베이스 생성
다음 예제는 SMO 네임스페이스에 대한 참조를 추가하고, 데이터베이스에 연결을 생성하고, 서버로부터 데이터베이스 목록을 조회한 다음, 새 데이터베이스를 추가하는 처리절차를 나타냅니다.
SMO 네임스페이스 참조
SMO를 사용하여 데이터베이스 관리 솔루션을 개발하는 경우에는, SMO 어셈블리에 대한 참조를 반드시 추가해야 합니다. 또한, 다음의 예제와 같이, SMO 클래스를 사용하기 위해서는 코드 파일에 SMO 네임스페이스를 추가해야 합니다. SMO 네임스페이스를 추가하면, 코드에 대한 가독성을 개선할 수 있습니다.
using System.SqlServer.Management.Common;
using System.SqlServer.Management.Smo;
서버에 연결
다음 예제는 ConnectionContext 관리 개체를 사용하여 서버에 연결을 생성합니다. 서버명은 텍스트 박스 컨트롤에서 지정됩니다.
Server myServer = new Server( );
ServerConnection conn = myServer.Connection.Context;
conn.ServerInstance = txtServerName.Text;
conn.Connect( );
데이터베이스목록생성
다음 예제는 Server 개체의 Databases 컬렉션을 사용하여 특정 서버의 모든 데이터베이스의 목록을 리스트박스 컨트롤에 표시하는 방법을 나타냅니다.
1stDatabases.Items.Clear( );
for (int i = 0; i < myServer.Databases.Count; i++)
{
   1stDatabases.Items.Add(myServer.Databases[i].Name);
}
데이터베이스생성
다음 예제는 Database 개체의 Create 메서드를 사용하여 NewDatabase 라는 새 데이터베이스를 생성하는 방법을 나타냅니다.

Database newDb = new Database(myServer,“ NewDatabase”);
newDb.Create( );



출처 : http://www.dbguide.net/db.db?mobile&cmd=view&boardUid=13816&boardConfigUid=9&categoryUid=216&boardIdx=72&boardStep=1&bookMark=


javascript - SQL 예약어 제거

  <script language="javascript"> //특수문자, 특정문자열(sql예약어) 제거 function checkSearchedWord(obj){ obj.value = obj.value+&quo...