'mysql'에 해당되는 글 62건

  1. 2008.11.25 windows 2000을 포맷하지 않고 초기화는 방법
  2. 2008.11.25 윈도우2000에서 137기가 바이트 이상의 고용량 하드 사용하기
  3. 2008.07.30 Windows Server DNS백업을 위한 레지스트리의 DNS Zones 위치정보
  4. 2008.07.30 Windows 2003 메모리 3G이상 사용시
  5. 2008.07.30 IIS재설치후 백업된 메타데이터로 복원시 IUSR 계정 패스워드가 변경되어 발생하는 에러 해결방안 1
  6. 2007.09.23 각 나라의 whois 서버 찾기
  7. 2007.09.23 Oracle 기본 SQL 사용법
  8. 2007.09.22 터미널 서비스의 포트를 변경하는 방법
  9. 2007.09.22 Windows2000 설치시 생성되는 IUSER_computername과 IWAM_computername 계정에 대한 암호 알아내기
  10. 2007.09.22 Windows 자동종료 예약하기
  11. 2007.09.22 Access DB 및 엑셀 파일을 SQL DB로 변환하기
  12. 2007.09.22 터미날서비스가 정상적으로 돌아가는데 접속이 안되는 경우
  13. 2007.09.22 Windows 2000에서의 "NTLDR Is Missing" 에러 메세지 복구 콘솔 사용해서 해결
  14. 2007.09.22 중복되는 MAC 주소의 충돌 문제를 해결하는 방법
  15. 2007.09.22 오류 메시지: 내부 DNS 오류 때문에 원격 서버를 찾을 수 없습니다(SMTPSVC)
  16. 2007.09.22 Windows 메모리 덤프가 뜰때 점검방법
  17. 2007.09.22 ASP 속도 개선법
  18. 2007.09.22 Ms-Sql DB연결방법(ODBC,OLEDB) 1
  19. 2007.09.22 Ms-Sql 특정 시점으로 데이터베이스 복구하기
  20. 2007.09.22 Ms-Sql sa패스워드를 분실했을때 복구하는 방법
  21. 2007.09.22 Query Analyzer 에서 256 문자 이상은 잘려 출력될때
  22. 2007.09.22 windows 2000 server에서 패킷 사용량 확인방법
  23. 2007.09.22 Windows 2000 AD 계정 백업 및 복원 하는 방법
  24. 2007.09.22 윈도우 단축키모음
  25. 2007.09.22 Ms-Sql 하드디스크가 부족하여 DB를 옮길때
  26. 2007.09.22 Ms-Sql 쿼리명령어 모음
  27. 2007.09.22 Ms-Sql 설치오류시 SQL Server를 수동으로 제거 하는 방법
  28. 2007.09.22 Ms-Sql 컴퓨터 이름 변경 후 SQL Server가 시작되지 않는 현상
  29. 2007.09.22 *.bak파일로 된 백업파일 리스토어시키는 방법입니다.
  30. 2007.09.22 Ms-Sql의 mdf , ldf 파일을 복사하는 방법
윈2000 재설치하지 않고 초기화시키는 방법!!!

재설치를 하지 않고 윈2000의 셋팅을 초기화시키는 방법은 winnt - system32 - config 폴더안의 파일을 winnt - repair 폴더안의 파일들로 대치를 시키는것입니다

물론 윈2000부팅 된 상태에서는 접근이 안됩니다.. 즉,,도스부팅디스켓으로 또는 윈98로 부팅후 winnt - repair 폴더안의 파일들을 winnt - system32 - config 폴더안으로 복사 해넣으시면 되지요 .
이 파일들은 숨김.시스템속성이 있으므로 당연히 속성을 확인하셔야 겠지요..

멀티부팅 해서 쓰시는 분은 다른 OS로 부팅하셔서 작업하시면 편하실겁니다..

그런후에 재부팅하 시면 윈2000이 초기화 즉,,첨 설치시의 환경으로 돌아갑니다. 이 경우레지스트리 시스템 장치 보안정보등이 초기화가 되지요..

물론 응용프로그램도 설치가 안된 상태로 됩니다..

윈2000을 재설치 안하고 파일들을 복사해 넣음으로 초기상태로 돌아가서 사용하게 됩니다.

보조프로그램의 백업 응급복구디스켓을 시스템이 가장 안정화 되어있을때 만드시면 winnt - repair - regback 라는 폴더가 생기고 그 아래에 파일들이 생깁 니다.. 윈2000에 이상이 있을 시에 위에서 처럼 winnt - repair 안의 파일들 대신 winnt - repair - regback

파일들을 이용해서 작업하시면 됩니다

Posted by 시스템매니아
,
1.윈도가 반드시 137기가 보다 적은 파티션에 먼저 설치되어야 합니다.
2.메인보드 바이오스에서 48-bit LBA 모드를 지원해야 합니다.
3.당연하지만 137기가 이상의 하드 디스크가 있어야 합니다.
4.레지스트리에서 다음 값을 설정하여야 합니다.
-시작-실행-regedit 엔터
-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Atapi\Parameters
를 찾아갑니다.
-Parameters 에서 마우스 오른쪽 클릭하여 `새로만들기-DWORD`로
`EnableBigLba` 를 만들고 값은 십진수로 `1`을 설정하고
윈도우를 재부팅합니다.
5.48-bit LBA 모드는 서비스 팩 2 이상에서 지원되며,
서비스 팩 3 혹은 그 이후버전의 서비스팩을 설치하였다 하더라도
여전이 위의 레지스트리 값을 수정해 주어야 합니다.

-주의사항-
1.만약 137기가 이상이 정상적으로 지원되는 상태에서 위의 레지스트리
값이 삭제되면 하드 디스크의 데이터가 깨어질 수 있습니다.
2.137기가 이상을 지원하는 시스템에서 미리 포맷되어 데이터가
저장된 하드디스크를 새로운 시스템에서 정상 사용하기 위해서도
위의 레지스트리 수정이 필요합니다.

Posted by 시스템매니아
,
DNS백업시 %SystemRoot%\system32\dns폴더와 레지스트리의 DNS Zones을 백업하게 되는데

Windows2000과 Windows2003의 레지스트리의 DNS Zones 위치가 다릅니다.

Windows2000 :

[\HERY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DNS\Zones]

Windows2003 :

[\HERY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\DNSServer\Zones]
Posted by 시스템매니아
,

C:\boot.ini파일 수정

/fastdetect /3GB /Userva=3030

Posted by 시스템매니아
,
Windows2000의 IIS5.0에서 TEST되었음.

브라우저의 오류 메시지:
HTTP 500 - 내부 서버 오류
또는
Server Application Error
The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.

시스템 이벤트 로그의 오류 메시지:
원본: DCOM
오류: DCOM에 "로그온 실패: 알 수 없는 사용자 이름이거나 암호가 틀립니다." 오류가 발생했으며 서버를 실행하기 위해 .\IWAM_SERVERNAME에 로그온하지 못했습니다.

원본: W3SVC
오류: 서버가 '/LM/W3SVC/1/Root/op' 응용 프로그램을 로드하지 못했습니다. 오류는 '구성된 식별자가 올바르지 않아 서버 프로세스를 시작하지 못했습니다. 사용자 이름과 암호를 점검하십시오.'입니다.
또는
원본: W3SVC 오류: "서버가 '/LM/W3SVC/4/Root/' 응용 프로그램을 로드하지 못했습니다. 오류는 'c000003b'입니다."

원본: W3SVC 오류: "COM 응용 프로그램 '{3D14228D-FBE1-11d0-995D-00C04FD919C1}'('/LM/W3SVC/4/Root')이(가) Out of Process를 활성화하지 못했습니다."

1. C:\Inetpub\AdminScripts\Adsutil.vbs파일을 Notepad로 엽니다.
2. 편집 메뉴에서 찾기를 누르고 IsSecureProperty = True를 입력한 후 다음 찾기를 누릅니다.
3. "IsSecureProperty = True"를 "IsSecureProperty = False"로 변경합니다. 저장후 닫음
4. 도스창에서 IUSR 계정 암호 알아내기 cscript.exe adsutil.vbs get w3svc/anonymoususerpass
5. 도스창에서 IWAM 계정 암호 알아내기 cscript.exe adsutil.vbs get w3svc/wamuserpass
6. 내컴퓨터-관리-시스템도구-로컬사용자 및 그룹 - 사용자로 이동
7. IUSR계정과 IWAM계정의 패스워드를 위에서 확인한 패스워드로 수정하여줍니다.
8. 서비스에서 IIS Admin Service 재시작합니다
Posted by 시스템매니아
,
주어진 도메인이 어떤 정보를 갖고 있는지 알아내기 위해
whois 서버를 이용합니다. 적절한 whois 서버를 찾는 가장
첫걸음은
http://www.allwhois.com을 방문 하는 것입니다.
이 사이트는 최상위 레벨 도메인 목록과 html 기반의 인터
페이스를 통해 whois를 질의할 수 있는 whois 페이지 URL
을 가지고 있습니다.
Posted by 시스템매니아
,

Oracle 기본 SQL 사용법

MS-SQL 2007. 9. 23. 21:01
제 1 장 데이터의 검색
SQL 명령어는 다음과 같이 기술한다.
■ SQL 명령어는 한 줄 혹은 여러 줄에 기술한다.
■ 일반적으로 절들은 수정하기 쉽게 다른 줄에 기술한다.
■ TAB 을 사용할 수 있다.
■ SQL 명령어 단어는 생략하거나 분리할 수 없다.
■ SQL 명령어는 대소문자를 구분하지 않는다.
■ SQL 명령어는 ; 으로 종료한다.
■ SQL 명령어는 SQL BUFFER 에 저장된다.
■ SQL BUFFER 에 저장된 SQL 명령어는 / 혹은 RUN 으로 실행할 수 있다.
SQL*PLUS 명령어는 다음과 같이 기술한다.
■ SQL*PLUS 명령어는 기본적으로 한 줄에 기술한다.
■ SQL*PLUS 명령어는 대소문자를 구별하지 않는다.
■ SQL*PLUS 명령어는 SQL BUFFER 에 저장되지 않는다.
■ SQL*PLUS 명령어는 다음과 같다.
• DESCRIBE table명 : TABLE 의 구조를 보여준다.
• SAVE file명 : SQL BUFFER 를 file 로 저장한다.
• START file명 : file 을 수행한다.
• @ file명 : file 을 수행한다.
• EDIT file명 : EDITOR 를 사용하여 file 을 편집한다.
• SPOOL file명 : QUERY 결과를 file 에 저장한다.
• SPOOL OFF : SPOOL FILE 을 닫는다.
• HOST : SQL*PLUS 를 떠나지 않고 HOST 상태로 간다.
• HELP 명령어 : SQL, SQL*PLUS, PL/SQL 에 대한 HELP 를 보내준다.
• EXIT : SQL*PLUS 를 종료한다.

전체 데이타의 검색
가장 간단한 SELECT 문장의 형식은 다음과 같다.
. SELECT 절에는 검색하고 싶은 COLUMN 명들을 기술한다.
. FROM 절에는 SELECT 절에서 기술된 COLUMN 명들이 포함된 TABLE 명을 기술한다.
TABLE 의 모든 ROW 와 모든 COLUMN 을 검색한다.
SELECT *
FROM table명 ;
[ 예제 ]
S_DEPT TABLE 로부터 모든 ROW 와 COLUMN 을 검색하시오.
SELECT *
FROM S_DEPT ;

특정 column의 검색
SELECT 절에서 검색하고자 하는 COLUMN 명을 COMMA 를 사용하여 나열한다.
COLUMN 순서는 검색하고 싶은 순서대로 나열한다.
COLUMN HEADING 은 COLUMN 명이 대문자로 출력된다.
SELECT column명, column명, column명,..
FROM table명 ;
[ 예제 ]
S_EMP TABLE 로부터 ID, LAST_NAME, START_DATE 를 검색하시오.

SELECT ID, LAST_NAME, START_DATE
FROM S_EMP ;

산술식을 사용한 검색
산술 연산자를 사용하여 검색되는 데이타 값을 변경할 수 있다.
산술 연산식은 COLUMN 명, 상수 값, 산술 연산자로 구성된다.
SELECT 산술연산식
FROM table명 ;
[ 예제 ]
S_EMP TABLE 로부터 ID, LAST_NAME, 연봉을 검색하시오.
연봉은 SALARY * 12 로 계산한다. (+,-,*,/,())
SELECT ID, LAST_NAME, SALARY * 12
FROM S_EMP ;

Column alias
기본적으로 COLUMN HEADING 은 COLUMN 명이 대문자로 출력된다.
그러나 많은 경우 COLUMN 명이 이해하기 어렵거나 무의미하기 때문에 COLUMN ALIAS 를 사용하여
COLUMN HEADING 을 변경할 수 있다.
ANSI SQL 92 와 호환을 위해 ALIAS 앞에 AS 를 붙일 수 있다.
ALIAS 에 공백이나 특수문자가 포함되거나 대소문자를 구별하고 싶으면 " " 로 막아준다.
COLUMN ALIAS 를 사용하여 COLUMN HEADING 을 변경할 수 있다.
SELECT column명 alias, column명 "alias", column명 as alias
FROM table명 ;
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, (SALARY + 100) * 12, DEPT_ID 를 검색하시오.
단, COLUMN ALIAS 는 Employee, ANNUAL_SALARY, DEPARTMENT NO 로 정의하시오.
SELECT LAST_NAME "Employee", (SALARY + 100) * 12 AS ANNUAL_SALARY,
DEPT_ID "DEPARTMENT NO"
FROM S_EMP ;

Column의 결합
COLUMN 과 다른 COLUMN, 산술연산식, 상수 값과 결합하여 하나의 COLUMN 으로 결합할 수 있다.
SELECT column명|| column명
FROM table명;
[ 예제 ]
S_EMP TABLE 에서 FIRST_NAME 과 LAST_NAME 을 결합하여 ALIAS EMPLOYEE 로 검색하시오.
SELECT FIRST_NAME || LAST_NAME EMPLOYEE
FROM S_EMP ;

Null값 처리
특정 COLUMN 에 값이 입력되어 있지 않을 때, 그 값을 NULL 이라 부른다.
NULL 값은 0 이나 공백과 같지 않다.
NULL 값이 산술 연산식에 포함되면 그 결과도 NULL 이다.
그러므로 NVL FUNCTION 을 사용하여 NULL 값을 다른 값으로 대체하여야 한다.
NULL 값을 다른 값으로 대체한다.
NVL (number_column, 9)
NVL (date_column, '01-JAN-95')
NVL (character_column, 'ABCDE')
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, COMMISSION 값을 검색하시오.
COMMISSION 은 SALARY * COMMISSION_PCT /100 으로 계산하시오.
SELECT LAST_NAME, SALARY * NVL(COMMISSION_PCT,0) /100 COMMISSION
FROM S_EMP ;

중복 row의 제거
SELECT 결과 값에 중복된 값이 있을 때 중복을 피하고 UNIQUE 하게 검색한다.
중복된 ROW 를 제거한다.
SELECT DISTINCT column명, column명
FROM table명;
[ 예제 ]
S_DEPT TABLE 에서 NAME 이 중복되지 않게 검색하시오.
SELECT DISTINCT NAME
FROM S_DEPT ;

데이타의 정렬
SELECT 되는 ROW 의 순서는 알 수 없다.
그러므로 ROW 를 SORT 하고 싶으면 ORDER BY 절을 사용하여야 한다.
DATA 의 DEFAULT SORT 순서는 ASCENDING 이며 다음과 같다.
• 숫자 : 1 에서 999 순으로 SORT 한다.
• 날짜 : 01-JAN-92 에서 01-JAN-95 순으로 SORT 한다.
• 문자 : A 에서 Z 순서로 SORT 한다.
• NULL : ASC 순에서는 뒤에, DESC 순에서는 앞에 나온다.
역순으로 SORT 하고 싶으면 COLUMN 명 뒤에 DESC 를 붙인다.
COLUMN 명 대신에 ALIAS 혹은 SELECT 한 COLUMN 의 순서로 지정할 수도 있다.
SELECT expr
FROM table명
ORDER BY {column명, expr} [ASC|DESC] ;
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, DEPT_ID, START_DATE 를 LAST_NAME 순으로 검색하시오.
SELECT LAST_NAME, DEPT_ID, START_DATE
FROM S_EMP
ORDER BY LAST_NAME ;

특정 row의 검색
WHERE 절에서 조건식을 기술하여 조건을 만족하는 ROW 만 검색할 수 있다.
조건식은 COLUMN 명, COMPARISON OPERATOR, VALUE 로 구성되어 있다.
문자 값은 ' ' 으로 묶어주고 값의 대소문자를 구별하여 적어준다.
날짜 값은 ' ' 으로 묶어주고 지정된 날짜 형태로 적어준다. '01-MAR-97'
숫자값은 값만 적어준다.
특정 ROW 만 검색한다.
SELECT expr
FROM table명
WHERE expr operator value
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME 이 Magee 인 사원의 FIRST_NAME, LAST_NAME,
TITLE 을 검색하시오. (=,>,<,>=,<=,<>)
SELECT FIRST_NAME, LAST_NAME, TITLE
FROM S_EMP
WHERE LAST_NAME = 'Magee' ;

Between...and
BETWEEN OPERATOR 를 사용하여 범위를 지정할 수 있다.
범위를 지정할 때는 작은 값을 먼저 큰 값을 나중에 지정한다.
두 범위의 한계 값을 포함한다.
BETWEEN...AND...
NOT BETWEEN...AND...
[ 예제 ]
S_EMP TABLE 에서 START_DATE 가 09-MAY-91 에서 17-JUN-91 사이에 입사한
사원의 FIRST_NAME, LAST_NAME, START_DATE 를 검색하시오.
SELECT FIRST_NAME, LAST_NAME, START_DATE
FROM S_EMP
WHERE START_DATE BETWEEN '09-MAY-91' AND '17-JUN-91' ;

In[list]
IN OPERATOR 를 사용하여 나열된 값들 중에서 값을 검사한다.
IN(LIST), NOT IN(LIST)
[ 예제 ]
S_EMP TABLE에서 DEPT_ID 가 10 , 31, 41 혹은 50 인 사원의 FIRST_NAME,
LAST_NAME, DEPT_ID 를 검색하시오.
SELECT FIRST_NAME, LAST_NAME, DEPT_ID
FROM S_EMP
WHERE DEPT_ID IN (10, 31, 41, 50) ;

like
찾고자 하는 값을 정확히 모를 때, LIKE OPERATOR 를 사용하여 문자형태가 같은 ROW 를 검색한다.
WILDCARD 를 사용하여 문자의 형태를 지정한다.
% : 여러 문자, _ : 한문자
LIKE '형태', NOT LIKE '형태'
[ 예제 ]
S_EMP TABLE에서 LAST_NAME 이 M 으로 시작하는 사원의 LAST_NAME 을 검색하시오.
SELECT LAST_NAME
FROM S_EMP
WHERE LAST_NAME LIKE 'M%' ;
SELECT LAST_NAME
FROM S_EMP
WHERE LAST_NAME LIKE '__M____' ;

is null
IS NULL OPERATOR을 사용하여 값이 NULL 인 것을 찾을 수 있다.
NULL 값은 값이 정의되지 않은 것을 의미하기 때문에 = OPERATOR를 사용하여
어떤 값과 비교할 수 없기 때문에 사용한다.
IS NULL, IS NOT NULL
[ 예제 ]
S_EMP TABLE에서 COMMISSION_PCT 가 NULL 인 사원의 LAST_NAME, SALARY,
COMMISSION_PCT 를 검색하시오.
SELECT last_name, salary,commission_pct,last_name, salary
FROM s_emp
WHERE commission_pct is null;

조건식의 결합
조건식을 기술할 때 AND 와 OR 를 사용하여 여러가지 조건을 결합할 수 있다.
AND 와 OR 가 같이 사용됐을 때 AND 가 먼저 수행되고 OR 가 나중에 수행된다.
그러므로 우선순위를 바꾸고자 하면 ( ) 를 사용한다.
WHERE 조건식 AND | OR 조건식
[ 예제 ]
S_EMP TABLE에서 DEPT_ID 가 41 이고 TITLE 이 Stock Clerk 인 사원의
LAST_NAME, SALARY, DEPT_ID, TITLE 을 검색하시오.
SELECT LAST_NAME, SALARY, DEPT_ID, TITLE
FROM S_EMP
WHERE DEPT_ID = 41
AND TITLE = 'Stock Clerk' ;

제 2 장 Single Row Functions
소문자로 변환
모든 문자를 소문자로 변환시킨다.
LOWER(COLUMN명)
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME 이 Smith 인 사원의 FIRST_NAME, LAST_NAME 을 소문자로 출력시키시오.
SELECT LOWER(FIRST_NAME), LOWER(LAST_NAME)
FROM S_EMP
WHERE LOWER(LAST_NAME) = 'smith' ;

대문자로 변환
모든 문자를 대문자로 변환시킨다.
UPPER(COLUMN명)
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME 이 Smith 인 사원의 TITLE 을 대문자로 출력하시오.
SELECT UPPER(TITLE)
FROM S_EMP
WHERE UPPER(LAST_NAME) = 'SMITH';

첫글자만 대문자로 변환
단어의 첫글자는 대문자로, 나머지는 소문자로 변환시킨다.
INITCAP(COLUMN명)
[ 예제 ]
S_EMP TABLE 에서 TITLE 을 단어의 첫글자만 대문자로 출력시키시오.
SELECT INITCAP(TITLE)
FROM S_EMP ;

문자의 부분을 자름
문자를 시작위치(M)에서 자리수(N) 만큼 잘라준다.
자리수(N)이 생략되면 시작위치(M)에서 끝까지 잘라준다.
SUBSTR(COLUMN명, M, N)
[ 예제 ]
S_PRODUCT TABLE 에서 NAME COLUMN 의 앞에서 부터 3글자가 Ace 인 제품의
NAME 을 출력하시오.
SELECT NAME
FROM S_PRODUCT
WHERE SUBSTR(NAME, 1, 3) = 'Ace' ;

문자의 길이를 계산
문자의 길이를 RETURN 한다.
LENGTH(COLUMN명)
[ 예제 ]
S_PRODUCT TABLE 에서 NAME, NAME 의 길이를 출력하시오.
SELECT NAME, LENGTH(NAME)
FROM S_PRODUCT;

숫자의 반올림
지정된 자리수(M) 밑에서 반올림한다.
COLUMN 값이 1 2 3 4. 5 6 7 일 때 자리수(M)는 다음과 같다.
     M : -3-2-1 0 1 2 3
ROUND(COLUMN명, M)
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, SALARY/22 의 값을 소수 2째 자리까지 나타내고
소수 3째 자리에서 반올림하시오.
SELECT LAST_NAME, ROUND(SALARY/22, 2)
FROM S_EMP ;

숫자의 절사
지정된 자리수(M) 까지 나타내고 그 밑은 잘라버린다.
COLUMN 값이 1 2 3 4. 5 6 7 일 때 자리수(M)은 다음과 같다.
     M : -3-2-1 0 1 2 3
절사 값은 RETURN 한다.
TRUNC(COLUMN명, M)
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, SALARY / 22 의 값을 십의 자리까지 나타내고
일의 자리는 버림
SELECT LAST_NAME, TRUNC(SALARY/22, -1)
FROM S_EMP ;

나누기의 나머지
M 을 N 으로 나누고 남은 나머지를 RETURN 한다.
MOD(M, N)
[ 예제 ]
10 을 3 으로 나눈 나머지를 구하시오.
SELECT MOD(10, 3)
FROM SYS.DUAL ;

날짜의 연산
DATABASE 안의 DATE 값은 다음과 같은 숫자로 저장되어 있다.
■ CENTURY, YEAR, MONTH, DAY, HOURS, MINUTES, SECONDS
그러므로 산술 연산을 할 수 있다.
● DATE + NUMBER : 숫자만큼 일이 더해진 날짜가 RETURN 된다.
● DATE - NUMBER : 숫자만큼 일이 빼진 날짜가 RETURN 된다.
● DATE1 - DATE2 : 두 날짜 사이의 일수가 계산된다.
날짜 계산을 한다.
DATE + NUMBER
DATE - NUMBER
DATE1 - DATE2
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, 입사한지 90 일째 되는 날, 입사한지 며칠 됐는 지 검색하시오.
SELECT LAST_NAME, START_DATE + 90, SYSDATE - START_DATE
FROM S_EMP;
( 날짜에는 시간도 포함되어 있으므로 일수 계산의 결과가 소수로 나온다. )

날짜 사이의 개월 수
두 날짜 사이의 개월 수를 RETURN 한다.
MONTHS_BETWEEN(DATE1, DATE2)
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, 입사한지 몇 달이 됐는지 출력하시오.
SELECT LAST_NAME, MONTHS_BETWEEN(SYSDATE, START_DATE)
FROM S_EMP ;
(일이 포함되어 있어서 소수로 출력된다.)

날짜에 달을 더함
날짜에서 숫자(N) 개월만큼 더해진 날짜를 RETURN 한다.
ADD_MONTHS(DATE, N)
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, START_DATE, 입사한지 3 개월되는 날짜를 출력하시오.
SELECT LAST_NAME, START_DATE, ADD_MONTHS(START_DATE, 3)
FROM S_EMP ;

지정한 요일 날짜
날짜에서 지정한 요일(CHAR)이 될 날짜를 RETURN 한다.
NEXT_DAY(DATE, 'CHAR')
[ 예제 ]
오늘을 기준으로 돌아오는 금요일이 언제인지 출력하시오.
SELECT SYSDATE, NEXT_DAY(SYSDATE, 'FRIDAY')
FROM SYS.DUAL ;

그 달의 마지막 날
날짜가 포함된 달의 마지막 날을 RETURN 한다.
LAST_DAY(DATE)
[ 예제 ]
이번 달의 마지막 날은 언제인지 출력하시오.
SELECT SYSDATE, LAST_DAY(SYSDATE)
FROM SYS.DUAL ;

날짜의 반올림
형태에 따른 반올림 기준은 다음과 같다.
• YEAR : 6월 이후
• MONTH : 15일 이후
• DAY : 12시 이후
날짜 데이타를 지정된 형태까지 나타내고 그 이하에서 반올림한다.
ROUND(COLUMN명, '형태')
[ 예제 ]
S_EMP TABLE 에서 ID, LAST_NAME, 입사 시작 달을 검색하시오.
단, 15일 이후는 다음달로 올리시오.
SELECT ID, LAST_NAME, ROUND(START_DATE, 'MONTH')
FROM S_EMP ;

날짜의 절사
날짜 데이타를 지정된 형태까지 나타내고 그 밑은 잘라낸다.
TRUNC(COLUMN명, '형태')
[ 예제 ]
S_EMP TABLE 에서 ID, LAST_NAME, 입사 시작 달을 검색하시오.
단, 일자는 잘라버리시오.
SELECT ID, LAST_NAME, TRUNC(START_DATE, 'MONTH')
FROM S_EMP ;

문자를 날짜로 변환
CHARACTER TYPE 을 지정된 형태의 DATE TYPE 으로 변환한다.
TO_DATE(character_column명, '형태')
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, START_DATE 를 검색하시오.
단, START_DATE 의 값이 92/02/07 인 사원을 검색하시오.
SELECT LAST_NAME, START_DATE
FROM S_EMP
WHERE START_DATE = TO_DATE('92/02/07', 'YY/MM/DD') ;

날짜를 문자로 변환
DATE 값은 기본적으로 DD-MON-YY 형태로 출력된다.
이것을 TO_CHAR FUNCTION 을 사용하면 원하는 다른 형태로 변환할 수 있다.
■ 형태를 지정할 때 사용된 대소문자로 출력된다.
■ DAY 와 MONTH 형태는 공백을 포함한 9 자리로 출력된다.
■ TO_CHAR 의 결과는 80 자리로 출력된다.
DATE TYPE 을 지정된 형태의 CHARACTER TYPE 으로 변환한다.
TO_CHAR(date_column, '형태')
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, START_DATE 를 검색하시오.
단, START_DATE 의 형태는 1991/06/17 14:20:00 와 같이 출력하시오.
SELECT LAST_NAME, TO_CHAR(START_DATE, 'YYYY/MM/DD HH24:MI:SS'), START_DATE
FROM S_EMP ;

숫자를 문자로 변환
NUMBER TYPE 을 지정된 형태의 CHARACTER TYPE 으로 변환한다.
TO_CHAR(number_column명, '형태')
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME, SALARY 를 검색하시오.
단 SALARY 를 $1,450 와 같은 형태로 출력시키시오.
SELECT LAST_NAME, TO_CHAR(SALARY, '$999,999')
FROM S_EMP ;


제 3 장. 여러Table로부터 Data검색
Equijoin
SIMPLE JOIN (EQUI-JOIN)
여러개의 TABLE 들로부터 정보를 검색하려면, SELECT 문장의 FROM 절에 TABLE명들을 적고
WHERE 절에 각 TABLE의 ROW들을 연결시킬 조건식을 기술한다.
각 TABLE 의 COLUMN명이 중복될 때는 반드시 COLUMN명 앞에 TABLE명을 붙여야 한다.
(중복되지 않을 때는 붙이지 않아도 되지만 명확성을 위해서나 ACCESS 를 위해서 붙이는 것이 좋다.)
N 개의 TABLE 을 JOIN 할 때는 최소한 N-1 개의 조건식이 필요하다.
복합 COLUMN 으로 JOIN 할 때는 더 많은 조건식이 필요하다.
2개 이상의 TABLE 에서 = 조건식을 만족시키는 ROW 들을 연결하여 검색한다.
SELECT table명.column명, table명.column명...
FROM table1명, table2명
WHERE table1명.column1명 = table2명.column명 ;
[ 예제 ]
S_EMP TABLE 과 S_DEPT TABLE 을 사용하여 사원들의 LAST_NAME, DEPT_ID,
NAME 을 검색하시오.
SELECT S_EMP.LAST_NAME, S_EMP.DEPT_ID, S_DEPT.NAME
FROM S_EMP, S_DEPT
WHERE S_EMP.DEPT_ID = S_DEPT.ID ;

특정 row의 join
JOIN 문장을 기술할 때 JOIN 조건식 이외에 다른 조건식을 AND 로 연결할 수 있다.
SELECT table명.column명, table명.column명...
FROM table1명, table2명
WHERE table1명.column1명 = table2명.column2명 AND condition ;
[ 예제 ]
S_EMP TABLE과 S_DEPT TABLE 을 사용하여 LAST_NAME 이 Menchu 인 사원의
LAST_NAME, DEPT_ID, NAME 을 검색하시오.
SELECT S_EMP.LAST_NAME, S_EMP.DEPT_ID, S_DEPT.NAME
FROM S_EMP, S_DEPT
WHERE S_EMP.DEPT_ID = S_DEPT.ID AND S_EMP.LAST_NAME = 'Smith' ;

Table alias
JOIN 문장에서 TABLE명이 긴 경우 TABLE명.COLUMN명 으로 적는 것이 매우 불편하다.
그런데 TABLE명 대신 ALIAS 를 사용하면 편하게 사용할 수 있다.
(SELECT 문장에서 TABLE명 대신 ALIAS 를 지정했다면 그 문장에서는 계속해서
ALIAS 로 사용하여야 한다.)
TABLE ALIAS를 사용하여 JOIN 문장을 간단하게 기술한다.
SELECT alias명.column명, alias명.column명
FROM table1명 alias1명, table2명 alias2명
WHERE alias1명.column1명 = alias2명.column2명 ;
[ 예제 ]
S_CUSTOMER TABLE과 S_REGION TABLE 을 사용하여 고객 명,지역번호,지역 명을 검색하시오.
단, COLUMN ALIAS 와 TABLE ALIAS 를 사용하시오.
SELECT C.NAME "Customer Name", C.REGION_ID "Region Id",
R.NAME "Region Name"
FROM S_CUSTOMER C, S_REGION R
WHERE C.REGION_ID = R.ID ;

Non-Equijoin
NON-EQUIJOIN
JOIN 문장에서 두 TABLE 을 JOIN 하는 조건식에 = OPERATOR 가 사용되지 않고
다른 OPERATOR 가 사용되는 것을 말한다.
SELECT table명.column명, table명.column명...
FROM table1명, table2명
WHERE 조인조건식 ;
[ 예제 ]
EMP TABLE 과 SALGRADE TABLE 을 사용하여 사원의 ENAME, JOB, SAL,GRADE를 검색하시오.
SELECT E.ENAME, E.JOB, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL ;
(BETWEEN OPERATOR 대신에 <= 와 >= 를 사용해도 되지만 BETWEEN 이 간편하다.)

Outer Join
두 TABLE 을 JOIN 할 때 JOIN 조건식을 만족시키지 못하는 ROW 는 검색에서 빠지게 된다.
그런데 이러한 ROW 들이 검색되도록 하는 것이 OUTER JOIN 이다.
(+) OUTER JOIN OPERATOR 를 데이타가 없는 어느 한쪽의 COLUMN 쪽에 붙인다.
JOIN 결과, 데이타가 없는 쪽의 COLUMN 값은 NULL로 검색된다.
조건식을 만족시키지 못하는 데이타도 검색한다.
SELECT table명.column명, table명.column명
FROM table1명, table2명
WHERE table1명.column1명 = table2명.column2명(+)
[ 예제 ]
S_EMP TABLE 과 S_CUSTOMER TABLE 을 사용하여 영업사원의 LAST_NAME,
SALES_REP_ID, NAME 을 검색하시오.
단, 영업사원이 정해져 있지 않은 고객의 이름도 검색하시오.

SELECT E.LAST_NAME, C.SALES_REP_ID,
C.NAME
FROM S_EMP E, S_CUSTOMER C
WHERE E.ID(+) = C.SALES_REP_ID ;

Self Join
TABLE 의 ALIAS 를 사용하여, 마치 2 개의 TABLE 처럼 생각하여 자신의 TABLE 과 자신의 TABLE 을 JOIN 한다.
SELECT alias명.column명, alias명.column명...
FROM table명 alias1명, table명 alias2명
WHERE alias1명.column1명 = alias2명.column2명 ;
[ 예제 ]
S_EMP TABLE 에서 사원들의 LAST_NAME 과 그들의 상사 LAST_NAME 을 검색하시오.
SELECT W.LAST_NAME "Woker",
M.LAST_NAME "Manager"
FROM S_EMP W, S_EMP M
WHERE W.MANAGER_ID = M.ID ;

제 4 장. Group Functions
Group Function
각각의 FUNCTION 은 ARGUMENT 를 받는데 기능은 다음과 같다.
■ DISTINCT : 중복된 값은 제외한다.
■ ALL : DEFAULT 로써 모든 값을 포함한다.
■ COLUMN명 : NULL 값은 제외한다.
■ * : NULL 값도 포함한다.
TABLE 전체를 하나의 GROUP 으로 보고 GROUP FUNCTION 값을 RETURN 한다.
SELECT group_function(column명), group_function(column명)...
FROM table명 ;
[ 예제 ]
S_EMP TABLE 에서 회사 전체의 급여합계, 최고급여, 최소급여, 인원수를 검색하시오.
SELECT SUM(SALARY), MAX(SALARY), MIN(SALARY), COUNT(SALARY)
FROM S_EMP ;
( COUNT(SALARY) 는 급여를 받는 사원의 총 인원수고 COUNT(*) 는 급여를 받지 않는 사원의 인원수도 포함된다.)

소group으로 분리
기본적인 SELECT 절(그룹화 되지 않은 SELECT절)에는 COLUMN 명과 GROUP FUNCTION 이 같이 기술될 수 없다.
SELECT 절에 COLUMN 명이 기술되려면 GROUP BY 절이 반드시 기술되어야 한다.
SELECT 절에 기술된 COLUMN 명들은 전부 GROUP BY 절에 기술되어야 하며
GROUP BY 절에 기술된 COLUMN 명들은 SELECT 절에 기술되지 않아도 된다.
(하지만 결과를 파악하기 위해서는 SELECT 절에 기술해주는 것이 좋다.)
GROUP BY 절을 기술하면 GROUP BY 절에 기술된 COLUMN 값으로 1 개의 TABLE이 소 GROUP 으로 나눠진다.
결과는 COLUMN 값으로 SORT 되어서 출력된다.
1 개의 TABLE 을 소 GROUP 으로 나누어 GROUP FUNCTION 값을 구한다.
SELECT column1명[, column2명], group_function(column명)
FROM table명
GROUP BY column1명[, column2명] ;
[ 예제 ]
S_EMP TABLE 에서 DEPT_ID, TITLE 별로, 최고급여, 최소급여, 인원수를 검색하시오.
SELECT DEPT_ID, TITLE,
MAX(SALARY), MIN(SALARY),
COUNT(SALARY)
FROM S_EMP
GROUP BY DEPT_ID, TITLE;

특정 group의 선택
HAVING 절이 기술됐을 때 처리되는 순서는 다음과 같다.
① ROW 들이 GROUPing 된다.
② GROUP 에 대해 GROUP FUNCTION 이 적용된다.
③ HAVING 절을 만족하는 GROUP 을 선택한다.
그러므로 GROUP BY 절과 HAVING 절의 순서는 바뀌어도 되지만 의미상 GROUP BY
절 다음에 HAVING 절을 기술하는 것이 좋다.
HAVING 절에서는 GROUP FUNCTION 을 사용하여 GROUP 에 대한 조건식을 기술한다.
SELECT column1명[, column2명], group_function(column명)
FROM table명
GROUP BY column1명[, column2명]
HAVING 그룹조건식 ;
[ 예제 ]
S_EMP TABLE 에서 TITLE 별로 급여합계를 검색하시오.
단, 급여합계가 5000 이상인 GROUP 만 출력하시오.
SELECT TITLE, SUM(SALARY) PAYROLL
FROM S_EMP
GROUP BY TITLE
HAVING SUM(SALARY) >= 5000 ;

Group의 정렬
기본적으로 GROUP BY 절에 기술된 COLUMN 값으로 SORT 된다.
이 순서를 바꾸고자 하면 ORDER BY 절을 기술하면 된다.
DATA 의 SORT 순서를 정한다.
SELECT column1명[, column2명], group_function(column명)
FROM table명
GROUP BY column1명[, column2명]
ORDER BY column명| group_function(column명) ;
[ 예제 ]
S_EMP TABLE에서 DEPT_ID 별로 인원수를 검색하시오.
단, 인원수가 많은 부서부터 출력하시오.
SELECT DEPT_ID, COUNT(*)
FROM S_EMP
GROUP BY DEPT_ID
ORDER BY COUNT(*) DESC ;

제 5 장. Subquery
Single Row Subquery
SUBQUERY 의 결과가 1 개의 ROW 로 나오는 것을 SINGLE ROW SUBQUERY 라 하며
다음과 같은 OPERATOR 를 사용할 수 있다.
=, >, >=, <, <=
VALUE 값을 구하기 위해 SELECT 문장을 사용한다.
SELECT column명, column명...
FROM table명
WHERE column명 operator (SELECT column명
FROM table명
WHERE 조건식 );
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME 이 Smith 인 사원과 같은 업무(TITLE)를 하고 있는
사원의 LAST_NAME, TITLE 을 검색하시오.
SELECT LAST_NAME, TITLE
FROM S_EMP
WHERE TITLE =
( SELECT TITLE
FROM S_EMP
WHERE LAST_NAME = 'Smith') ;

From절의 Subquery
FROM 절에 기술된 SUBQUERY 문은 VIEW 처럼 사용된다.
SELECT alias명.column명, alias명,column명...
FROM table1명 alias1명, (SELECT column2명
FROM table2명
WHERE 조건식) alias2명
WHERE alias1명.column1명 OPERATOR alias2명.column2명 ;
[ 예제 ]
S_EMP TABLE 에서 SALARY 가 회사평균급여 보다 적은 사원의 LAST_NAME,
SALARY, 회사평균급여를 검색하시오.
SELECT E.LAST_NAME, E.SALARY, S.AVGSAL
FROM S_EMP E,
(SELECT AVG(SALARY) AVGSAL
FROM S_EMP) S
WHERE E.SALARY < S.AVGSAL ;

Multi Row Subquery
SUBQUERY 의 결과가 여러 ROW 일 때는 반드시 IN OPERATOR 를 사용하여야 한다.
SELECT column명, column명...
FROM table명
WHERE column명 IN ( SELECT column명
FROM table명
WHERE 조건식);
[ 예제 ]
S_EMP TABLE 과 S_DEPT TABLE 에서 Operations 부서에서 근무하는 사원의
LAST_NAME, TITLE, DEPT_ID 를 검색하시오.
SELECT LAST_NAME, TITLE, DEPT_ID
FROM S_EMP
WHERE DEPT_ID IN (SELECT ID
FROM S_DEPT
WHERE NAME = 'Operations') ;

Multi Column Subquery
SELECT 문장의 WHERE 절에서 여러개의 COLUMN 값을 비교하려면 LOGICAL
OPERATOR 를 사용하여 여러개의 조건식을 기술하여야 한다.
그런데 MULTI COLUMN SUBQUERY 를 사용하면 이를 해결할 수 있다.
SELECT column명, column명,,,
FROM table명
WHERE (column명, column명...) IN (SELECT column명, column명...
FROM table명
WHERE 조건식);
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME Patel 인 사원과 같은 부서, 같은 업무를
맡고 있는 사원의 LAST_NAME, TITLE, DEPT_ID 를 검색하시오.
SELECT LAST_NAME, TITLE, DEPT_ID
FROM S_EMP
WHERE (DEPT_ID, TITLE) IN
(SELECT DEPT_ID, TITLE
FROM S_EMP
WHERE LAST_NAME = 'Patel') ;
SELECT LAST_NAME, TITLE, DEPT_ID
FROM S_EMP
WHERE (DEPT_ID) IN
(SELECT DEPT_ID
FROM S_EMP
WHERE LAST_NAME = 'Patel')
OR (TITLE) IN
(SELECT TITLE
FROM S_EMP
WHERE LAST_NAME = 'Patel') ;

제 6 장. Table 생성
이름 붙이는 법
이름은 다음의 규칙을 따라서 지정한다.
■ TABLE 명이나 COLUMN 명은 문자로 시작하고 30 자 이내로 지정한다.
■ A ~ Z, a ~ z, 0 ~ 9, _ , $ , # 을 사용할 수 있다.
■ 한 USER 내에서는 다른 OBJECT 의 이름과 동일하게 지정할 수 없다.
■ ORACLE7 SERVER 예약어를 사용할 수 없다.
■ 대소문자를 구별하지 않는다.

Oracle 7 datatype
COLUMN 의 DATATYPE 은 다음과 같다.
■ CHAR(size) : 고정된 size 의 문자 값, 최대 255 자까지 지정할 수 있다.
■ VARCHAR2(size) : size내에서의 가변길이 문자 값,최대 2000자까지 지정할 수 있다.
■ LONG : 가변길이 문자 값, 최대 2 기가 바이트까지 사용할 수 있다. TABLE 당 한 개의 COLUMN 에만 지정 가능하다.
■ NUMBER(p,s) : 정수, 소수 자리수의 합이 P, 소수 자리수가 s 인 숫자값, 최대 38 자리수까지 지정할 수 있다.
■ DATE : 날짜와 시간 값, B.C. 4712년 1월 1일부터 A.D. 4712년 12월 31일까지 입력할 수 있다.
■ RAW(size) : size 내에서의 가변길이 BINARY DATA
■ LONGRAW : 가변길이 BINARY DATA

다른 table로부터 table생성
기존하는 TABLE 로 부터 데이타와 구조를 복사하여 TABLE 을 생성한다.
CREATE TABLE table명 [(column명, column명...)]
AS subquery ;
[ 예제 ]
S_EMP TABLE 에서 DEPT_ID 가 41 인 사원들의 ID, LAST_NAME, USERID,
START_DATE 만을 복사하여 EMP_41 TABLE 을 생성하시오.
CREATE TABLE EMP_41
AS SELECT ID, LAST_NAME, USERID, START_DATE
FROM S_EMP
WHERE DEPT_ID = 41;
(S_EMP TABLE 에서 COLUMN명, TYPE, SIZE, NOT NULL CONSTRAINT 가 복사되어 EMP_41 TABLE 이 생성되며, 데이타는 DEPT_ID = 41 인 ROW 만 복사된다.)

Constraint
CONSTRAINT 의 종류는 다음과 같다.
■ NOT NULL
COLUMN 에 NULL 값이 입력되는 것을 허용하지 않는다.
COLUMN-CONSTRAINT 로만 기술해야 한다.
■ UNIQUE
한 개의 COLUMN 혹은 복합 COLUMN 을 UNIQUE KEY 로 지정한다.
UNIQUE KEY 에는 중복된 값을 허용하지 않는다.
한개의 COLUMN 으로 구성된 UNIQUE KEY 는 NULL 값을 허용한다.
COLUMN 이나 TABLE-CONSTRAINT 로 기술할 수 있다.
복합 COLUMN 으로 구성된 UNIQUE KEY 는 TABLE-CONSTRAINT 로만 기술해야 한다.
UNIQUE KEY COLUMN 의 UNIQUE INDEX FILE 이 자동 생성된다.
■ PRIMARY KEY
ROW 를 UNIQUE 하게 대표할 수 있는 한개의 COLUMN 혹은 복합 COLUMN 으로 지정한다.
PRIMARY KEY 에는 중복된 값과 NULL 값을 허용하지 않는다.
TABLE 당 한 개의 PRIMARY KEY 만 지정할 수 있다.
COLUMN 이나 TABLE-CONSTRAINT 로 기술할 수 있다.
복합 COLUMN 으로 구성된 PRIMARY KEY 는 TABLE-CONSTRAINT 로만 기술해야 한다.
PRIMARY KEY COLUMN 의 UNIQUE INDEX FILE 이 자동 생성된다.
■ FOREIGN KEY
한개의 COLUMN 혹은 복합 COLUMN 으로 지정한다.
같은 TABLE 혹은 다른 TABLE의 PRIMARY KEY 나 UNIQUE KEY 값을 참조한다.
FOREIGN KEY 값은 모 TABLE 에 존재하는 데이타와 같던가 NULL 값을 허용한다.
COLUMN 이나 TABLE-CONSTRAINT 로 기술할 수 있다.
※ CHECK : 각각의 ROW 가 만족해야할 조건을 지정한다.
조건식은 QUERY 조건식과 동일하게 지정한다.
단, 다음과 같은 것은 사용할 수 없다.
CURRVAL, NEXTVAL, LEVEL, ROWNUM, SYSDATE, USER COLUMN 이나
TABLE-CONSTRAINT 로 기술할 수 있다.
CONSTRAINT 명은 다음과 같이 지정한다.
• CONSTRAINT 는 DICTIONARY 에 저장되므로 참조하기 쉽게 의미있게 붙여준다.
• 일반적으로 TABLE명_COLUMN명_CONSTRAINT종류와 같은 형태로 지정한다.
• 사용자가 CONSTRAINT 명을 지정하지 않으면 ORACLE7이 SYS_Cn의 형태로 붙인다.
• 동일한 USER 내에서 CONSTRAINT명은 UNIQUE해야 한다.
CONSTRAINT 는 다음과 같이 기술할 수 있다.
COLUMN-CONSTRAINT : column명 [CONSTRAINT constraint명] constraint종류
TABLE-CONSTRAINT : [CONSTRAINT constraint명] constraint종류
(column명, column명..)

Table 생성
CREATE TABLE table명
(column명 type(size) [DEFAULT VALUE] [column constraint],
column명 type(size) [DEFAULT VALUE] [column constraint],
.... ,
[table constraint] ,
[table constraint] ,
.... ) ;
[ 예제 ]
S_EMP TABLE CHART를 보고 TABLE 을 생성하시오.
단, TABLE CONSTRAINT 로 기술할 수 있는 것은 TABLE CONSTRAINT 로 정의하시오.
CREATE TABLE S_EMP
(ID NUMBER(7),
LAST_NAME VARCHAR2(25) CONSTRAINT S_EMP_LAST_NAME_NN NOT NULL,
FIRST_NAME VARCHAR2(25),
USERID VARCHAR2(8) CONSTRAINT S_EMP_USERID_NN NOT NULL,
START_DATE DATE DEFAULT SYSDATE,
COMMENTS VARCHAR2(25),
MANAGER_ID NUMBER(7),
TITLE VARCHAR2(25),
DEPT_ID NUMBER(7),
SALARY NUMBER(11,2),
COMMISSION_PCT NUMBER(4,2),
CONSTRAINT S_EMP_ID_PK PRIMARY KEY(ID),
CONSTRAINT S_EMP_USERID_UK UNIQUE,
CONSTRAINT S_EMP_DEPT_ID_FK FOREIGN KEY(DEPT_ID)
REFERENCES S_DEPT(ID),
CONSTRAINT S_EMP_COMMISSION_PCT CHECK
(COMMISSION_PCT IN (10, 12.5, 15, 17.5, 20))) ;

제 7 장. Data DICTIONARY
DICTIONARY
• DATABASE 가 만들어 졌을때 DICTIONARY TABLE 도 만들어 진다.
• DATABASE 가 사용중일때 DICTIONARY TABLE 은 ORACLE7 SERVER 에 의해 UPDATE 된다.
• 사용자들은 DICTIONARY TABLE 을 SELECT 할 수 있다.
• DICTIONARY TABLE 은 SYS USER 의 소유다.
• DICTIONARY TABLE 의 값은 대문자로 들어있다.
• DICTIONARY TABLE 의 종류는 다음과 같은 방법으로 알 수 있다.
SELECT   *
FROM    DICTIONARY ;
DICTIONARY TABLE 의 종류는 다음과 같다.
• USER : USER 가 소유하고 있는 OBJECT 의 정보를 보여준다.
• ALL : USER 가 ACCESS 할 수 있는 OBJECT 의 정보를 보여준다.
• DBA : DBA USER 가 ACCESS 할 수 있는 OBJECT 의 정보를 보여준다.

활용예
DICTIONARY TABLE 의 검색예는 다음과 같다.
■ 자신이 갖고 있는 TABLE 의 이름을 검색한다.
SELECT   OBJECT_NAME
FROM    USER_OBJECTS
WHERE   OBJECT_TYPE = 'TABLE';
■ 자신이 갖고 있는 OBJECT 의 종류를 검색한다.
SELECT   DISTINCT OBJECT_TYPE
FROM   USER_OBJECTS;
■ GRANT 와 관련된 DICTIONARY TABLE 의 이름을 검색한다.
SELECT   TABLE_NAME
FROM   DICTIONARY
WHERE   UPPER(COMMENTS) LIKE '%GRANT%';
■ S_EMP TABLE 의 CONSTRAINT 종류를 검색한다.
SELECT   CONSTRAINT_NAME, CONSTRAINT_TYPE, SEARCH_CONDITION,
R_CONSTRAINT_NAME
FROM   USER_CONSTRAINTS
WHERE   TABLE_NAME = 'S_EMP';
■ S_EMP TABLE 의 COLUMN CONSTRAINT 를 검색한다.
SELECT   CONSTRAINT_NAME, COLUMN_NAME
FROM   USER_CONS_COLUMNS
WHERE   TABLE_NAME = 'S_EMP';

제 8 장. Data 조작
데이타 입력
TABLE 전체 COLUMN 에 값을 입력한다.
INSERT INTO table명
VALUES (value, value...);
[ 예제 ]
S_EMP TABLE 에 다음과 같은 데이타를 입력하시오.
ID : 26, LAST_NAME : Jung Mi, FIRST_NAME : Hong, USERID : Hjungmi,
START_DATE : 05-APR-97, COMMENTS : Teacher, MANAGER_ID : 10,
TITLE : Stock Clerk, DEPT_ID : 45, SALARY : 1200 COMMISSION_PCT : 10
INSERT INTO S_EMP
VALUES (26, 'Jung Mi', 'Hong', 'Hjungmi', '05-APR-97',
'Teacher', 10, 'Stock Clerk', 45, 1200, 10) ;
(값을 지정하는 순서는 TABLE 의 COLUMN 순서에 맞춰서 지정한다.
이 방법보다는 COLUMN명을 기술하여 입력하는 방법이 더 좋다.)

특정 column에 데이타입력
데이타를 입력하고자 하는 COLUMN을 선택하여 입력한다.
INSERT INTO table명(column명, column명....)
VALUES (value, value....);
[ 예제 ]
S_EMP TABLE 에 다음과 같은 데이타를 입력하시오.
ID : 27, LAST_NAME : Smith, FIRST_NAME : Donna, START_DATE : 05-APR-97
INSERT INTO S_EMP(ID, LAST_NAME, FIRST_NAME, START_DATE)
VALUES (27, 'Smith', 'Donna', '05-APR-97') ;

Null, 특수 value 입력
COLUMN 값에 NULL 값을 지정하는 방법은 3 가지가 있다.
• INSERT 문장의 COLUMN LIST 에서 생략한다.
• INSERT 문장의 VALUE 절에서 NULL 로 지정한다.
• INSERT 문장의 VALUE 절에서 '' 로 지정한다.
COLUMN 값에 특수한 값을 입력할 수 있다.
SYSDATE : 현재날짜와 시간
USER : 현재 USERID
[ 예제 ]
S_EMP TABLE 에 다음과 같은 데이타를 입력하시오.
ID : 29, LAST_NAME : Donna, USERID : USER, SALARY : NULL, START_DATE : SYSDATE
INSERT INTO S_EMP(ID, LAST_NAME, USERID, SALARY, START_DATE)
VALUES (29, 'Donna', USER, NULL, SYSDATE);

특수형태의 날짜/시간입력
DATE 값을 입력할 때는 지정된 DATE 형태로 입력하여야 한다.
일반적으로 DD-MON-YY 형태를 사용하며, 이 형태로 데이타를 입력하면 세기는 현재의 세기로, 시간은 자정으로 입력된다.
다른 세기의 날짜나 시간을 입력하고 싶으면 TO_DATE FUNCTION 을 사용한다.
지정된 형태가 아닌 다른 형태의 날짜 값을 입력한다.
TO_DATE('날짜값','날짜형태')
[ 예제 ]
S_EMP TABLE 에 다음과 같은 데이타를 입력하시오.
ID : 30, LAST_NAME : Donna, USERID : SQL01, START_DATE : 199704051400
INSERT INTO S_EMP(ID, LAST_NAME, USERID, START_DATE)
VALUES (30, 'Donna', 'SQL01', TO_DATE('199704051400','YYYYMMDDHH24MI'));

다른table로부터 데이타입력
INSERT 문장을 사용하여 기존하는 TABLE 의 데이타를 다른 TABLE 로 COPY 할 수 있다.
INSERT INTO table명[(column명, column명...)]
SUBQUERY;
[ 예제 ]
S_EMP TABLE 의 ROW들을 HISTORY TABLE 로 COPY 하시오.
단, 01-JAN-94 이전에 입사한 사원의 ID,LAST_NAME,SALARY,START_DATE 를 COPY 하시오
INSERT INTO HISTORY(ID, LAST_NAME, SALARY, START_DATE)
SELECT ID, LAST_NAME, SALARY, START_DATE
FROM S_EMP
WHERE START_DATE < '01-JAN-94' ;
(INSERT 절의 COLUMN 수와 SELECT 절의 COLUMN 수는 같아야 한다.)

데이타 수정
UPDATE 문장을 사용하여 이미 존재하는 COLUMN 값을 수정한다.
UPDATE table명
SET column명 = value, [column명 = value]
[WHERE 조건식] ;
[ 예제 ]
S_EMP TABLE 에서 ID 가 1 인 사원의 데이타를 다음과 같이 수정하시오.
DEPT_ID : 32, SALARY : 2550
UPDATE S_EMP
SET DEPT_ID = 32, SALARY = 2550
WHERE ID = 2 ;

데이타 삭제
DELETE 문장을 사용하여 데이타를 삭제한다.
DELETE FROM table명
[WHERE 조건식] ;
[ 예제 ]
S_EMP TABLE에서 ID 가 20 보다 큰 사원을 삭제하시오.
DELETE FROM S_EMP
WHERE ID > 20 ;

저장
COMMIT 문장(COMMIT;)에 의해 변경된 모든 내용이 DATABASE 에 저장된다.
변경된 모든 데이타는 DATABASE 에 저장된다.
그 전의 데이타는 완전히 없어진다.
모든 사용자가 변경한 내용을 볼 수 있다.
변경된 ROW 에 걸려있던 LOCK 이 해제된다.
그러므로 다른 사용자가 수정할 수 있다.
모든 SAVEPOINT 가 없어진다.
TRANSACTION 을 종료하고 TRANSACTION 안의 모든 변경된 작업을 저장한다.

취소
ROLLBACK 문장(ROLLBACK)을 사용하여 모든 변경된 내용을 취소한다.
모든 변경이 취소되며 수정하기 전의 데이타가 복구된다.
변경된 ROW 에 걸려있던 LOCK 이 해제된다.
다른 사용자들이 그 ROW 에 대해서 변경을 할 수 있다.
TRANSACTION 을 종료하고 TRANSACTION 안의 모든 변경된 작업을 취소한다.

Savepoint지정~취소
TRANSACTION 안에서 ROLLBACK 할 수 있는 POINT 를 지정한다.
지정된 POINT 까지만 ROLLBACK 한다.
SAVEPOINT savepoint명 ;
ROLLBACK TO savepoint명 ;
[ 예제 ]
S_EMP TABLE 에서 TITLE 이 Stock Clerk 인 사원의 SALARY 를 10% 인상하시오.
SAVEPOINT 를 지정하시오.
S_REGION TABLE 에 다음과 같은 데이타를 입력하시오.
ID : 8, NAME : Central
SAVEPOINT 까지 ROLLBACK 하시오.
UPDATE 결과를 저장하시오.
UPDATE S_EMP
SET SALARY = SALARY * 1.1
WHERE TITLE = 'Stock Clerk' ;
SAVEPOINT S1;
INSERT INTO S_REGION(ID, NAME)
VALUES (8, 'Central') ;
ROLLBACK TO S1;
COMMIT;


제 9 장. Table변경/삭제
Column 추가
TABLE 에 새로운 COLUMN 을 추가한다.
ALTER TABLE table명
ADD (column명 type(size) [DEFAULT value] [column_constraint],
...........) ;
[ 예제 ]
S_REGION TABLE 에 다음과 같은 COLUMN 을 추가하시오.
COMMENTS VARCHAR2(25)
ALTER TABLE S_REGION
ADD (COMMENTS VARCHAR2(25))
(추가될 COLUMN 의 위치는 지정할 수 없다. 새로운 COLUMN 은 마지막 위치에 생성된다.)

Column 변경
ALTER TABLE 문장의 MODIFY 절을 사용하여 다음과 같은 변경을 할 수 있다.
COLUMN 의 크기를 확장할 수 있다.
데이타가 들어있지 않으면 COLUMN 의 크기를 줄일 수 있다.
데이타가 들어있지 않다면 COLUMN 의 타입을 수정할 수 있다.
COLUMN 에 NULL 값이 없다면 NOT NULL CONSTRAINT 를 지정할 수 있다.
DEFAULT VALUE 를 변경할 수 있다.
이미 생성되어 있는 COLUMN 을 변경한다.
ALTER TABLE table명
MODIFY (column명 type(size) [DEFAULT value] [NOT NULL],
.............) ;

Constraint 추가
이미 생성되어 있는 TABLE 에 CONSTRAINT 를 추가한다.
ALTER TABLE table명
ADD (table_constraint) ;
[ 예제 ]
S_EMP TABLE 에 다음과 같은 CONSTRAINT 를 추가하시오.
MANAGER_ID COLUMN 이 S_EMP TABLE 의 ID COLUMN 을 REFERENCE 하는
FOREIGN KEY CONSTRAINT 를 추가하시오.
ALTER TABLE S_EMP
ADD (CONSTRAINT S_EMP_MANAGER_ID_FK FOREIGN KEY(MANAGER_ID)
REFERENCES S_EMP(ID)) ;

Constraint 삭제
이미 생성되어 있는 TABLE 의 CONSTRAINT 를 삭제한다.
ALTER TABLE table명
DROP PRIMARY KEY |
UNIQUE(column명) |
CONSTRAINT constraint명 [CASCADE] ;
[ 예제 ]
S_EMP TABLE 의 다음과 같은 CONSTRAINT 를 삭제하시오.
MANAGER_ID COLUMN 의 FOREIGN KEY CONSTRAINT
ALTER TABLE S_EMP
DROP CONSTRAINT S_EMP_MANAGER_ID_FK ;

전체 데이타의 삭제
TRUNCATE 문장은 DDL 이다.
ROLLBACK SEGMENT 를 만들지 않고 모든 데이타를 삭제한다.
데이타가 삭제된 FREE 영역은 환원된다.
TABLE 로부터 모든 데이타를 삭제한다.
TRUNCATE TABLE table명 ;
[ 예제 ]
S_ITEM TABLE 의 모든 데이타를 삭제하시오.
TRUNCATE TABLE S_ITEM ;

Constraint disable/enable
TABLE 에 있는 모든 데이타가 CONSTRAINT 를 만족시켜야 ENABLE 할 수 있다.
PRIMARY KEY, UNIQUE CONSTRAINT 를 ENABLE 하면 그에 따른 INDEX FILE 이 자동적으로 생성된다.
CASCADE OPTION 은 FOREIGN KEY CONSTRAINT 를 DISABLE 할 때 사용한다.
CONSTRAINT 를 삭제하고 새로 만들지 않고 DISABLE, ENABLE 한다.
ALTER TABLE table명
DISABLE | ENABLE PRIMARY KEY |
UNIQUE(column명) |
CONSTRAINT constraint명 [CASCADE] ;
[ 예제 ]
S_DEPT TABLE 의 PRIMARY KEY CONSTRAINT 를 DISABLE 시키시오.
ALTER TABLE S_DEPT
DISABLE CONSTRAINT S_DEPT_ID_PK CASCADE;
S_EMP TABLE 의 S_EMP_DEPT_ID_FK CONSTRAINT 도 자동적으로 DISABLE 된다.

Table 삭제
TABLE 을 삭제하면 그 TABLE 에 딸린 INDEX FILE 도 삭제된다.
VIEW, SYNONYM, STORED PROCEDURE, FUNCTION, TRIGGER 등은 삭제되지 않는다.
CASCADE CONSTRAINTS 는 모 TABLE 을 삭제하고 자 TABLE 의 FOREIGN KEY CONSTRAINT 도 삭제한다.
DROP TABLE table명 [CASCADE CONSTRAINTS] ;
[ 예제 ]
S_DEPT TABLE 을 삭제하시오.
DROP TABLE S_DEPT CASCADE CONSTRAINTS ;

이름의 변경
TABLE, VIEW, SEQUENCE, SYNONYM 의 이름을 변경한다.
RENAME old명 TO new명 ;
[ 예제 ]
S_ORD TABLE 의 이름을 S_ORDER 로 변경하시오.
RENAME S_ORD TO S_ORDER ;

제 10 장. Sequence
Sequence 생성
SEQUENCE 는 여러 사용자에게 UNIQUE 한 값을 생성해 주는 OBJECT 이다.
SEQUENCE 를 사용하여 PRIMARY KEY 값을 자동적으로 생성한다.
CREATE SEQUENCE sequence명
INCREMENT BY n
START WITH n
MAXVALUE n | NOMAXVALUE
MINVALUE n | NOMINVALUE
CYCLE | NOCYCLE
CACHE n | NOCACHE ;
[ 예제 ]
S_DEPT TABLE 의 ID COLUMN 값에 사용할 SEQUENCE 를 다음과 같이 생성하시오.
START : 51, INCREMENT : 1, MAXVALUE : 9999999, NOCYCLE, NOCACHE
CREATE SEQUENCE S_DEPT_ID
INCREMENY BY 1
START WITH 51
MAXVALUE 9999999
NOCACHE
NOCYCLE ;

Sequence 변경
SEQUENCE 에 정의된 값을 변경한다.
ALTER SEQUENCE sequence명
INCREMENT BY n
MAXVALUE n | NOMAXVALUE
MINVALUE n | NOMINVALUE
CYCLE | NOCYCLE
CACHE n | NOCACHE ;
[ 예제 ]
S_DEPT_ID SEQUENCE 를 다음과 같이 수정하시오.
CACHE : 10
ALTER SEQUENCE S_DEPT_ID
CACHE 10 ;

Sequence 삭제
SEQUENCE 를 삭제한다.
DROP SEQUENCE sequence명 ;
[ 예제 ]
S_DEPT_ID SEQUENCE 를 삭제하시오.
DROP SEQUENCE S_DEPT_ID ;

제 11 장. VIEW

Simple view
SUBQUERY 문장이 간단한 경우 VIEW 를 통해 SELECT,INSERT,UPDATE,DELETE 를 할 수 있다.
■ SELECT : SUBQUERY 의 조건식을 만족하는 데이타만 검색된다.
■ INSERT : NOT NULL COLUMN 을 다 포함하고 있는 경우 INSERT 를 할 수 있다.
SUBQUERY 의 조건식을 만족하지 않는 데이타도 입력이 가능하다.
■ UPDATE : VIEW 를 통해 SELECT 할 수 있는 데이타만 수정할 수 있다.
SUBQUERY 의 조건식을 만족하지 않는 데이타도 수정이 가능하다.
■ DELETE : VIEW 를 통해 SELECT 할 수 있는 데이타만 삭제할 수 있다.
CREATE VIEW view명 [(alias명, alias명....)]
AS SUBQUERY ;
[ 예제 ]
S_EMP TABLE 에서 DEPT_ID 가 45 인 사원의 ID, LAST_NAME, DEPT_ID, TITLE 을
선택해서 VIEW 를 생성하시오.
CREATE VIEW EMP41
AS SELECT ID, LAST_NAME, DEPT_ID, TITLE
FROM S_EMP
WHERE DEPT_ID = 45 ;

With check option
VIEW 를 정의할때 지정한 조건식을 만족하는 데이타만 INSERT, 또는 조건식을 만족하는 데이터로만 UPDATE 가 가능하다.
데이타가 VIEW 의 조건식을 만족하는지 CHECK 한다.
CREATE VIEW view명 [ (alias명, alias명...)]
AS SUBQUERY
WITH CHECK OPTION ;
[ 예제 ]
S_EMP TABLE 에서 DEPT_ID 가 45 인 사원의 ID, LAST_NAME, DEPT_ID, TITLE
을 선택해서 VIEW 를 생성하시오.
단, DEPT_ID 가 45 가 아닌 사원은 입력되지 못하게 만드시오.
CREATE VIEW EMP45
AS SELECT ID, LAST_NAME, DEPT_ID, TITLE
FROM S_EMP
WHERE DEPT_ID = 45
WITH CHECK OPTION ;

With read only
SELECT만 가능한 VIEW 를 생성한다.
CREATE VIEW view명 [(alias명, alias명...)]
AS SUBQUERY
WITH READ ONLY ;
[ 예제 ]
S_EMP TABLE 에서 ID, LAST_NAME, DEPT_ID, SALARY 가 SELECT 만 되도록 VIEW 를 생성
CREATE VIEW R_EMP
AS SELECT ID, LAST_NAME, SALARY
FROM S_EMP
WITH READ ONLY ;

Force
기준 TABLE 이 존재하지 않아도 VIEW 를 생성한다.
CREATE FORCE VIEW view명 [(alias명, alias명...)]
AS SUBQUERY ;
[ 예제 ]
S_EMP TABLE 이 없어도 S_EMP TABLE 에서 ID, LAST_NAME, SALARY 를 선택해서
VIEW 를 생성하시오.
CREATE FORCE VIEW T_EMP
AS SELECT ID, LAST_NAME, SALARY
FROM S_EMP ;

complex view
SUBQUERY 문장에 JOIN, FUNCTION, DISTINCT 또는 연산이 포함된 경우를 말하며 이 경우 VIEW 를 통한 DML 은 수행할 수 없다.
COMPLEX VIEW 를 생성한다.
CREATE VIEW view명 (alias명, alias명...)
AS SUBQUERY ;
[ 예제 ]
S_EMP TABLE 과 S_DEPT TABLE 에서 ID, LAST_NAME, DEPT_ID, NAME 을
선택해서 VIEW 를 생성하시오.
CREATE VIEW EMPDEPT
AS SELECT E.ID, E.LAST_NAME, E.DEPT_ID, D.NAME
FROM S_EMP E, S_DEPT D
WHERE E.DEPT_ID = D.ID ;

View 삭제
VIEW 를 삭제하면 DATABASE 로부터 VIEW 의 정의가 삭제된다.
VIEW 가 기초로 한 TABLE 은 삭제되지 않는다.
DROP VIEW view명 ;
[ 예제 ]
EMPDEPT VIEW 를 삭제하시오.
DROP VIEW EMPDEPT ;

제 12 장. Index

Index 생성
TABLE 생성시 PRIMARY KEY 나 UNIQUE CONSTRAINT 를 지정하면 UNIQUE INDEX 가 자동적으로 만들어 진다.
이 외의 COLUMN 으로 QUERY 를 할 때 속도를 향상시키기 위해서 INDEX 를 생성한다.
INDEX 를 생성하면 QUERY 속도는 빨라질 수 있으나 DML 속도는 늦어질 수 있다.
일반적으로 다음과 같은 경우에 INDEX 를 생성한다.
■ COLUMN 이 WHERE 절이나 JOIN 조건식에 빈번하게 사용될 때
■ COLUMN 값이 넓게 분포되어 있을 때
■ COLUMN 값에 NULL 값이 많이 포함되어 있을 때
■ TABLE 이 크고 QUERY 하는 데이터 양이 10 % 이하일 때
CREATE [UNIQUE] INDEX index명
ON table명(column명[, column명...]) ;
[ 예제 ]
S_EMP TABLE 에서 LAST_NAME 의 QUERY 속도를 향상하기 위하여 INDEX 를 생성하시오.
CREATE INDEX S_EMP_LAST_NAME_IDX
ON S_EMP(LAST_NAME) ;

Index 삭제
INDEX 는 수정할 수 없다. 수정하고 싶은 경우 삭제하고 다시 생성한다.
DROP INDEX index명 ;
[ 예제 ]
S_EMP_LAST_NAME_IDX INDEX 를 삭제하시오.
DROP INDEX S_EMP_LAST_NAME_IDX ;

Posted by 시스템매니아
,
Regedit 실행

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\Wds
\Repwd\Tds\Tcp

PortNumber 더블클릭후

10진수를 선택하고 기본포트(3389) 다른 포트번호(1234)를 입력


HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp

PortNumber 더블클릭후

10진수를 선택하고 기본포트(3389) 다른 포트번호(1234)를 입력
Posted by 시스템매니아
,
이들 계정의 암호는 Windows 2000 사용자 계정 데이타베이스(SAM)에 들어 있습니다.
이들 데이터 저장소에서 암호를 얻는 것은 심각한 보안 위반이 됩니다. 몇 가지 툴을 이용하여 이들 암호를 얻을 수는 있으나,
이 암호는 메타베이스에도 있기 때문에 다음과 같은 스크립트를 Notepad같은 문자 편집기에 입력하고,
스크립트를 getpass.vbs(.vbs로 끝나기만 하면 아무 이름을 써도 됨)로 저장합니다.

------------------------------------------------------------------------
Dim IIsObject
Set IIsObject = GetObject ("IIS://localhost/w3svc")
WScript.Echo "According to the metabase, the anonymous credentials are:"
WScript.Echo " AnonymousUserName = " & _
IIsObject.Get("AnonymousUserName")
WScript.Echo " AnonymousUserPass = " & _
IIsObject.Get("AnonymousUserPass")
WScript.Echo " WAMUserName = " & IIsObject.Get("WAMUserName")
WScript.Echo " WAMUserPass = " & IIsObject.Get("WAMUserPass")
Set IIsObject = Nothing
------------------------------------------------------------------------

스크립트를 실행하면, 디폴트 IUSER_computername과 IWAM_computername 계정에 대한 암호를 볼수 있습니다.

Posted by 시스템매니아
,
바탕화면에 아무 단축 아이콘 하나를 만들고
아래와 같이 입력합니다.

대상 : C:\WINDOWS\system32\tsshutdn.exe 1800 /powerdown

그리고 시작위치에는 다음과 같이 넣으십시요..

시작위치 : C:\WINDOWS\system32

그러시고 적용하시면 됩니다.

위의 글에 보면 1800이라는 숫자가 있는데..
이숫자의 의미는 1800초 후에 꺼진다는 의미입니다.
1800초면 30분이 되죠. 만약 한시간 뒤에 꺼지게 하고 싶다면
1800이란 숫자대신에 3600이라고 쓰시면 됩니다.
Posted by 시스템매니아
,
1. SQL의 DTS WIzzard(데이타 가져오기/내보내기)를 실행합니다.

2. 데이타 원본선택란을 클릭하여 변환을 원하는 소스타입을 선택한다.
ex) Micosoft Access,Microsoft Excel등을 선택

3. 소스 타입 선택후 버튼을 클릭하여 변경을 원하는 파일을 선택한다.

4. 변환할 파일 선택 합니다.

5. 선택후 다음을 클릭합니다. Access DB의 경우 사용자 ID와 암호가 있을 경우 입력합니다 .

6. Transfer할 대상을 선택합니다. (다이렉트 웹 호스팅 DB 서버)
서버와 사용자 이름,암호 입력후 데이타 베이스를 선택합니다.
데이타 베이스선택 완료후 다음을 클릭합니다.

7. Transfer할 방법을 선택합니다.
* DB서버에 테이블로 변환시 첫번째 '원본 데이터 베이스에서 테이블 및 뷰 복사'를 선택합니다.

8. 변환할 테이블을 선택합니다. 특별한 경우 외에는 기본 옵션을 사용십시요.

9. 실행 시기를 결정합니다. 기본값은 즉시 실행입니다.

10. 확인을 눌러 변환을 실행합니다.

11. Transfer중 진행률과 현재 상태가 표시 됩니다.

12. 정상적으로 완료될 경우 이와 같은 메시지를 확인할 수 있습니다.
ex)새창에 1개의 테이블을 Microsoft Access에서 Microsoft SQL Server(으)로 복사했습니다.

13. 변환 완료 후 해당 DB서버에 접속하여 정상적으로 테이블이 생성되었는지 확인합니다.
Posted by 시스템매니아
,
터미날서비스가 정상적으로 작동중인데 접속을 하려고 하면 "접속자가 많아 접속할수 없습니다" 라는
메세지 창이 뜨는 경우가 있습니다. 이런 경우 계속 접속이 안되어 터미날서비스를 언인스톨 한 다음
다시 인스톨해도 접속이 안되는 경우가 있습니다.
"접속자가 많아 접속할수 없습니다"라는 메세지 창과 함께 계속 접속이 안될경우
터미날서비스를 언인스톨하지 말고

시작->프로그램->관리도구->터미날서비스구성에서 연결을 보시면 RDP-Tcp 연결이 있을것입니다.
이 연결을 삭제하시고 새로 생성하면 터미날서비스가 다시 작동 합니다.
Posted by 시스템매니아
,
1. Windows 2000 셋업 디스켓 또는 Windows 2000 CD-ROM으로 컴퓨터를 restart 합니다.

2. 셋업 화면이 나오면 Windows 2000 복구를 위해 <R> 키를 누릅니다.

3. Windows 2000 복구 옵션에서 복구 콘솔을 사용하여 Windows 2000 설치를 복구하기 위해 <C> 키를 누르십시오.

4. 복구를 위한 윈도우 2000 설치 영역의 선택과 관리자 패스워드 요구가 나타납니다.

5. 관리자 패스워드 입력 후 에는 바로 기본 루트인 c:\winnt 폴더로 넘어 갑니다.

6. Windows 2000 CD-ROM에 할당된 드라이브로 들어 갑니다.

7. 다음과 같이 command를 입력하고 enter 키를 누릅니다.
copy drive:\i386\ntldr c:\

copy drive:\i386\ntdetect.com c:\

만약 파일을 overwrite할것인지 물어보면 y를 입력하고 enter를 누릅니다.

8. 다음과 같이 command를 입력하고 enter 키를 누릅니다.
type c:\Boot.ini

다음과 같은 화면이 나타 납니다 :

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Server" /fastdetect

만약 The system cannot find the file or directory specified. 라는 메세지가 나오면 Boot.ini파일이 없거나 손상된겁니다.

9. 만약 Boot.ini파일 없거나 손상됐다면 다음의 순서로 Boot.ini 파일을 새로 만듭니다.

a. Notepad를 이용하여 다음과 같은 입력하여 새로운 boot loader파일을 만듭니다.

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Server" /fastdetect

b. 플로피 디스크에 저장하고 파일명을 Boot.ini로 합니다.

c. 복구 콘솔에서 다음과 같이 command를 입력합니다. 플로피에 저장한 Boot.ini파일을 컴퓨터로 복사 합니다.
copy a:\Boot.ini c:\

10.복구콘솔에서 exit를 입력하고 컴퓨터를 restart 합니다.

Posted by 시스템매니아
,
Windows가 네트워크에서 중복되는 MAC(Media Access Control) 주소를 감지하면 시스템 이벤트 로그에 다음 메시지 중 하나가 나타납니다.

Event ID: 4198
Source : TCP/IP
Description: 시스템에서 네트워크 하드웨어 주소 02:AD:8C:DE:00:FD을(를) 가진 시스템과 IP 주소 129.0.0.1의 주소 충돌이 발견되었습니다. 로컬 인터페이스를 사용할 수 없습니다.


-또는-

Event ID : 4199
Source : TCP/IP
Description: IP 주소 0.0.0.0과(와) 네트워크 하드웨어 주소 xx:xx:xx:xx:xx:xx을(를) 가진 시스템과 주소 충돌이 있습니다. 따라서 이 시스템에서 네트워크 작동이 제대로 되지 않을 수도 있습니다.

충돌 문제를 해결하고 시스템을 다시 시작할 때까지 이 컴퓨터의 TCP/IP를 통한 모든 네트워크 연결이 중단됩니다.


이 문제를 해결하려면 해당 네트워크의 다른 컴퓨터가 같은 MAC(Media Access Control) 주소를 사용하고 있는지 확인해야 합니다. Microsoft TCP/IP 스택과 함께 제공되는 몇 가지 도구를 사용하면 중복된 주소를 가진 컴퓨터를 찾을 수 있습니다.

중복된 MAC(Media Access Control) 주소를 분리하려면 다음과 같이 하십시오.

작업 중인 TPC/IP 기반 클라이언트에서:

1. 명령 프롬프트에서 아래와 같이 입력하여 이벤트 로그 항목에 나와 있는 TCP/IP 주소를 Ping합니다.

PING 129.0.0.1

중복된 주소를 가진 컴퓨터에서 다음과 비슷한 응답을 받습니다.

Pinging 129.0.0.1 with 32 bytes of data:

Reply from 129.0.0.1: bytes=32 time=10ms ttl=128
Reply from 129.0.0.1: bytes=32 time=<10ms ttl=128
Reply from 129.0.0.1: bytes=32 time=<10ms ttl=128
Reply from 129.0.0.1: bytes=32 time=<10ms ttl=128


2. 해당 컴퓨터의 MAC(Media Access Control) 주소가 중복되었는지 확인하려면 명령 프롬프트에서 아래와 같이 입력합니다.

ARP -a 129.0.0.1

다음과 같은 응답을 받습니다.

Internet Address Physical Address
129.0.0.1 02:A0:8C:DE:00:FD <-- matches the event log entry

3. 이제 명령 프롬프트에서 아래와 같이 NBTSTAT 명령을 사용하여 중복 컴퓨터의 익숙한 NetBIOS 이름을 가져올 수 있습니다.
NBTSTAT -A 129.0.0.1

해당 컴퓨터의 NetBIOS 이름과 함께 아래와 같은 응답을 받습니다. 네트워크에서 해당 컴퓨터를 찾을 수 있도록 해당 컴퓨터의 소유자를 확인하려면 이 NetBIOS 이름을 사용합니다.

NAME TYPE STATUS
-----------------------------------------------
NTSERVER1 <00> Unique
DOMAN-NAME <00> GROUP
NTSERVER1 <03> Unique

Media access control address = 02-A0-8C-DE-00-FD

다음 메시지가 나타나면,

HOST NOT FOUND.
이 메시지는 해당 중복 컴퓨터가 Novell 서버, Unix 서버, Router 또는 Jet Direct Printer처럼 NetBIOS를 사용하지 않는 컴퓨터임을 나타냅니다.
중복된 주소를 가진 컴퓨터를 찾은 후에 해당 네트워크 카드를 대체하거나, 로컬로 관리되는 MAC(Media Access Control) 주소로 변경된 경우 해당 네트워크에서 고유한 주소를 갖도록 변경합니다.
Posted by 시스템매니아
,
이벤트 뷰어에 다음과 같은 오류 메세지를 종 종 볼수 있습니다.

Windows 2000 인터넷 프로토콜(IP) 스택이 여러 네트워크 카드(IP)에 바인딩되어 있을 때 다음 이벤트가 발생할 수 있습니다.
이벤트 ID: 4000
원본: SMTPSVC
종류: 경고
설명: Message delivery to the remote domain "your.domain.com" failed. 내부 DNS 오류 때문에 원격 서버를 찾을 수 없습니다.
0000: c00402e7

원인은 SMTP 서비스는 메일을 배달하려고 할 때 DNS(도메인 이름 서비스) 서버를 검색하여 DNS 조회를 수행합니다. TCP/IP가 여러 IP에 바인딩되어 있으면 바인딩 순서에 따라 첫번째 IP 주소에 연결하려고 합니다. 이 IP가 DNS가 반환한 MX 레코드에 전달할 수 있는 IP가 아니면 연결이 실패하고 이벤트 4000이 로깅됩니다. 메시지가 재시도 상태에 들어가고 그 결과 시간이 초과되기 때문에 배달 못 함 보고서(NDR)가 생성됩니다.


이 문제를 해결하려면 다음과 같이 하세요.

1. 바탕 화면에서 네트워크 환경을 마우스 오른쪽 단추로 누릅니다.

2. 등록 정보를 누릅니다.

3. 고급 메뉴에서 고급 설정을 누른 다음 인터넷 IP의 바인딩 순서를 내부 IP보다 앞쪽으로 변경합니다. 이렇게 하면 DNS 쿼리가 조회를 수행하려고 할 때 정확한 네트워크 연결을 찾습니다.

Posted by 시스템매니아
,
원인을 보면
90%이상은 실제로 메인보드나 CPU, 램의 에러에서 기인하고
소프트웨어에서 기인하는 경우는 그 소프트웨어가 시스템의 과도하고 정밀한
성능을 요구하는 경우나 링 0 영역을 건들다 오류가 난 경우이다

첫번째

내컴퓨터] → [등록정보] → [시작및복구] → [디버깅정보쓰기]

이곳에서 "전체메모리덤프라고 되어 있는 것을 "작은 메모리 덤프(64KB)"변경 하는방법이 있다
그리고 가상램도 물리적사용램의 2배정도 잡아준다

두번째

메모리슬롯을 변경한다

세번째

VIA 보드의 경우는 될 수 있으면 초기 윈도우 설치 시에 4in1 최상버
전을 설치해 준 후 그래픽카드를 다시 잡아주면 효과적이라고 한다

네번째

이벤트 로그 저장을 2~3일 정도로 낮추는 방법도 메모리 덤프를 예방하는 방법이라고한다

다섯번째

메모리 덤프를 사용하지 않는다. 디버깅정보쓰기에 없음으로 한다
윈도우를 표준PC로 해서 IRQ의 공유를 좀 더 원할히 한다

여섯번째

종료시 그러면 자기의 다이렉트버전을 8.1버전이상으로 설치한다

일곱번째

그래픽이나 사운드, 수신카드등 드라이버 설치시는 최신버전보단 ms에서 공인된 드라이버 버전을 사용한다

여덜번째

쿨러는 시원한걸 사용한다 시스템(메인보드 시피유 램..)
열받어면 자주 뜬다

아홉번째

컴에 정전기를 될수잇는한 적게흐러게한다

열번째
irq를 분산해 사용한다
Posted by 시스템매니아
,

ASP 속도 개선법

Windows2003 2007. 9. 22. 14:15
*Response.Redirect 대신 Sever.Transfer를 사용하라

Response.Redirect는 Sever에서 브라우저에 요청 후 Sever로 돌아오나. Sever.Transfer는 Server내부에서 처리됩니다.

*Directory URL에 후행 슬러시 사용

후행 슬래시를 생략하면 브라우저는 서버에 요청하여 디렉터리를 요구하고 있다는 응답을 받습니다. 그러면 브라우저는 URL에 슬래시를 첨가하여 두번째 요청을 하며 이때서야 서버가 그 디렉터리에 대한 기본 문서로 응답합니다.

*Sever 변수사용금지

서버 변수에 액세스하면 웹 사이트가 서버에 특별한 요청을 하게 되어 요청한 것만이 아니라 모든 서버 변수를 수집하게 됩니다. 속도가 저하됨
ex : < Response.Write(“Data”)>

*< OBJECT> Tag를 사용하라

Server.CreateObject는 즉시 개체를 만듭니다. 이 개체를 나중에 사용하지 않는다면 결국 리소스를 낭비하는 것입니다. < object id=objname> 태그는 objname을 선언하지만 이 개체의 메서드 또는 속성 중 하나가 처음 사용될 때까지 objname은 실제로 만들어지지 않습니다.
Ex : < OBJECT runat=server progid=ADODB.Connection id=dbcon> < /OBJECT>

*일괄 처리 인라인 스크립트 및 Response.Write 문

응답버퍼링을 켜지 않으면 이 문(statement)이 여러 작은 패킷으로 네트워크를 통해 브라우저로 데이터를 쓰게 됩니다. 이 과정은 매우 느립니다. 작은 양의 스크립트 및 HTML을 여기 저기 배치하면 스크립트 엔진과 HTML간의 전환이 일어나서 성능이 떨어집니다. 가깝게 모여있는 인라인 식(expression)을 Response.Write를 한 번 호출하는 것으로 교체합니다. 특히 게시판과 같이 Until 문을 사용할 때 사용하시면 좋은 효과를 보것입니다.
Ex)
< table>
< % For Each fld in rs.Fields %>
< th>< % = fld.Name %>< /th>
< %
Next
While Not rs.EOF
%>
< tr>
< % For Each fld in rs.Fields %>
< td>< % = fld.Value %>< /td>
< % Next
< /tr>
< % rs.MoveNext
Wend %>
< /table>
아래에 있는 더 효율적인 코드는 행마다 응답 스트림에 쓰기가 하나 있습니다. 모든 코드는 하나의 VBScript 블록에 포함됩니다.
< table>
< %
For each fld in rs.Fields
Response.Write ("< th>" & fld.Name & "< /th>" & vbCrLf)
Next
While Not rs.EOF
Response.Write ("< tr>")
For Each fld in rs.Fields %>
Response.Write("< td>" & fld.Value & "< /td>" & vbCrLf)
Next
Response.Write "< /tr>"
End
%>< /table>


*세션 개체의 현명한 사용

ASP는 자동으로 웹 서버에 접근하는 모든 사용자를 위한 세션을 작성합니다. 각 세션은 약 10 KB의 메모리 오버헤드(세션에 저장된 모든 데이터의 상단에 있는)를 갖고 있어서 모든 요청을 약간 늦춥니다. 세션은 구성할 수 있는 시간 제한 기간동안 유효하며 이 제한 시간은 일반적으로 20분입니다.
세션이 필요하지 않은 컨텐츠(도움말 화면, 방문자 영역 등)를 세션이 꺼진 별도의 ASP 응용 프로그램으로 옮길 수 있습니다. 각 페이지를 기초로 해당 페이지에 세션 개체가 필요 없다는 것을 알리기 위해 다음과 같은 지시어를 ASP 페이지 상단에 놓을 수 있습니다.
< % @EnableSessionState=False %>
이 지시어를 사용하게 되는 이유 중 하나는 세션이 프레임셋과 관심있는 문제를 만드는 것입니다. ASP는 언제나 한번에 한 세션에서 하나의 요청만이 실행되도록 보장합니다. 따라서 브라우저가 한 사용자를 위해 여러 페이지를 요청하면 한번에 단지 하나의 ASP 요청만이 세션에 전달되기 때문에 세션 개체에 액세스할 때 멀티스레딩 문제를 방지하지만 모든 페이지는 동시에 페인트되지 않고 차례로 순차적 방법으로 페인트됩니다. 어떤 프레임셋 페이지가 세션에 의지하지 않는 다면 ASP가 @EnableSessionState=False 지시어를 사용하도록 하십시오

Posted by 시스템매니아
,
출처 : http://www.taeyo.pe.kr

★가정을 하자!!

하야시의 컴퓨터는 다음과 같다.

컴퓨터이름 : waglnet

IP :123.123.123.123 (<--IP가 참 특이하죠 ^^; )

OS : WIN2000

DATABASE : SQL2000

DB : blood (sql서버안의 계정. master, model, pubs...등과같은)

SQL ODBC연결명 : bloodwar

사용자 계정 : hahaysh

비밀번호 : 123

CNU(클라이언트유틸러티셋팅) : starcraft

엑세스 파일명 : asp.mdb

엑세스파일경로 : c:\asp\asp.mdb

엑세스파일 ODBC연결명 : asp




▷ SQL서버 : ODBC 연결방법

이방법은 ODBC 설정없이도 ODBC를 통한 접근을 가능하게 만들어준다.

Driver= {SQL Server}; Server=(컴퓨터이름)혹은(IP)혹은(CNU셋팅명);Database=디비이름; UID=아이디; PWD=비밀번호

※위의 CNU는 클라이언트 네트워크 유틸리티의 약자이다.

예)

첫 번째 : ODBC이용

Driver={SQL Server}; Server=bloodwar;Database=blood; UID=hahaysh; PWD=123

두 번째 : 컴퓨터이름이용

Driver={SQL Server}; Server=waglnet;Database=blood; UID=hahaysh; PWD=123

세 번째 : IP이용

Driver={SQL Server}; Server=123.123.123.123;Database=blood; UID=hahaysh; PWD=123

네 번째 : CNU셋팅이용

Driver={SQL Server}; Server=starcraft;Database=blood; UID=hahaysh; PWD=123

예제:

아래의 예제가 실제 사용할 수 있는 예제인데... 우리는 디비연결하는 부분만 알아보기로 했기 때문에... 잡다한(?)것들은 뺀상태로 디비연결하는 부분만 따로 그밑에 소스에서 정리를 하였다. 혼동하지 않도록 하자.

<object runat=server progid=adodb.command id=cm></object>
<object runat=server progid=adodb.connection id=db></object>
<object runat=server progid=adodb.recordset id=rs></object>
<% '이소스가 실제를 쓰는 소스일 것이다.
db.open "Driver={SQL Server}; Server=waglnet;Database=blood; UID=zerg; PWD=zerg"
function nullcheck(a)
if trim(a)="" then
%>
<script language="javascript">
alert("\n빈값이 있습니다.!!")
history.back();
</script>
<% response.end
else
nullcheck=replace(trim(a),"'","''")
end if
end function
function htmlcheck(b)
htmlcheck=server.htmlencode(b)
end function
%>


원래 하야시는 디비연결을 해주는 인클루드파일에 recordset개체와 command개체를 생성시켜두는 방법을 쓴다. 하지만 밑의 예제에서 뺐다. 이점도 유의 하기 바란다.

DNS이용 ODBC연결법 첫번째

<object runat=server progid=adodb.connection id=db></object>

<% 'ODBC설정이 선수되어야 한다. ODBC연결명으로

db.open "dsn=bloodwar;uid=hahaysh;pwd=123"

%>


DNS없이 ODBC연결법 두번째

<object runat=server progid=adodb.connection id=db></object>

<% 'ODBC설정이 필요없다. IP로

db.open "Driver={SQL Server}; Server=123.123.123.123;Database=blood; UID=hahaysh; PWD=123"

%>


DNS없이 ODBC연결법 세번째

<object runat=server progid=adodb.connection id=db></object>

<% 'ODBC설정이 필요없다. 컴퓨터이름으로

db.open "Driver={SQL Server}; Server=waglnet;Database=blood; UID=hahaysh; PWD=123"

%>


DNS없이 ODBC연결법 네번째

<object runat=server progid=adodb.connection id=db></object>

<% 'ODBC설정이 필요없다. CNU설정으로

db.open "Driver={SQL Server}; Server=starcraft;Database=blood; UID=hahaysh; PWD=123"

%>






▷ SQL서버 : OLE DB 접근 방법

Provider=SQLOLEDB; Data Source=컴퓨터이름혹은IP혹은CNU설정명;Initial Catalog= ;디비이름; User id= 아이디;password= 비밀번호

예:

첫 번째: 컴퓨터이름으로

Provider= SQLOLEDB;Data Source=waglnet;Initial Catalog= blood;User id= hahaysh; password=123

두 번째: IP이름으로

Provider= SQLOLEDB;Data Source=123.123.123.123;Initial Catalog= blood;User id= hahaysh; password=123

세 번째: CNU셋팅으로

Provider= SQLOLEDB;Data Source=starcraft;Initial Catalog= blood;User id= hahaysh; password=123



OLE DB 직접 접근 방법 첫번째

<object runat=server progid=adodb.connection id=db></object>

<% '컴퓨터이름으로

db.open "Provider= SQLOLEDB;Data Source=waglnet;”&_
“Initial Catalog= blood;User id= hahaysh; password=123"

%>


OLE DB 직접 접근 방법 두번째

<object runat=server progid=adodb.connection id=db></object>

<% ' IP로

db.open "Provider= SQLOLEDB;Data Source=123.123.123.123;”&_
”Initial Catalog= blood;User id= hahaysh; password=123"

%>


OLE DB 직접 접근 방법 세번째

<object runat=server progid=adodb.connection id=db></object>

<% 'CNU연결명으로

db.open "Provider= SQLOLEDB;Data Source=starcraft;”&_
”Initial Catalog= blood;User id= hahaysh; password=123"

%>




▷ Ms-Access OLE DB 직접접근 방법

Provider=Microsoft.Jet.OLEDB.4.0;Data Source= 엑세스파일의 물리경로

예:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\asp\asp.mdb

OLE DB 직접 접근 방법

<object runat=server progid=adodb.connection id=db></object>

<% 'CNU연결명으로

db.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\asp\asp.mdb"

%>




위의 내용을 하나의 파일로 정리를 해보았다. 참고하도록 하자.

별로 의미가 없는거기는 하지만... 한번 봐두록 하자.

도움이 되리라 생각을 한다.

<object runat=server progid=adodb.connection id=db></object>

<%

밑에꺼 중에서 하나를 쓰면 될것이다.!!

db.open "dsn=bloodwar;uid=hahaysh;pwd=123"

db.open "Driver={SQL Server}; Server=123.123.123.123;Database=blood; UID=hahaysh; PWD=123"

db.open "Driver={SQL Server}; Server=waglnet;Database=blood; UID=hahaysh; PWD=123"

db.open "Driver={SQL Server}; Server=starcraft;Database=blood; UID=hahaysh; PWD=123"

db.open "Provider=SQLOLEDB;Data Source=waglnet;Initial Catalog=blood;User id=hahaysh; password=123"

db.open "Provider=SQLOLEDB;Data Source=123.123.123.123;Initial Catalog=blood;User id=hahaysh; password=123"

db.open "Provider=SQLOLEDB;Data Source=starcraft;Initial Catalog=blood;User id=hahaysh; password=123"

db.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\asp\asp.mdb

db.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\asp\asp.mdb"

%>




※아래의 OLEDB에대해 너무나 깜찍하게 정리를 해주신 태오님의 멘트를 같이 올린다.

더욱 자세한 사항은 태오님의 사이트를 방문해서 자세히 보도록 하자.

그럴리는 없겠지만, 혹시나해서 태오님의 사이트주소를 같이 올린다.

자주 들러 태오님의 내공을 흡입해보도록 하자.!!

http://www.taeyo.pe.kr

잠깐 !! 잘 모르겠는디요. ADO, ODBC, OLEDB 뭐가 무엇을 하는것이죠?

그렇습니다. 분명 혼란함을 느끼시는 분들이 있을 것입니다.
이 즈음에서 간단하게만 정리하고 계속나아가고자 하는데요.
ADO는 데이터를 다루는 개체이며, ODBC, OLEDB는 데이터의 제공자격입니다.
무슨 말인지 잘 이해가 안 된다면 다음 예를 보도록 하세요. (이것은 단지 예일 뿐이기는 합니다)

우리에게는 동시통역기가 하나있다고 가정해 봅시다요.
이를 동작시키면 외국말들이 자동으로 알아들을 수 있게 나온다고 가정합니다.
또한, 우리가 이야기하면 자동으로 번역해서 말을 전해주기도 하고 말이죠.
대신에 그러한 기능을 사용하기 위해서는 그 통역기에는 통역하고픈 각각의 나라용 칩을
기계에 추가해 주어야 합니다.

기본적으로 미국, 러시아, 일본의 칩은 제공된다고 가정합시다.
이제 외국사람들을 만나는 것은 겁나지 않을 것입니다.
만나면 즉시 이 자동통역기를 동작시키면 되니 말이죠. 하하.. 이젠 외제를 만나도 걱정없을 검다...
그런데, 갑작스럽게 남아프리카 사람을 만나게 되었습니다. 이 때도 걱정이 없슴다.
남아프리카용 통역 칩을 사서 기계에 장착하면 되니 말이죠. 돈만 있으면... 하하

이 동시통역기가 바로 ADO라고 볼 수 있으며, 각 나라용 칩은 ODBC 라고 볼 수 있습니다.
그리고 각각의 외국인들은 데이터베이스들이라고 볼 수 있고 말이죠. 이해가 가시죠?

그런 어느날, 기존의 통역기능을 좀 더 효과적으로 사용할 수 있으면서도,
동물의 언어까지도 통역이 가능한 기술이 개발되었으니 그것이 바로 OLEDB 기술이라
하더라는 말씀입니다.

주의할 것은 이렇게 원본 데이터를 우리가 사용할 수 있게 제공해주는 역할을 하는 것이
ODBC, OLEDB 기술이구요. 이렇게 제공받은 데이터를 처리하는 기술이 ADO라는 것.

어때요? 쏙쏙 들어오죠???

Posted by 시스템매니아
,
출처 : http://www.sqlworld.pe.kr

데이터베이스를 사용하다보면 잘못된 트랙젠션으로 인하여 그 이전의 상태로 복구해야 하는 필요성을 느끼게 되는 경우가 있습니다. 예를 들어 잘못해서 테이블을 전부 지워버린 경우 그 이전 상태로 복구하거나 아니면 수작업으로 입력해야 합니다.

로그 백업을 이용하여 특정 시점으로 데이터베이스를 복구하는 방법을 살펴보도록 하겠습니다.


가끔 이런 질문을 받습니다.

"큰일 났어요. 잘못해서 테이블을 다 지워버렸거든요. 이거 복구하지 못하면 저 짤려요. 제발 살려주세요.."

저도 위와 같은 경우를 경험한 적이 있었습니다. 분명히 SELECT를 하려는 생각으로 쿼리문을 날렸는데 아뿔사, 제가 수행한 쿼리문은 SELECT 문이 아니고 DELETE 문이었습니다. 참으로 황당하더군요.

SQL 서버에서는 트랜잭션 로그 백업을 이용하여 특정 시점으로 데이터베이스를 복구하는 방법이 있습니다. 위와 같이 테이블을 전부 지워버렸으면 지우기 바로 이전 상태로 복구하면 모든 문제는 해결이 됩니다. 물론 이와 같은 복구 작업이 항상 가능한 것은 아닙니다. 다음과 같은 조건이 만족된 상태여야 합니다.

① 데이터베이스 백업모델이 "최대" 여야 합니다.
② 전체 백업을 받은 상태여야 합니다.
③ 이전의 로그백업이 있다면 안전하게 보관된 상태여야 합니다.

지금 부터의 복구 예제는 다음과 같은 순서로 이루어 집니다.

o 예제 테이블 만들기
o 테이블에 5개의 레코드 추가
o 데이터베이스 전체 백업
o 테이블에 5개의 레코드 추가
o 데이터베이스 로그 백업
o 테이블에 5개의 레코드 추가
o 테이블 삭제 (문제발생)
o 현 시점의 로그 백업
o 전체백업 Restore
o 기존 로그 백업 Restore
o 문제 발생후 백업 받은 로그 Restore(테이블을 지우기 전까지만)

단, 예제에 사용되는 sqlworld 데이터베이스의 복구모델은 "최대" 입니다.

1) 데이터베이스 전체 백업

우선 Test1 이라는 예제 테이블을 만들고 레코드 5개를 추가하도록 하겠습니다.


CREATE TABLE Test1
(
col1 int,
col2 char(05)
)
GO
INSERT INTO Test1 VALUES(1,'AAAAA')
INSERT INTO Test1 VALUES(2,'BBBBB')
INSERT INTO Test1 VALUES(3,'CCCCC')
INSERT INTO Test1 VALUES(4,'DDDDD')
INSERT INTO Test1 VALUES(5,'EEEEE')


이제 지금 상태의 sqlworld 데이터베이스를 전체 백업 받도록 하겠습니다.


BACKUP DATABASE sqlworld TO DISK = 'D:\sqlworld.bak'

위 전체 백업으로 인해 우리는 어떤 사태가 발생하더라도 Test1 테이블에 5개의 레코드가 추가된 상태로 복구를 할 수 있습니다.(당연하죠)

2) 로그백업

이제Test1 테이블에 레코드를 5개 더 추가하도록 하겠습니다.


INSERT INTO Test1 VALUES(6,'FFFFF')
INSERT INTO Test1 VALUES(7,'GGGGG')
INSERT INTO Test1 VALUES(8,'HHHHH')
INSERT INTO Test1 VALUES(9,'IIIII')
INSERT INTO Test1 VALUES(10,'JJJJJ')

앞에서 전체 백업을 받은 상태이므로 이제는 방금 작업한(5개의 레코드 추가) 트랜잭션만을 보관하도록 로그 백업을 받도록 하겠습니다. (물론 지금 같은 경우는 예제이므로 데이터량이 많지 않아 전체 백업을 다시 받아도 되지만 실무에서는 전체 데이터베이스 양이 엄청 큰 경우라면 로그 백업을 받는게 더 효율적일 수 있습니다.)


BACKUP LOG sqlworld TO DIsk = 'D:\sqlworld_log.bak'

만일 이 상태에서 데이터베이스에 문제가 발생하여 복구를 해야 하는 경우는 처음에 받은 전체 백업을 Restore 한 후에 뒤에 받은 로그 백업을 Restore 하면 됩니다. 여기 까지는 누구나 다 아는 사실입니다.

3) 사태발생

이제Test1 테이블에 레코드를 5개 더 추가하도록 하겠습니다.


INSERT INTO Test1 VALUES(11,'KKKKK')
INSERT INTO Test1 VALUES(12,'LLLLL')
INSERT INTO Test1 VALUES(13,'MMMMM')
INSERT INTO Test1 VALUES(14,'NNNNN')
INSERT INTO Test1 VALUES(15,'OOOOO')

자! 지금까지는 일반적인 작업이 순조롭게 진행이 되고 있는 상태임을 볼 수 있습니다.

그런데 제가 잘못해서 이 상태에서 다음과 같은 퀴리문을 이용하여 Test1 테이블을 전부 삭제 해 버렸습니다. 이 때의 시간이 2001-11-19 1:10AM 입니다.


DELETE FROM Test1

큰일 났습니다!
엄청난(?) 양의 Test1 테이블이 전부 지워져 버렸습니다!

4) 복구하기

이제 해야 할 일은 Test1 테이블을 지우기전 즉 15개의 레코드가 존재하는 상태로 복구하는 것입니다. 다음의 순서를 정확히 기억하시기 바랍니다.

1) 현재 시점의 로그를 NO_TRUNCATE 옵션을 이용하여 백업받기

다음과 같이 NO_TRUNCATE 옵션을 이용하여 현재 상태의 로그를 백업 받습니다.(실무에서는 "모두 작업을 멈추시오!" 라고 외치고 백업 받아야 합니다)


BACKUP LOG sqlworld TO DISK = 'D:\Check.bak' WITH NO_TRUNCATE

2) 전체 백업 Restore

우선 제일 먼저 백업 받은 전체 백업을 Restore해야 합니다. 단 계속해서 추가적인 Restore 작업이 수행되어야 하므로 WITH NORECOVERY 옵션을 이용해야 합니다.


RESTORE DATABASE sqlworld FROM DISK = 'D:\sqlworld.bak' WITH NORECOVERY

이제 처음 레코드 5개가 추가된 상태로는 복구가 되었습니다. 하지만 WITH NORECOVERY를 사용했으므로 아직은 접근할 수 없는 상태입니다.

3) 로그 백업 Restore

전체 백업 후에 5개의 레코드를 추가하고 백업받은 로그가 있습니다. 이것을 WITH NORECOVERY 옵션으로 계속해서 Restore 해야 합니다.


RESTORE LOG sqlworld FROM DISK = 'D:\sqlworld_log.bak' WITH NORECOVERY

이제 처음 레코드 5개를 포함해서 새로 추가된 5개의 레코드 까지는 복구가 된 셈입니다. 하지만 WITH NORECOVERY를 사용했으므로 여전히 접근할 수 없는 상태입니다

4) STOPAT을 이용한 특정 시점까지의 로그 백업 Restore

문제 발생후 백업받은 로그 안에는 새롭게 추가된 5개의 레코드에 대한 작업과 함께 테이블 전체를 지운 작업이 포함되어 있습니다. 여기서 우리는 테이블 전체를 지운 작업 바로 이전까지만 Restore를 하면 됩니다. 이때 사용되는 것이 STOPAT 이라는 옵션입니다.

이 옵션을 이용하여 다음과 같이 테이블 전체를 지웠던 2001-11-19 1:10AM 이전 까지만 Restore 하면 됩니다. 그래서 2001-11-19 01:09 까지만 Restore 하겠습니다.


RESTORE LOG sqlworld FROM DISK = 'D:\Check.bak'
WITH RECOVERY, STOPAT = '2001-11-19 01:09'

그리고 WITH RECOVERY 옵션을 사용한 이유는 Restore가 다 끝났으므로 사용자가 접근 할 수 있게 하기 위함 입니다.

이렇게 해서 우리는 완벽하게 테이블이 지워지기 바로 전까지를 복구 할 수 있었습니다.

5) 정리

위 내용을 직접 수행해서 결과를 확인해보시기 바랍니다. 그렇지 않고 실제 문제가 발생한 경우에 복구 작업을 하려고 하면 안절부절 하게되기 때문입니다. 많은 분들이 백업은 받을 줄 아는데 정작 중요한 복구는 못하는 경우가 있습니다.

물론 복구할 일이 없는데 제일 좋지만 만일의 경우에 대비해서 연습해 두는 것이 좋습니다. 그리고 백업받은 데이터는 안전하게 보관을 하고 있어야 합니다. 아무리 복구 방법을 잘 안다고 해도 백업받은 데이터가 손상이 된 상태라면 아무 의미가 없기 때문입니다.
Posted by 시스템매니아
,
sp_password null, '바꿀SA암호', 'sa'
Posted by 시스템매니아
,
Query Analyzer 를 이용한 데이터 추출 시 256 문자가 넘는 필드 값이 잘려 나오는 경우가 발생할 때
다음과 같이 옵션을 바꾸어 줌으로써 해결할 수 있습니다.

Query Analyzer 를 실행 시킨 후 도구 -> 옵션 -> 결과 탭 에서 "열 당 최대 문자 수" 값을 기본 256에서 원하는 값으로 바꿉니다.
Posted by 시스템매니아
,
관리도구 - 성능 - 카운터 추가 - Network Interface



Packets Recevied/sec

Packets Sent/sec

Packets/sec



필요로 하는 또는 참고해야할 카운터를 추가하고 확인을 누릅니다.



CPU - 작업관리자에서 편하게 보셔도 되고요.



관리도구 - 성능 - 카운터 추가 - Processor

% Processor Time 추가 하고 로그를 보실 수 가 있습니다.

Sysmon 에는 이외에도 많은 카운터들이 있습니다. System 성능 모니터링을 위한

충분한 도구가 될 수 있습니다.

Posted by 시스템매니아
,
출처 : http://www.devpia.com

< ADDUSERS >

[User]

UserName,FullName,Password,comment,HomeDriveAndPath,Profile,Script,

[Global]

GlobalGroupName,Comment,UserName,.....

[Local]

LocalGroupName,Comment,UserName,.....


ADDUSERS {/c|/d{:u}|/e} filename [/t][/s:x] [/?]

[\\computername|domainname][/p:{l|c|e|d}]



- 사용자를 백업하는 방법

예) Addusers /d:u userlist.txt

한글 사용자 부분을 추가 하기위해 /d:u 옵션을 주고 "userlist.txt"으로

백업한다는 뜻입니다.

백업한 파일을 메모장으로 살펴볼 수 있으며 기본적인 문법 규칙에 맞게

수정작업이 가능하며,백업된 자료를 복원을 할 경우 사용자가 추가한 부분에

대해서도 복원이 가능합니다.

- 사용자 복원 방법

예) Addusers /c userlist.txt /p:l /p:c

백업 할 때 작업해 둔 "userlist.txt" 파일을 가지고 복원을 할 때 사용하며

계정이 존재하지 않는 시스템에서 작업해야 하며 자신의 시스템에 작업할

경우에는 현재 존재하는 계정 때문에 복원이 제대로 이루어지지 않을 수

있습니다.


사용자 계정을 추가 할 때 하위 옵션에 대해서도 정의를 해 주어야 하며,추가

옵션 스위치로 처리할 수 있습니다.

[/p:{l|c|e|d}]과 같이 나타나며,"/p:l /p:c"과 같은 문법으로 필요한 내용을

첨가합니다.먼저 데모 장비에서 테스트한 후 작업하는 것이 좋습니다.


다음 로그온할 때 반드시 암호 변경 ( /p:l )

암호 변경 할 수 없음 ( /p:c )

암호 사용 기간 제한 없음 ( /p:e )

계정 사용 안함 ( /p:d )

< CSVDE >

일반 매개 변수

-i 가져오기 모드 사용(기본값은 내보내기)

-f 파일 이름 입력 또는 출력 파일 이름

-s 서버 이름 바인딩 대상 서버(기본값은 로그인된 도메인의 도메인 컨트롤러)

-v 자세한 정보 표시 모드 사용

-c 원본 DN 대상 DN 원본 DN을 대상 DN으로 바꿈

-j 로그 파일 위치

-t 포트 번호(기본값 = 389)

-u 유니코드 형식 사용

-? 도움말

내보내기 특정

-d RootDN LDAP 검색의 루트(기본값은 명명 컨텍스트)

-r 필터 LDAP 검색 필터(기본값은 "(objectClass=*)")

-p SearchScope 검색 범위(Base/OneLevel/Subtree)

-l 목록 LDAP 검색에서 검색될

특성 목록(쉼표 구분)

-o 목록 입력에서 생략될 특성 목록(쉼표 구분)

-g 페이지 검색 안함

-m 내보내기 작업에 SAM 논리법 사용

-n 이진 값 내보내지 않음

- 가져오기

-k : 가져오기 작업에서 '제약 조건 위반' 및 '개체가 이미 있음' 오류를

무시합니다.

- 자격 증명

자격 증명이 지정되지 않은 경우에는 CSVDE가 SSPI를 사용하여 현재 로그온된

사용자로 바인딩합니다.

-a UserDN [암호 | *] 단순 인증

-b UserName 도메인 [암호 | *] SSPI 바인딩 방법

예) 현재 도메인의 단순 가져오기

csvde -i -f INPUT.CSV

예) 현재 도메인의 단순 내보내기

csvde -f OUTPUT.CSV

예) 자격 증명을 사용하여 특정 도메인 내보내기

csvde -m -f OUTPUT.CSV

-b USERNAME DOMAINNAME *

-s SERVERNAME

-d "cn=users,DC=DOMAINNAME,DC=Microsoft,DC=Com"

-r "(objectClass=사용자)"

Posted by 시스템매니아
,
Ctrl 키

+ A : 전체 선택
+ C : 복사 하기
+ V : 붙여넣기
+ S : 저장 (편집기에서 많이 사용됩니다.)
+ P : 프린터
+ X : 잘라내기
+ Z : 되살리기
+ Y : 되살리기 취소
+ D : 삭제 하기
+ Home : 커서위치부터 동일한 줄에 있는 앞으로 모든글 선택
+ End : 커서위치부터 동일한 줄에 있는 뒤로 모든글 선택
+ → 방향키 : 한문단 앞으로 이동
+ ← 방향키 : 한문단 뒤로 이동
+ Esc : 시작버튼 누르기
+ Shift + → 방향키 : 한문단 앞으로 선택
+ Shift + ← 방향키 : 한문단 뒤로 선택
+ Shift + Esc : 작업관리자 실행


WindowKey 키

+ D : 모든창 최소화(원상복귀)
+ M : 모든창 최소화(복귀시 + Shift + M)
+ E : 윈도우탐색기
+ R : 직접실행
+ U : 유틸리티 관리자
+ F : 파일 찾기
+ TAB : 프로그램 이동
+ Ctrl + F : 컴퓨터 찾기
+ Pause Break : 시스템 등록 정보

다음은 문서 편집시 사용되는 윈도우 단축키 입니다.

커서가 있는 위치에서 Shift + End : 커서위치부터 끝까지 선택 하기
커서가 있는 위치에서 Shift + Home : 커서위치부터 앞까지 선택 하기
Shift + Insert : Ctrl + V 와 같은 기능
Shift + Home : 뒤로 한문단 선택하기
Shift + End : 앞으로 한문단 선택하기
Shift + Backspace : 뒤로 한문단 지우기
Shift + Delete : 앞으로 한문단 지우기
Shift + PageUp : 커서위치 부터 위로 50줄 선택
Shift + PageDown : 커서위치 부터 아래로 50줄 선택
Shift + Ctrl + PageUp : 커서위치 부터 위로 모든 글 선택
Shift + Ctrl + PageDown : 커서위치 부터 아래로 모든 글 선택
Shift + Space : 한영전환
Shift + Ctrl + → : 앞으로 한글자씩 선택 하기
Shift + Ctrl + ← : 뒤로 한글자씩 선택 하기


기타 단축키

PrtScnSysRq : 윈도우 전체 화면을 클립보드에 복사
Alt + PrtScnSysRq + 활성화 되있는 프로그램 화면을 클립보드에 복사
Alt + F4 : 프로그램 종료 (윈도우 종료)
Posted by 시스템매니아
,
출처 : http://www.devpia.com

[상황]
1:00 FULL BACKUP완료.
2:00 INSERT TABLE1 VALUES("데이터A")
3:00 INSERT TABLE1 VALUES("데이터B")
4:00 DELETE TABLE1 -- 실수로 데이터를 지움


위의 상황에서 데이터B까지 전부복구하기를 원한다. 하지만, 데이터A와 데이터B는 백업을 해놓지 않아
1:00 FULL BACKUP파일을 복구하여도 데이터A,데이터B는 복구할 수 없다.
그렇다면, 어떻게 데이터를 살릴수 있는 가 ?
1. 로그백업을 수행한다. -- 로그파일에는 4:00까지 모든 작업들이 기록되어 있다.

2. 로그백업한 것을 stopat옵션을 사용하여 특정한 시간을 기준으로 복구한다.
-- 왜냐하면 로그백업한 내용에는 insert작업도 있지만, delete작업도 있다. 따라서, 3:00까지만
데이터를 복구해야만 데이터A,데이터B가 복구된다.


-- stopat을 사용한 T - SQL 참조 --

restore database testdb from testdbback
with norecovery -- 회복프로세서를 시작하지 않는다.
restore log testdb from testdbback
with recovery, stopat ="jan 01,2000 3:00 am"
-- 3:00까지의 데이터를 복구하고,with recovery로 회복프로세서를 시작한다.


-- 주의 사항 --
모든 백업의 시작은 fullbackup이다. 한 번의 fullbackup도 없다면, 로그백업을 하더라도 복구할 수가 없
다. 그리고, 로그가 생성되지 않는 옵션을 설정해 놓았다면, 로그가 없으므로 로그백업은 무의미하다.

Posted by 시스템매니아
,
출처 : http://www.devpia.com
아래의 SQL을 그대로 복사해서 쿼리 어널라이저에서 바로 실행할수 있도록 만들었습니다.
SQL을 잘 만들면 프로그램이 깔끔해집니다.
왜 이렇게 나오는지 곰곰히 생각은 여러분이 해봐야 겠죠.
이번 강좌는 사실 이론보다는 실무위주의 업무로 작성했습니다.
데이터베이스도 제가 만든것이 아닌 MSSQL에 기본적으로 들어 있는 Pubs데이터
베이스를 이용을 했구요.

함수에대한 자세한 설명은 MSDN이나 다른사이트 또는 책을 참조하세요.

-- DB를 선택해 내림차순으로 authors테이블의 데이터를 추출
USE pubs
SELECT *
FROM authors
ORDER BY au_lname ASC, au_fname ASC

-- 테이블명, 소유자, 타입, 만든날짜등 테이블에 관한 모든정보를 가져오는 프로시져
EXEC sp_help "테이블명"
EXEC sp_columns "테이블명"

-- 컬럼 제목바꾸기
SELECT title_id AS Title_No, pub_id AS 출판사번호, price, title FROM titles

-- TSQL 기초
-- 변수의 선언과 값의 설정 DECLARE, SET, SELECT
DECLARE ";@º?嗤?quot; "자료형", ";@º?嗤?quot; "자료형"
SET ";@º?嗤?quot; = 값
SELECT ";@º??quot;

DECLARE @id int, @name varchar(10)
SET @id = 1
SET @name = '조준철'
SELECT @id, @name

-- 사용자변수와 시스템 함수(시스템 변수/전역변수)
-- SQLServer는 정의된 변수만을 전역으로 사용할수 있다.
@@error
@@identity
@@lock_timeout
@@nestlevel
@@rowcount
@@trancount

-- decimal, numeric 숫자유형(차이없음)
-- decimal(precision, scale) 예를들어 (10, 5)의 경우 전체 10자리 숫자중에서
-- 소수점 이하 5자리를 사용할수 있는 의미
decimal[(p, [s])] precision의 범위, 1~38 디폴트 : 18, scale의 범위 1~precision, 디
폴트 : 0

-- SELECT에서의 자료형 바꾸기
--1)
SELECT title_id AS 타이틀넘버
, pub_id AS 출판사번호
, price
, CONVERT(char(30), title) AS 줄인제목
FROM titles
--2)
SELECT title_id AS 타이틀넘버
, pub_id AS 출판사번호
, price
, SUBSTRING(title, 1, 30) AS 줄인제목
FROM titles

-- CONVERT() / CAST()
-- CONVERT()는 자료형을 바꾸는 함수로 다양한용도로 사용한다. 이기능은 SQLServer의
고유
-- 기능이기 때문에 ANSI와 호환되지않는다.
CONVERT (datatype[(length)], expression[, style])
-- style은 날짜함수에서 사용한다.

SELECT CONVERT(int, '32.2')
SELECT CONVERT(int, '32')
SELECT CONVERT(varchar(5), 32.2)
SELECT CONVERT(float, 32)

-- 숫자에 대한 산술적 연산함수(자주 쓰는것만...)
CEILING(numeric_expr) -- 주어진값보다 크거나 같은, 가장작은 정수
FLOOR(numeric_expr) -- 주어진값보다 작거나 같은, 가장큰 정수
RAND(seed) --램덤수
ROUND(numeric_expr, length) --반올림

SELECT title_id, price, FLOOR(price) AS Floor, CEILING(price) AS ceiling, ROUND
(price, )
AS Round FROM titles

-- 문자에 대한 함수(자주 쓰는것만...)
+
CHARINDEX('pattern', expression)
LEFT(character_expression, integer_expression)
LEN(string_expression)
LOWER(char_expression)
LTRIM(char_expression)
PATINDEX('%pattern%', expression)
REPLACE(string_expression, string_expression, string_expression)
REPLICATE(char_expression, integer_expression)
RIGHT(char_expression, integer_expression)
RTRIM(char_expression)
SPACE(integer_expression)
STUFF(char_expression, start, length, char_expression)
SUBSTRING(_expression, start, length)
UPPER(char_expression)

-- 날짜에 대한 함수
SELECT CONVERT(varchar(30), GETDATE(), 9)
SELECT CONVERT(varchar(30), GETDATE(), 2)
SELECT CONVERT(varchar(30), GETDATE(), 102)

-- 조건에 맞는 행 가져오기
SELECT title_id, qty FROM sales WHERE qty >= 20
SELECT title_id, qty FROM sales WHERE title_id = 'bu1032'

-- 비교문 (=, >, <, >=, <=, <>, !=, !>, !<)
-- 정렬
SELECT title_id, qty FROM sales ORDER BY qty ASC
SELECT title_id, qty FROM sales ORDER BY qty DESC

-- 몇 개만 가져오기
SELECT TOP 5 title_id, qty FROM sales

-- 범위
SELECT title_id, qty FROM sales WHERE qty EETWEEN 10 AND 20
SELECT title_id, qty FROM sales WHERE qty >= 10 AND qty <= 20

-- 목록
SELECT title_id, qty FROM sales WHERE title_id IN ('BU1032', 'BU1111', 'MC3021')
SELECT title_id, qty FROM sales WHERE title_id = 'BU1032' OR 'BU1111' OR 'MC3021'

-- 문자열 / LIKE와 패턴 매칭
/*
_(underscore) : 어떤 것이든 한문자가 와야한다.
% : 아무것도 없는 경우를 포함하여 어떤것이든 상관없다.
[] : []안에 있는 글자들
[^] : ^다음에 있는 글자를 제외한 다른것이 와야한다.
book_
book%
%book%
[st]ing
[b-f]ing
M[^c]%
자세한 것은 온라인 설명서 참조
*/
SELECT title_id, title FROM titles WHERE title LIKE '%computer%'
SELECT title_id, title FROM titles WHERE title LIKE 'computer%'
SELECT title_id, title FROM titles WHERE title LIKE 'computer_'

-- PATINDEX는 해당 패턴이 다음 문자열에 있는지 알려준다.
SELECT PATINDEX('%Mi%', 'James Mike')

-- 중복된 행 제거 - DISTINCT
SELECT DISTINCT title_id FROM sales ORDER BY title_id

-- 요약 정보 처리
/*
AVG ([ALL|DISTINCT] expression) 표현식의 전체나 각각의 평균값
COUNT ([ALL|DISTINCT] expression) 표현식의 전체나 각각의 개수
COUNT (*) 선택된 모든행의 개수 주의 NULL값을 계산되지 않는다.
MAX (expression) 표현식에서 가장 큰값
MIN (expression) 표현식에서 가장 작은 값
SUM ([ALL|DISTINCT] expression) 수치 표현식에서 전체나 각각의 합계
*/
SELECT MAX(qty), MIN(qty) FROM sales
SELECT COUNT(*) FROM sales
SELECT COUNT(title_id) FROM sales

-- ISNULL NULL 값을 다른값으로 바꾸기
-- ISNULL (표현식, 널일때의 값)
SELECT AVG(ISNULL(price, 0)) FROM sales

-- GROUP BY / HAVING
SELECT title_id, sum(qty) AS SUMqty FROM sales GROUP BY title_id HAVING SUM(qty)
>= 30
SELECT title_id, sum(qty) AS SUMqty FROM sales GROUP BY ALL title_id

-- COMPUTE / COMPUTE BY
-- 그룹별로 상세 내역과 그룹 합계를 한꺼번에 출력하는 함수
SELECT type, title_id, price FROM titles ORDER BY type COMPUTE avg(price) BY type

-- ROLLUP과 CUBE (표현식은 10개를 넘을수 없다. GROUP BY ALL을 사용할수 없다.)
-- 각 평균과 각 type별 그룹 평균
SELECT type, pub_id, AVG(price)
FROM titles GROUP BY type, pub_id WITH ROLLUP

-- 각 평균과 각 type별 그룹 평균
SELECT type, pub_id, AVG(price)
FROM titles GROUP BY type, pub_id WITH CUBE

-- JOIN (조인)
-- INNER JOIN (두 값을 비교해 일치하는 데이터만을 가져온다.)
SELECT title_ price, pub_name FROM titles, publishers
WHERE titles.pub_id = publishers.pub_id

SELECT title_id price, pub_name FROM titles INNER JOIN publishers
ON titles.pub_id = publishers.pub_id

-- OUTER JOIN (어느 한쪽의 데이터를 가져온다.)
SELECT title_id price, pub_name FROM titles LEFT OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id

-- 흐름제어문
/*
BEGIN...END 명령문의 시작 / 끝을 블록화한다.
IF ELSE 조건에 맞는 처리를 한다.
WHILE 조건에 맞는동안 반복한다.
BREAK 가장안쪽의 WHILE반복을 무조건 빠져나간다.
CONTINUE 가장안쪽의 WHILE 반복을 무조건 다시 시작한다.
RETURN 무조건 끝낸다.
GOTO 라벨 무조건 라벨부분으로 건너뛴다.
WAITFOR 지정된만큼 지연을 한다.
CASE 주어진 조건에 따라 다른 처리를 한다.
/**/ 주석처리
-- 주석처리
DECLARE 변수를 정의 한다.
SET(SELECT) 변수를 초기화한다.
EXECUTE 사용자정의 함수, 시스템 프로시저, 사용자정의 저장프로시저, 확장프로시저를
수행한다.
PRINT 주어진 메시지를 출력한다.
RAISERROR 주어진 메시지나 오류번호를 출력한다.
FORMATMESSAGE 정의된 번호의 메시지에서 오류메시지를 만든다.
*/

Posted by 시스템매니아
,
출처 : http://korea.internet.com

Microsoft SQL Server 2000 설치 작업 도중 실패하여 이후 프로그램 제거 옵션을 사용하지 못할때 해결 하는 방법에 대해서 알아보자. 여기에서 제안하는 방법은 잘못된 설치 환경을 깨끗하게 제거 하기 위해 같은 환경과 방법으로 설치를 한다. 이를 통해 제거 옵션을 사용해서 제거 하는 방법이고 이를 가능하게 하기 위해 안정된 재 설치 시점으로 되돌리는 방법에 대해서 이야기 한다.

Microsoft SQL Server 2000을 제거하기 전에

기본 데이터베이스 중 하나에 속할 수 있는 변경 사항과 함께 현재 상태로 저장하고자 하는 데이터베이스가 있을 수 있다. 그럴 경우 본 문서의 단계를 사용하기 전에 MSSQL 디렉터리를 삭제해야 하므로 MSSQL 디렉터리 이외의 디렉터리에 저장해야 하는 데이터의 양호한 백업이나 모든 데이터와 로그 파일의 복사본이 있는지 확인한다.

이러한 파일에는 Microsoft SQL Server 2000이 기본적으로 설치하는 데이터베이스 파일이 포함된다.

Distmdl.*
Master.*
Mastlog.*
Model.*
Modellog.*
Msdbdata.*
Msdblog.*
Northwnd.*(옵션 설치)
Pubs.*
Pubs_log.*
Tempdb.*
Templog.*
또한 다음과 같이 하는 것이 좋다.

Microsoft SQL Server 2000이 클러스터된 경우 다른 클러스터 리소스가 Microsoft SQL Server 2000에 종속되어 있는지 확인한다.
활성 연결이 있으면 제거 프로세스가 성공적으로 완료되지 못할 수 있으므로 Microsoft SQL Server 2000을 중지한다.
Microsoft SQL Server 2000 클라이언트 또는 관리 도구가 다른 노드에서 열려 있지 않도록 한다.
Microsoft SQL Server 2000 서비스 계정이나 동등한 권한을 가진 계정(로컬 관리자 계정의 구성원인 계정)으로 서버에 로그온한다. SQL Server가 클러스터된 경우 사용하는 계정은 모든 클러스터 노드에 있는 로컬 관리자의 구성원이어야 한다.
제거 하려면 다음과 같이 진행한다.

다음 목록에서 사용자의 환경에 따라 옵션을 한 가지 이상 사용할 수 있다. 아래 순서대로 옵션을 실행한다.

2단계와 3단계는 Microsoft SQL Server 2000의 로컬 설치에 적용할 수 있으며 Microsoft SQL Server 2000의 클러스터된 설치에는 적용할 수 없다.

CD의 Microsoft SQL Server 2000 설치 프로그램을 사용하고 제거를 누른다.
제어판에서 프로그램 추가/제거 애플릿을 연다.
regedit을 실행한 다음 다음 레지스트리 키를 찾는다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
제거 키에서 제거하려는 Microsoft SQL Server 2000의 인스턴스에 해당하는 제품 키를 찾는다.
작업 표시줄에서 시작을 누른 다음 실행을 누른다.
실행 대화 상자에 다음 명령을 복사하여 붙여넣거나 입력한다.
C:\WINNT\IsUninst.exe -f"C:\Program Files\Microsoft SQL Server\MSSQL$Server1\Uninst.isu" -c"C:\Program Files\Microsoft SQL Server\MSSQL$Server1\sqlsun.dll" -msql.mif i=I1
앞의 단계가 작동하지 않는 경우 마지막 수단으로 다음 단계를 사용하여 Microsoft SQL Server 2000을 수동으로 제거할 수 있다.
참고로 당장 SQL Server 2000을 제거하는 것은 아니다. 이 단계는 시스템을 성공적으로 다시 설치할 수 있는 상태로 만든 다음 Microsoft SQL Server 2000 인스턴스를 적절하게 제거하는 것이다.
설치용 Data 폴더를 찾고 데이터를 저장해야 할 경우 이름을 바꾼다. 또는 Data 폴더를 삭제한다. 마이크로소프트는 MDF와 LDF 형식으로 데이터베이스 백업을 사용할 수 있게하기 위해, 사용자들이 데이터 폴더를 삭제하는 것을 권장하지 않는다.
%drive% :\Program Files\Microsoft SQL Server\MSSQL\Binn 폴더를 찾은 다음 삭제한다.
다음 레지스트리 키를 찾은 다음 삭제한다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
다음 레지스트리 키를 찾은 다음 삭제한다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerADHelper
앞의 레지스트리 키 세 개는 Microsoft SQL Server 2000의 기본 인스턴스에 대응한다. instance_name은 특정 인스턴스에 주어진 이름이기 때문에 명명된 인스턴스는 $instance_name과 함께 d단계에 표시된 것과 비슷하게 나타난다. 제거하려는 인스턴스의 올바른 키를 찾아서 해당 키를 선택하고 삭제한다. 주의해야 할점은 다른 서비스에서 MSSEARCH를 사용하는지 않는 경우 다음 서비스만 삭제한다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSFTPSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSCNTRS
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSEARCH
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSGATHERVER
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSGTHRSVC
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSINDEX
만약 SQL 서버 인스턴스가 클러스터되어 있으면, 클러스터 관리자에 남아 있을 수 있는 이 SQL 서버 인스턴스의 클러스터 리소스를 제거한다. 반드시 SQL 서버의 리소스만 제거해야 한다.
Microsoft SQL Server 2000을 다시 설치하고 같은 이름, IP 주소 등을 사용한다.
설치 프로그램을 실행하고 정상적인 제거를 수행하여 설치 실패로 인해 남아 있을 수 있는 구성 문제나 오류를 해결한다.
때로는 폴더 %drive%:"\Program Files\Microsoft SQL Server\80이 삭제되지 않을 수 있으며 이 때는 수동으로 삭제해야 한다.
SQL Server 2000을 제거하면 다음과 같은 오류 메시지가 나타날 수 있다.
설치 시스템에 이전 프로그램 설치 과정에서 생긴 보류된 파일 작업이 있다. 설치를 실행하기 전에 컴퓨터를 다시 시작해야 한다.
오류 메시지가 나타나면 서버를 다시 시작한 다음 설치를 다시 해본다. 서버를 다시 시작한 후에 오류 메시지가 다시 나타나면 삭제하려는 파일이 읽기 전용일 가능성이 있다. 파일이 읽기 전용인지 확인하려면 다음 레지스트리 키를 찾는다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
Posted by 시스템매니아
,
원인 : SQL Server는 내부적으로 Windows 컴퓨터 이름을 사용하는 데 Windows 이름이바뀌더라도 SQL Server가 참조하는 이름 정보를 변경하지 않기 때문입니다.

해결책 : 이 문제를 해결하기 위하여 다음의 두 방법 중에서 선택할 수 있습니다.

첫째, Windows 컴퓨터 이름을 이전 상태로 바꾸는 것입니다.
둘째, SQL Server 원본 CD에서 SQL Server Setup을 수행하는 것입니다.
Setup을 수행하면 실제 설치 작업을 하는 것이 아니라 SQL Server가 참조하는 컴퓨터 이름 정보만 수정하므로 시간이 오래 걸리지 않습니다. 이와 더불어 수행해야 할 작업은 SQL Server가 내부적으로 저장하고 참조하는 SQL Server 이름 정보의 갱신입니다. 이를 수행하지 않을 경우 분산 질의나 Replication 과 같이 로컬 서버 이름을 참조하는 작업을 진행할 수 없습니다. SQL Server의 내부 서버 이름을 변경하기 위하여 다음의 절차를 따릅니다.

1. Query Analyzer에서 다음을 수행합니다.

sp_dropserver 'old_servername'
go
sp_addserver 'new_servername', local
go

2. Service Manager나 Enterprise Manager에서 SQL Server를 중지합니다.
3. SQL Server를 시작합니다.
4. Query Analyzer에서 Server 이름이 갱신되었는지 확인하기 위하여 다음을 수행합니다.

Select @@SERVERNAME
Posted by 시스템매니아
,
Enterprise manager로 사용시
1. 같은 이름의 db를 만든다 (텅빈 db)
2. 빈 db를 그냥 풀 백업 한다.
3. 원본서버에서 가져온 백업본으로 리스토어 한다.
4. 리스토어시 옵션의 강제로 덮어쓰기 하시면 됩니다.
SQL Query Analyzer
쿼리문은 다음과 같습니다.
restore database 데이터베이스 이름 from disk = '백업 파일 경로'
Posted by 시스템매니아
,
mdf, ldf파일을 복사하려하는데 ‘원본이나 대상 파일이 사용중인 것 같습니다’라
는 에러메시지가 뜨면서 복사가 안되는 경우 SQL서비스를 중지하고 복사작업을 하
면되지만 서비스중인 SQL을 중지하기가 난감한 경우엔 다음과 같은 방법으로 데이
터베이스를 분리한뒤 다시 붙이는 식으로 작업을 하면됩니다.

1. 쿼리분석기를 이용하는 방법으로 알려드리겠습니다.
sp_detach_db를 이용해서 Db를 분리해낸 뒤 복사하고
다시 sp_attach_db를 이용해서 DB를 붙이시면 됩니다.
query문
sp_detach_db ‘DB명’
go
쿼리문 실행하고 파일복사후
sp_attach_db ‘DB명’ , ‘ c:\...\DB명_Data.mdf ’ , ‘ c:\...\DB명_Log.ldf ’
go
이렇게 하시면 됩니다.

Posted by 시스템매니아
,