SELECT A.TABLE_NAME, B.COLUMN_NAME, A.CONSTRAINT_NAME, A.CONSTRAINT_TYPE, A.SEARCH_CONDITION
FROM USER_CONSTRAINTS A, USER_CONS_COLUMNS B
WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME
AND A.TABLE_NAME = '대문자 테이블명'
AND A.CONSTRAINT_TYPE = 'P'
신고


데이터베이스 시작하기

$sqlplus /nolog
SQL> connect / as sysdba
SQL> startup

데이터베이스 종료하기

$sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown immediate
SQL> exit

리스너 시작
$lsnrctl start

리스너 종료
$lsnrctl stop

sqlplus 시작하기
$isqlplusctl start

em 시작하기
$emctl start dbconsole
신고


오라클에서 paging을 처리하기 위해서는 오라클에서 제공되는 rownum을 사용하게 됩니다.

하지만 rownum을 잘못알고 사용을 하게 되면 저처럼 삽질을 계속 하게 된다는 ^^;;

예를들면...

  SELECT *
  FROM (
            select board_seq, board_name, insert_date
            from t_board
            order by insert_date desc
            )
   WHERE ROWNUM >= 1 AND ROWNUM <= 10

  이렇게 쿼리문을 날리면 데이터가 나옵니다.

  하지만 ..

  SELECT *
  FROM (
            select board_seq, board_name, insert_date
            from t_board
            order by insert_date desc
            )
   WHERE ROWNUM >= 11 AND ROWNUM <= 20

   이렇게 쿼리문을 날렸을때 그냥 보기에는 나올것 같습니다. 하지만 아무런 데이터가
   나오지를 않습니다.^^; 아주 황당합니다.

그래서 많이쓰는 방법으로... 첫번째..

  SELECT *
  FROM (
            select rownum as rnum, board_seq, board_name, insert_date
            from t_board
            order by insert_date desc
            )
   WHERE rnum>= 11 AND rnum <= 20

  서브쿼리에서 rownum을 구해 동일한 방법으로 where 조건을 주면 아주 잘 나옵니다.

또다른 방법.. 두번째..

  row_number() over(정렬을 위한 order by) 를 사용하면 됩니다.

  SELECT *
  FROM (
            select row_number() over(order by insert_date desc) as rnum, board_seq,
                     board_name, insert_date
            from t_board
            )
   WHERE rnum>= 11 AND rnum <= 20

첫번째 방법과 두번째 방법을 했을경우 결과는 동일합니다.

차이점이 있다면 두번째 방법에서 row_nuber() over()를 이용해서 over()안에 있는
order by 순으로 rownum을 새롭게 구하는것입니다.

* 참고 : row_number()는 오라클 8.1.6.0.0 이상에서 사용이 가능합니다.
신고


oracle 계정으로 접속해서 오라클이 설치된 bin 디렉토리로 이동후~ exp 명령을 사용합니다.

- 전체 데이터베이트 export 방법
[oracle@localhost ~]$ ./exp userid=system/manager file='/home/oracle/full.dmp' full=y

- user별 export 방법
[oracle@localhost ~]$ ./exp userid=scott/tiger file='/home/oracle/scott.dmp'

신고


오라클10g에서 암호화 이용할 때. DBMS_CRYPTO 에 대한 권한부여

Grant excute on DBMS_CRYPTO to libra;

 

암호화모듈

CREATE OR REPLACE FUNCTION pv_encrypt(v_in_string VARCHAR2)

RETURN RAW IS

    input_raw RAW(1024);

    key_raw RAW(16) := UTL_RAW.CAST_TO_RAW('abcdefghijklmnop');

    v_out_raw RAW(1024);

    AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128

                                               + DBMS_CRYPTO.CHAIN_CBC

                                                                         + DBMS_CRYPTO.PAD_PKCS5;

BEGIN

    input_raw := UTL_I18N.STRING_TO_RAW(v_in_string, 'AL32UTF8');

    v_out_raw := DBMS_CRYPTO.ENCRYPT(

        src => input_raw,

             typ => AES_CBC_PKCS5,

        key => key_raw);

 

    RETURN v_out_raw;

 

END pv_encrypt;

/

 

CREATE OR REPLACE FUNCTION pv_decrypt(v_in_raw RAW)

RETURN VARCHAR2 IS

    key_raw RAW(16) := UTL_RAW.CAST_TO_RAW('abcdefghijklmnop');

    output_raw RAW(1024);

    v_out_string VARCHAR2(1024);

    AES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES128

                  + DBMS_CRYPTO.CHAIN_CBC

                             + DBMS_CRYPTO.PAD_PKCS5;

BEGIN

    output_raw := DBMS_CRYPTO.DECRYPT(

        src => v_in_raw,

        typ => AES_CBC_PKCS5,

        key => key_raw);

 

    v_out_string := UTL_I18N.RAW_TO_CHAR(output_raw, 'AL32UTF8');

    RETURN v_out_string;

 

END pv_decrypt;
신고


* root 
계정으로 수행한다.

1. Host file 수정하기

- [root@linux ~] vi /etc/hosts

             192.168.1.4            linux.cts.co.kr       linux

 

2. 커널 파라미터 설정하기

- [root@linux ~] vi /etc/sysctl.conf

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144

- [root@linux ~] /sbin/sysctl –p (변경된 커널 반영하기)

 

3. 필요한 패키지 설치하기

- [root@linux ~] sudo yum install setarch-1*

- [root@linux ~] sudo yum install compat-libstdc++-33-3*

- [root@linux ~] sudo yum install make-3*

- [root@linux ~] sudo yum install glibc-2*

- [root@linux ~] sudo yum install openmotif-2*

- [root@linux ~] sudo yum install compat-db-4*

- [root@linux ~] sudo yum install libaio-0*

- [root@linux ~] sudo yum install gcc-3*

- [root@linux ~] sudo yum install compat-gcc-32-3*

- [root@linux ~] sudo yum install compat-gcc-32-c++-3*

- [root@linux ~] sudo yum install rsh-*

- [root@linux ~] sudo yum install libXp-* (Fedora Core 6 필수)

 

4. 사용자 및 그룹을 추가한다.

- [root@linux ~] groupadd oinstall

- [root@linux ~] groupadd dba

- [root@linux ~] groupadd oper

- [root@linux ~] useradd –g oinstall –G dba oracle (디폴트로 /home/oracle 만들어짐)

- [root@linux ~] passwd oracle (패스워드 변경)

 

5. RHEL4 관련 운영체제 버전 눈속임하기

- [root@linux ~] cp /etc/redhat-release /etc/redhat-release.org

- [root@linux ~] vi /etc/redhat-release

             (기존 문장 지우고 다음으로 수정)

             Red Hat Enterprise Linux AS release 3(Taroon)

 

* oracle 계정으로 작업

6. oracle 계정의 환경설정 파일을 수정한다.

- [oracle@linux ~] vi .bashrc

             export PATH=/usr/sbin:$PATH

export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=orcl

- [oracle@linux ~] . .bashrc (변경된 환경설정을 적용하기)

 

7. X-window System oracle 계정으로 로그인한다.

 

8. cd-rom에 오라클 인스톨 CD를 넣는다.

 

9. 터미널을 수행한다.

- [oracle@linux ~] /media/cdrom/runInstaller (runInstaller 프로그램 수행시키기)

10. 케릭터셋등의 설정을 위해서 Advanced install을 선택한다.

11. 다음화면에서 EnterpriseEdition을 선택하고 “Product Languages…”를 선택하여 원하는 언어를 선택한다.

12. 다음은 설정에 대해서 체크를 한다.

 

13. 진행하다 보면 데이터베이스 설정하는 부분이 있는데 이곳의 Database Character Set Unicode standard UTF-8 AL32UTF8을 선택하면 유니코드형태로 데이터베이스를 사용할 수 있게 된다.
신고


◈ 리스너(Listener)란?
 
 - 오라클 리스너는 네트워크를 이용하여 클라이언트에서 오라클 서버로 연결하기 위한 
   오라클 네트워크 관리자 입니다.
 - 오라클에서 네트워크를 통한 연결은 모두 리스너가 담당하며 리스너와 연결되기
   위해서는 클라이언트에 오라클 NET8이 설치되어 있고 이를 통해 오라클 서비스명이라는
   것을 만들어 접속해야 합니다.
 - 오라클 서버에서 리스너를 시작시켜줘야 클라이언트들이 접속할 수 있습니다.
 - lsnrctl명령어로 리스너를 관리 할 수 있습니다.

-- 리스너 시작하기
C:>lsnrctl
LSNRCTL for 32-bit Windows: Version 8.1.6.0.0 - Production on 01-MAY-2002 23:34:57
(c) Copyright 1998, 1999, Oracle Corporation.  All rights reserved.
LSNRCTL에 오신 것을 환영합니다. 정보를 보시려면 "help" 를 입력하십시오.
 -- start를 입력하면 리스너가 시작됩니다.
LSNRCTL>start

-- 리스너 관련 명령어들
시작시 : LSNRCTL> start
멈출 때 : LSNRCTL> stop
재시작시 : LSNRCTL> reload
서비스 상태보기 : LSNRCTL> status
명령어 보기 : LSNRCTL> help

오라클 서버/클라이언트간의 네트워크 설정을 하기위해서는 서버에서는 listener.ora파일을 그리고
클라이언트에서는 tnsnames.ora파일을 설정해 주어야 합니다.
 
◈ listener.ora
 - 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신을 환경을 설정하는
   파일입니다.
 - 오라클 서버에 존재하며, 오라클 클라이언트에서 서버로 접속할 때 필요한 프로토콜 및
   포트정보등을 설정하는 파일 입니다.
 - 프로토콜은 주로 TCP/IP가 많이 사용됩니다.
 
◈ tnsnames.ora

 - 오라클 Client측에서 오라클 서버로 접속할때 필요한 프로토콜 및 포트번호, 서버주소,
   인스턴스등을 설정해주는  파일로서 클라이언트에 위치 합니다.
 
*  참고
 - listener.ora와 tnsnames.ora파일의 위치는 ORACLE_HOME/network/ADMIN/에 존재
   합니다.
 - linstener.ora와 tnsnames.ora는 둘다 오라클 설치시 Net8 configuration 작업을 해주면
   생성이 됩니다.


오라클클라이언트(Oracle9i)에서 접속하기
 
윈도우 시작메뉴에서

프로그램 -> Oracle - OracleHome92 -> Configuration and Migration Tools -> Net Configuration Assistant
를 실행 시킵니다.

1. Net Configuration Assistant 시작 화면

Net Configuration Assistant를 시작하면 나오는 화면에서 "로컬네트 서비스 이름 구성"을 선택하고서 "다음" 버튼을 클릭 합니다.

2. 네트워크 서비스 이름 관리 화면

"추가" 버튼을 클릭해서 새로운 서비스를 생성 합니다.
"수정"은 기존의 서비스를 수정하고, "삭제"를 누르면 서비스가 삭제 됩니다.

3. 데이터베이스 버전 지정

액세스할 오라클 데이터베이스 또는 서비스의 버전을 지정 합니다. 오라클 서버의 버전을 선택해야 합니다.

4. 서비스 이름 지정

Oracle9i 데이터베이스 또는 서비스에 서비스 이름을 입력해야 합니다.
Oracle9i 데이터베이스의 서비스 이름은 일반적으로 전역 데이터베이스명입니다
오라클 서버에 init<<SID>>.ora파일에 지정되어 있는 SERVICE_NAMES 파라미터의 값을 입력하면 됩니다.

* 참고 : 일반적으로 오라클을 설치할 때 db_name, instance_name, service_names을 같게 합니다. 오라클 서버의 init<<SID>>.ora파일을 열어서 확인해 보시기 바랍니다.

5. 프로토콜 선택화면

네트워크상에서 데이터베이스와 통신할 때는 네트워크 프로토콜이 사용됩니다.
액세스할 데이터베이스에 사용되는 프로토콜을 선택 합니다. .

보통 TCP/IP를 많이 사용 합니다. "TCP"를 선택하고 다음 으로 진행 합니다.

6. TCP/IP 프로토콜 입력 화면

오라클 서버의 IP주소를 입력 하고, 서버의 listener.ora파일에 지정한 포트번호를 입력합니다.
호스트 이름은 오라클 서버의 listener.ora파일에 지정한 HOST명과 일치해야 합니다.

7. 네트워크 접속 테스트

오라클 서버와의 네트워크 접속을 테스트 할 것 인지 선택 합니다.
"예"를 선택하고 "다음"으로 진행 합니다.

8. 네트워크 접속 테스트 표시내용

오라클 서버와의 접속에서 성공했는지 상세내용을 보여줍니다.

- 여기서 에러가 발생할 경우 로그인 변경을 클릭해서 오라클 서버에 존재하는 유저로
테스트를 한번더 해 보세요
- 그래도 에러가 발생하면 오라클 서버의 HOST, PORT, SID가 이전 단계에서 입력한
값들과 일치 하는지 확인해 보세요

9. 테스트 서비스 이름 지정

네트워크 접속 테스트 까지 에러가 발생하지 않으면 앞으로 오라클 서버에 접속할 때 사용하게될
서비스 예명을 입력 합니다.
아래와 같이 TestDB로 입력할 경우 오라클 서버에 접속하기 위해서는
SQLPLUS scott/tiger@TestDB
이렇게 비밀번호 뒤에 @기호와 이번단계에서 입력한 서비스명을 입력하면 됩니다.

10. 다른 네트워크 서비스 구성

다른 네트워크 서비스 관리를 계속 할 것인지 확인 하는화면이 나옵니다.
"아니오"를 선택하고 "다음"으로 진행 합니다.

11. 네트워크 서비스 구성 완료

네트워크 서비스 생성이 성공적으로 이루어 졌습니다.
"다음" 버튼을 누르고 "완료" 버튼을 클릭해서 창을 닫습니다.

SQLPLUS를 실행 시켜서 오라클 서버에 접속해 보세요.

C:>SQLPLUS scott/tiger@TestDB

접속시 에러가 발생할 경우에는 다시 한번 Net8 Configuration Asistant를 실행시켜서
설정 사항들을 확인해 보세요

Net8 Configuration Asistant설정 완료후 tnsnames.ora파일을 열어 봅니다. 아래와 같은 TESTDB라는 서비스가 새로 생성된 것을 알 수 있습니다. 위의 과정과 같이 Net8 Configuration Assistant을 실행해서 서비스를 생성 할 수도 있고, 아니면 직접 tnsnames.ora파일을 에디터로 편집해서도 생성 할 수 있습니다.

TESTDB = -->SQLPLUS에 접속 할 때 사용되는 서비스명 ex)SQLPLUS scott/tiger@TESTDB
(DESCRIPTION =
(ADDRESS_LIST = -->HOST : 오라클 서버의 IP 주소
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.175.39.30)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle) --> 오라클 서버에 SERVICE_NAME
)
)

 
신고


-- Oracle 10g 에서 dmp 파일 import 명령어


 Oracle 로 접속후..

 dmp파일이 위치한 디렉토리로 이동

 [oracle@localhost qkrgns208]$ imp

 그 이후에는 설명을 잘 보고 Yes/No

---------------------------------------------------------
imp userid=id/password file=test.dmp fromuser=id touser=id
신고

티스토리 툴바