CREATE TABLE A1_Prof( PID char(4) PRIMARY KEY, PName char(10) not null, PDept char(15) ); CREATE TABLE A1_Student( ID char(9) PRIMARY KEY, Name char(10) not null, Dept char(15) not null, Grade number(5) not null, PID char(4) REFERENCES A1_Prof(PID) ); CREATE TABLE A1_Curriculum( SubjectID char(10) PRIMARY KEY, SubjectName char(20) not null ); CREATE TABLE A1_Score( ID char(9), SubjectID char(10), Score number(5) Default 0 not null, PRIMARY KEY (ID, SubjectID), FOREIGN KEY (ID) REFERENCES A1_Student(ID), FOREIGN KEY (SubjectID) REFERENCES A1_Curriculum(SubjectID) ); CREATE TABLE A1_Customer_Info( CID char(6) PRIMARY KEY, Name char(10) not null, Address char(20) , Tel char(15) , Bday date not null, SID char(14)not null, Job char(10) , Sex char(1) not null, Married number(1) ); CREATE TABLE A1_Customer_OnlineInfo( CID char(6) , LID char(20) not null, LPW char(15) not null, Email char(20) , Jday date not null, PRIMARY KEY (CID), FOREIGN KEY (CID) REFERENCES A1_Customer_Info(CID) ); CREATE TABLE A1_Product( PID int PRIMARY KEY, Name char(15) not null, Cor char(20) not null, UnitPrice int not null, Holding int not null, Photo char(20) ); CREATE TABLE A1_Region( RID number(5) PRIMARY KEY, LRegion char(10) not null, SRegion char(10) not null ); CREATE TABLE A1_Store( SID number(5) PRIMARY KEY, Name char(20) not null, RID number(5) REFERENCES A1_Region(RID) ); CREATE TABLE A1_Sales( SaleID number(5) PRIMARY KEY, PID number(5)REFERENCES A1_Product(PID), SID number(5)REFERENCES A1_Store(SID), CID char(6)REFERENCES A1_Customer_Info(CID), SDay date not null ); CREATE TABLE A1_sales_return( returnday date not null, returnreason char(30) not null, saleid number(5) REFERENCES A1_store(sid) ); CREATE TABLE A1_customer_score( cid char(6) REFERENCES A1_customer_info(cid), score number(6) default 0 not null ); |
'SQL/Oracle'에 해당되는 글 21건
- 2007.12.17 [Oracle]CREATE TABLE
- 2007.12.05 [Oracle] Export / Import 이용한 백업과 복구
- 2007.12.05 [oracle] oracle management server 구성
- 2007.12.05 [Oracle] CONSOLE 구동 방법
- 2007.12.05 ASP와 Oracle 데이터베이스 사이의 연결 문제를..
- 2007.12.05 ASP와 ADO에서 Oracle에 연결하도록 IIS를 구성하는 방법
- 2007.12.05 [Oracle] DUAL 테이블..
- 2007.12.05 [Oracle] 날짜관련 내장함수
- 2007.12.05 [Oracle] DB에서 특정 컬럼명이 들어 있는 테이블들의 목록 Sql
- 2007.12.05 [Oracle] 테이블/컬럼 목록 산출 SQL
Export와 Import는 가장 유용하게 그리고 자주 사용되는 백업관련 DBA ToolKit 입니다.
SQL*Loader는 외부 데이터를 오라클 서버로 업로드 하는 역할을 수행 하지만 Export/Import는 오라클 서버의 데이터를 다른 오라클 서버(이때 플랫폼과는 무관하다. 예를 들어 윈도우용 오라클에서 Export 받은 파일을 Unix/Linux 서버 기반의 오라클로 Import 하는것이 가능하다) 또는 같은 서버의 다른 사용자로 Import 하는 것이 가능 하다.
먼저 Export부터 그 사용법에 대해 알아 보기로 하자.
1. Export
- EXport는 데이터베이스의 논리적인 백업을 제공 한다. 즉 테이블, 데이블스페이스, 데이터를 포함한 사용자, 그리고 사용자가 만든 스키마 오브젝트(Index, View, Synonym, Trigger, DataBase Link, sequence, stored code 등등)등을 백업 받을 수 있는 것이다.
- Export 유틸리티의 Output은 export dump 파일 이다. 이 파일은 import Utility를 통해 읽혀져 다른 데이터베이스등으로 복구 되는 것이다.
- Export 파라미터
많은 파라미터중 UserID라는 파라미터는 꼭 가져야 한다는 것을 기억 하자. Exp 명령 입력하고 아무 파라미터도 주지 않는 경우 기본(Default) 값을 제공하면서 입력을 위한 프롬프트를 보여준다.(이때 사용자 ID와 ORD)는 반드시 입력해야 한다.
USERID : username/password를 값으로 입력 한다. 반드시 입력해야 한다. 만약 전체 데이터베이스를 백업 받기 위해 서는 기술된 User는 명시적으로 exportfull database 롤(Role)을 부여 받아야 한다.
FILE : 출력 파일의 이름(Export후 생기는 dump 파일 이름)
ROWS : Export Dump 파일에 테이블 행(데이터) 포함 여부 표시: (Y)es/(N)o 만약 여러분이 테이블 구조만 export하고 실제 row data는 백업을 원하지 않는 경우에는 rows=n 이라고 명시 해야 한다.(default값은 y)
Query : 테이블의 특정 부분만을 Export 하기 위해서 사용 한다.
(exp userid=scott/tiger tables=emp query=\"where sal \> 2000 \
-----------------------------------------
Export Mode와 관련된 파라미터
FULL : DataBase 레벨의 Export를 수행할지 여부를 표시, 전체 데이터베이스 익스포트 여부를 표시: (Y)es/(N)o
(exp userid=system/manager full=y)
OWNER : Schema Level의 EXport를 수행 할지의 여부를 표시 Export를 원하는 사용자이름을 기술 한다.
(exp userid=system/manager owner=(scott)
TABLES : export할 테이블 테이블 리스트 또는 (Y)es/(N)o
(exp userid=system/manager tables=(emp, dept, salgrade)
(exp userid=system/manager tables=(scott.emp%)
TABLESPACE : export를 원하는 테이블스페이스(TableSpace)를 기술
(exp yserid=system/manager tablespaces = (users) )
-----------------------------------------------------------------------------
INDEXES, CONSTRAINTS, GRANTS, TRIGGERS : Index, Constraints, grant,
triggers등을 export할지의 여부를 지정 (Y)es/(N)o, 기본적으로 앞 4개의 스
키마 오브젝트는 Export 됨
(exp userid=scott/tiger indexes=n constraints=n grants=n triggers=n)
DIRECT : Direct 모드 익스포트 유무 (Y)es/(N)o
INCTYPE : 익스포트 레벨 유형
PARFILE : 파라미터가 명시된 파일의 이름, Export인자들이 많을 경우 별도의 파일로
서 관리 가능
HELP : 대화식 모드에서 익스포트 파라미터 디스플레이 (Y)
LOG : 로깅 메시지를 위한 파일이름을 기술 한다.
CONSISTENT : 익스포트 동안 데이터 갱신시 데이터베이스의 읽기 일관성 뷰 제공
유무: (Y)es/(N)o
BUFFER : 바이트로된 데이터 버퍼 크기: (정수)
COMPRESS : 하나의 익스텐트(Extent)에 모든 데이터를 포함시킬지 명시, (Y)es/(N)o
* Direct Path 익스포트 개념
Direct Path 기능을 사용함으로써 데이터를 훨씬 더 빨리 export할 수 있다.
* Direct-Path 익스포트의 구조
export시 direct 모드의 사용은 파라미터 DIRECT=Y라고 기술함으로써 설정될 수 있다
Direct Path 익스포트는 인스턴스의 다른 자원들과 경쟁하지 않으며 세션에 의해 사용
되는 private area로 데이터베이스 블록을 읽어 들인다.
행들은 전송을 위해 Two-Task Command(TTC) 버퍼로 직접 이동되며 이 TTC 버퍼
내의 데 이터는 Export의 형식으로 되어 있다.
---------------------------------------------------------------
Export의 예 1 : exp 라는 명령만 입력 함으로서 대화식으로 export 처리
---------------------------------------------------------------
D:\backup>exp
Export: Release 9.2.0.1.0 - Production on 일 Jan 11 22:51:41 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
사용자명: scott
암 호:
다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
배열 인출 버퍼 크기 입력: 4096 >
엑스포트 파일: EXPDAT.DMP >
(2)U(사용자), 또는 (3)T(테이블): (2)U >
권한부여 엑스포트 (yes/no): yes >
테이블 데이터 엑스포트 (yes/no): yes >
확장 영역 압축 (yes/no): yes >
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되
었습니다
. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r
. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r
SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블 ADDRBOOK(를)을 엑스포트 중 3 행이 엑스포트됨
. . 테이블 EMP(를)을 엑스포트 중 15 행이 엑스포트됨
......
. 동의어 엑스포트 중
. 뷰 엑스포트 중
. 저장 프로시저 엑스포트 중
. 작업을 엑스포트합니다
. 참조 무결성 제약조건 엑스포트 중
. 트리거 엑스포트 중
. 인덱스유형을 엑스포팅합니다
. 비트맵, 함수, 기능과 확장 가능한 인덱스들을 엑스포트합니다
. 이후 테이블 처리를 엑스포트 중
. 구체화된 뷰 엑스포트 중
. 스냅샷 로그 엑스포트 중
. 작업 대기열을 엑스포트 중
. 리프레쉬 그룹과 자식 엑스포트 중
. 차원을 엑스포트합니다\
. 스키마 이후 단계의 객체와 작업을 엑스포트합니다\r
. 통계를 엑스포트합니다
엑스포트가 경고 없이 정상적으로 종료되었습니다.
D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50
D:\backup 디렉터리
2004-01-11 11:07p <DIR> .
2004-01-11 11:07p <DIR> ..
2004-01-11 11:08p 51,200 EXPDAT.DMP <-- 이름을 안주면 이 이름으로 생성
1개 파일 51,200 바이트
2 디렉터리 2,185,789,440 바이트 남음
---------------------------------------------------------------
Export의 예 2 : SCOTT 계정의 모든 오브젝트를 Export
---------------------------------------------------------------
D:\backup>exp userid=scott/tiger file=scott.dmp
또는 D:\backup>exp userid=system/manager owner=scott file=scott.dmp
Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:24:38 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다
\
. 스키마 이전 단계의 객체와 작업을 엑스포트합니다\r
. SCOTT 사용자를 위해 외래 함수 라이브러리 이름을 엑스포트합니다
. PUBLIC 유형 동의어 엑스포트 중
. 전용 유형 동의어 엑스포트 중\
. SCOTT 사용자의 객체 유형 정의를 엑스포트 합니다 \r
SCOTT의 객체를 엑스포트하려고 합니다 ...
. 데이터베이스 링크 엑스포트 중
. 순차 번호 엑스포트 중
. 클러스터 정의 엑스포트 중
. SCOTT의 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블 ADDRBOOK(를)을 엑스포트 중 3 행이 엑스포트됨
. . 테이블 EMP(를)을 엑스포트 중 15 행이 엑스포트됨
.......................
엑스포트가 경고 없이 정상적으로 종료되었습니다.
D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50
D:\backup 디렉터리
2004-01-11 11:24p <DIR> .
2004-01-11 11:24p <DIR> ..
2004-01-11 11:08p 51,200 EXPDAT.DMP
2004-01-11 11:24p 51,200 scott.dmp
2개 파일 102,400 바이트
2 디렉터리 2,185,736,192 바이트 남음
---------------------------------------------------------------
Export의 예 3 : scott 계정의 emp, dept 테이블의 구조만 Export
---------------------------------------------------------------
D:\backup>exp userid=scott/tiger tables=(emp, dept) rows=n file=structure.dmp
Export: Release 9.2.0.1.0 - Production on 일 Jan 11 23:29:15 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
KO16MSWIN949 문자 설정과 AL16UTF16 NCHAR 문자 설정에서 엑스포트가 종료되었습니다
경고: 테이블 데이터(행)가 엑스포트 되지 않습니다
지정된 테이블을 엑스포트하려고 합니다 via 규정 경로...
. . 테이블 EMP(를)을 엑스포트 중
. . 테이블 DEPT(를)을 엑스포트 중
엑스포트가 경고 없이 정상적으로 종료되었습니다.
D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50
D:\backup 디렉터리
2004-01-11 11:29p <DIR> .
2004-01-11 11:29p <DIR> ..
2004-01-11 11:24p 51,200 scott.dmp
2004-01-11 11:29p 4,096 structure.dmp <--------
3개 파일 59,392 바이트
2 디렉터리 2,185,781,248 바이트 남음
---------------------------------------------------------------
Export의 예 4 : 전체 데이터베이스 백업
---------------------------------------------------------------
D:\backup>exp userid=system/manager full=y file=full.dmp
2. Import
Import Utility는 Export를 통해 생성된 덤프파일을 읽어 데이터베이스 복구를 진행
한다.
파라미터
USERID : Import를 수행 할 객체의 사용자이름/패스워드
FILE : 입력 파일 이름. Export를 통해 생성된 파일
IGNORE : Import시 테이블이나 인덱스와 같은 스키마 오브젝트는 기본적으로 만들려
고 시도한다. 이때 비록 비어있지만 객체가 이미 존재 한다면 존재함으로 인
한 생성 에러가 나타나는데 이를 무시한다는 의미 이다.(default n)
ROWS : Import시 테이블의 Row를 임포트 할것인지의 여부를 지정
(default y)
TABLES : 임포트시킬 테이블(default y)
INDEXES : 임포트시킬 인덱스(default y)
CONSTRAINTS : Constraint들을 import할 전지의 여부를 표시(default y)
GRANTS : GRANT들을 임포트 할건지의 여부(default y)
INCTYPE : 증분적 임포트 유형 명시. SYSTEM 및 RESTORE 옵션이 있음.
PARFILE : 파라미터 명시 파일, 파라미터등이 많아 복잡한 경우에 사용
HELP : 대화식 모드로 익스포트 파라미터 디스플레이.
LOG : 로그 파일명
INDEXFILE : Index-creation 명령을 수용할 파일 명시.
---------------------------------- Import Mode와 관련된 파라미터
FULL : 전체 데이터베이스를 임포트함.
Schema Level에서는 fromuser, touser를 사용한다.
DBA이거나 import full database role을 부여 받지 않았다면 import를 수행하는 사용
자의 스키마에서만 import를 할 수 있다. 이를 해결하기 위해 fromuser, touser를 사
용 한다.
- FROMUSER : 임포트시킬 객체를 포함하는 스키마 리스트.
- TOUSERS : 사용자의 스키마가 임포트될 사용자 리스트 명시.
Table level에서는 tables 파라미터를 사용한다.
- Tables : 기술된 테이블들이 임포트 된다.
예) $imp userid=system/manager full=y
$imp userid=system/manager fromuser=scott touser=test
$imp userid=system/manager tables=(scott.emp, scott.dept)
-----------------------------------------------------------------
DESTROY : Import 시 Import Utility는 필요하다면 어떠한 테이블 스페이스에 대해 만
들 수도 있다. 만약 destroy=y이면 export dump 파일안에 같은 이름을 가
진 data file명이 있다면 import되는 오라클 서버에 대해서 그 파일을
overwrite 한다는 것이다. (default는 n이다.)
($imp userid=scott/tiger destroy=y)
=========================================================================
import 예제 1 : scott 계정을 삭제 후 export 받은 백업본을 이용해 복구하기
=========================================================================
---> 아래는 SQL*Plus에서...
SQL> connect / as sysdba
연결되었습니다.
SQL> drop user scott cascade;
사용자가 삭제되었습니다.
---> 아래는 명령프롬프트에서...
D:\backup>dir
D 드라이브의 볼륨: data1
볼륨 일련 번호: 2434-2E50
D:\backup 디렉터리
2004-01-11 11:33p <DIR> .
2004-01-11 11:33p <DIR> ..
2004-01-11 11:28p 4,096 EXPDAT.DMP
2004-01-11 11:36p 548,864 full.dmp
2004-01-11 11:24p 51,200 scott.dmp
2004-01-11 11:29p 4,096 structure.dmp
4개 파일 608,256 바이트
2 디렉터리 2,185,232,384 바이트 남음
D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp
Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:20:59 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다
경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.
KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
IMP-00003: ORACLE 오류 1435 가 발생했습니다
ORA-01435: 사용자가 존재하지 않습니다
경고와 함께 임포트가 정상 종료되었습니다.
---> 다음은 SQL*Plus에서...
SQL> create user scott identified by tiger
2 default tablespace users
3 temporary tablespace temp
4 quota 100m on users;
사용자가 생성되었습니다.
SQL> grant connect, resource to scott;
권한이 부여되었습니다.
SQL> connect scott./tiger;
연결되었습니다.
SQL> select * from tab;
선택된 레코드가 없습니다.
---> 다음은 명령 프롬프트에서...
D:\backup>imp userid=system/manager fromuser=scott touser=scott file=scott.dmp
Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:33:32 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다
경고: 객체는 다른 사용자 SCOTT(이)가 엑스포트한 것입니다.
KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블 "ADDRBOOK"(를)을 임포트 중 3 행이 임포트되었습니다.
. 테이블 "EMP"(를)을 임포트 중 15행이 임포트되었습니다.
............
............
임포트가 경고 없이 정상적으로 종료되었습니다.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
ADDRBOOK TABLE
BONUS TABLE
CUSTOMER TABLE
CUSTOMER1 TABLE
CUSTOMER2 TABLE
DEPT TABLE
EMP TABLE
EMPLOYEE TABLE
EMP_HISTORY TABLE
KOR TABLE
LONGTEST TABLE
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
MYDEPT TABLE
MYEMP TABLE
MYTABLE TABLE
SALES TABLE
SALGRADE TABLE
SAWON TABLE
S_CUSTOMER TABLE
S_DEPT TABLE
S_EMP TABLE
S_IMAGE TABLE
S_INVENTORY TABLE
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
S_ITEM TABLE
S_LONGTEXT TABLE
S_ORD TABLE
S_PRODUCT TABLE
S_REGION TABLE
S_TITLE TABLE
S_WAREHOUSE TABLE
TEST TABLE
TIME_TAB TABLE
31 개의 행이 선택되었습니다.
=========================================================================
import 예제 2 : emp Table을 삭제 후 백업본을 이용해 복구하기
=========================================================================
--> SQL*Plus에서 ...
SQL> connect scott/tiger
연결되었습니다.
SQL> drop table emp;
drop table emp
*
1행에 오류:
ORA-02449: 외래 키에 의해서 참조된 테이블에 유일/기본 키입니다
SQL> drop table emp cascade constraint;
테이블이 삭제되었습니다.
SQL> select count(*) from emp;
select count(*) from emp
*
1행에 오류:
ORA-00942: 테이블 또는 뷰가 존재하지 않습니다
--> 명령프롬프트에서 실행
D:\backup>imp scott/tiger tables=(emp) file=scott.dmp <-- scott으로 export 받은 경우에...
D:\backup>imp userid=system/manager tables=(emp) file=scott.dmp fromuser=system
touser=scott <-- system으로 export 받은 경우에...
Import: Release 9.2.0.1.0 - Production on 월 Jan 12 00:43:45 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
다음에 접속됨: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
엑스포트 파일은 규정 경로를 거쳐 EXPORT:V09.02.00 에 의해 생성되었습니다
KO16MSWIN949 문자집합과 AL16UTF16 NCHAR 문자 집합에 임포트가 완성되었습니다
. SCOTT 객체를 SCOTT(으)로 임포트하는 중입니다
. . 테이블 "EMP"(를)을 임포트 중 15 행이 임포트
되었습니다
사용 가능한 제약 조건에 관해서...
임포트가 경고 없이 정상적으로 종료되었습니다.
--> SQL*Plus에서 실행
SQL> select count(*) from emp;
COUNT(*)
----------
15
1. 콘솔에서 emca 실행
2. 새로운 management server 구성
Windows NT에 대한 OEMCTL: 버전 9.2.0.1.0 Production
Copyright (c) 1998, 2002, Oracle Corporation. All rights reserved.
Windows NT에 대한 OEMCTL: 버전 9.2.0.1.0 Production
Copyright (c) 1998, 2002, Oracle Corporation. All rights reserved.
처리 대기 중인 작업: 1
도메인에 있는 OMS 시스템 수: 1 (222.239.137.191)
로그인한 관리자 수: 0
저장소 세션 풀 깊이: 15
저장소 세션 수: 7 사용 중, 1 사용 가능, 풀 효율성: 83%
DB Tips |
| ||
CONSOLE 구동 방법 | ||
(V2.X) OEM 2.1 CONSOLE 구동 방법 PURPOSE 이 자료는 OEM 2.X 의 console을 구동하기 위한 절차에 대한 소개 자료이다.
다음은 OEM 2.1을 이용, oracle server 8.1.5 또는 8.1.6 이상을 모니터하려 <OEM console 시작> 1. OEM console을 시작하기 전에 반드시 OMS(Oracle Management Server)를 [주의] 만약, OMS를 구동하지 않고, console을 시작하면 2. OEM console 시작 3. oracle enterprise manager login 에서 OMS user를 입력. 4. security warning 에서 sysman의 password를 변경한다. 5. OEM console에서 관리할 DB를 discovery 한다. 6. discover할 node를 입력 후, OK 선택 (hosts 화일 예) [주의] TNS alias명과 port, sid가 일치하지 않으면 [참고] intelligent agent를 start하려면 oracle user로 들어가서 $ lsnrctl dbsnmp_start 8. navigator window에서 databases 폴더를 클릭하면 discover된 데이타베이스가 9. discover된 데이타베이스를 클릭하면 로그인 화면이 뜬다. connect as를 SYSDBA로 해야만 remote에서 instance startup/shutdown 등 [참고] SYSDBA로 접속을 하려면 O/S 인증을 받아야 하는데, 이 role이 없 1) initSID.ora 화일 REMOTE_OS_AUTHENT = TRUE 2) DB 서버에 password file 생성 3) SVRMGR> grant sysdba to system 4) connect as를 SYSDBA로 해야만 remote에서 O/S 인증을 받고 작업 가능. 5) Menu -> System -> Preference -> Preferred Credentials -> 10. 데이타베이스 폴더를 더블 클릭하면 데이타베이스 리스트가 나타난다. 11. Preferred Credentials를 설정하면 관리할 database를 더블 클릭하였을 때 메뉴에서 system -> preference -> preferred credential tab 선택.
|
원문 : http://support.microsoft.com/default.aspx?scid=kb;ko;255084
요약
본 문서에서는 Active Server Pages(ASP) 응용 프로그램에서 Oracle 데이터베이스로 연결할 때 발생하는 문제를 해결하기 위한 일반적인 단계를 설명합니다. 대개 아래와 같은 오류 메시지가 나타납니다.및
이 구성 요소를 모두 설치해야 이 드라이버를 사용할 수 있습니다.
추가 정보
다음은 ASP와 Oracle 데이터베이스 간의 연결 문제를 조사할 때 일반적으로 수행하는 단계입니다.- 먼저 명령줄 기반 쿼리 유틸리티인 Oracle SQL Plus를 사용하여 Oracle에 연결하고 데이터를 검색할 수 있는지 확인합니다. 이 도구에서 Oracle에 연결할 수 없으면 Oracle 클라이언트 구성 요소의 설치 또는 구성에 문제가 있거나 SQL Net Easy Config 또는 Oracle Net8 Easy Config 유틸리티를 올바른 방법으로 사용하여 Oracle 서버의 별칭을 만들지 않은 것입니다. Oracle 데이터베이스 관리자와 협조하여 필요한 Oracle 구성 요소가 올바르게 설치되고 구성되어 있는지 확인해야 합니다.
- 최근에 Internet Information Server(IIS) 컴퓨터에 Oracle 클라이언트를 설치했으면 컴퓨터를 적어도 한 번 이상 다시 부팅했는지 확인합니다. 설치를 완료한 후 Oracle 구성 요소 SQL Plus가 올바르게 작동하더라도 컴퓨터를 다시 부팅하지 않으면 IIS와의 연결이 작동하지 않을 수도 있습니다.
- IIS 서버에 OCIW32.dll 파일의 여러 복사본이 있는지 확인합니다. 컴퓨터에는 이 .dll 파일 복사본이 Oracle 홈 폴더의 \Bin 하위 폴더에 하나만 있어야 합니다. 다른 복사본이 있으면 확장자를 .bak로 바꾼 다음 연결을 다시 테스트합니다. 추가로 발견한 .dll 파일 복사본의 이름을 변경한 후 IIS 서비스를 다시 시작할 수도 있습니다.
- 권장되는 Oracle 구성 요소 버전을 실행하고 있는지 확인합니다. 아래의 Microsoft 기술 자료 문서에서 권장되는 버전을 확인할 수 있습니다.
193225 ASP와 ADO에서 Oracle에 연결하도록 IIS를 구성하는 방법
패치가 필요하면 Oracles FTP 사이트(ftp://Oracle-ftp.oracle.com)에서 구할 수 있습니다. 패치를 구하여 설치하는 방법에 대한 자세한 내용은 데이터베이스 관리자나 Oracle 기술 지원부에 문의하십시오. Microsoft 기술 지원부는 이러한 Oracle 구성 요소의 구성을 지원하지 않습니다. - Oracle 클라이언트 구성 요소가 IIS 서버에 로컬로 설치되어 있는지 확인합니다. Oracle 구성 요소가 로컬로 설치되어 있지 않으면 다른 응용 프로그램은 제대로 작동할 수도 있지만 ASP 응용 프로그램을 사용할 때 문제가 발생합니다. Microsoft는 이들 구성 요소를 IIS 서버에 설치할 것을 권장합니다. 다른 사용자 정의 구성은 지원되지 않습니다.
- IIS 컴퓨터에서 시스템 환경 변수와 PATH 변수를 확인합니다. Oracle 구성 요소가 있는 위치를 가리키는 원격 공유 이름이나 연결된 드라이브가 있으면 제거합니다. 변경 내용이 적용되도록 컴퓨터를 다시 부팅해야 합니다.
- IIS 컴퓨터에서 시스템 환경 변수와 PATH 변수를 다시 확인합니다. Oracle 홈 디렉터리의 \Bin 폴더가 PATH 환경 변수에 포함되어 있는지 확인합니다. 기본 설치인 경우 이 경로는 Orant\Bin 폴더입니다. 이번에도 변경 내용이 적용되도록 컴퓨터를 다시 부팅해야 합니다.
- Oracle용 Microsoft ODBC 드라이버와 Oracle용 Microsoft OLE DB 공급자를 사용하여 연결을 시도합니다. 아래는 이러한 각 연결을 위한 연결 문자열 구문 예제입니다.
'Microsoft OLEDB Provider for Oracle "Provider=MSDAORA.1;Data Source=Your_TNSNames_Alias;User ID=User;Password=Password" 'Microsoft ODBC for Oracle DSN-Less "Provider=MSDASQL;DRIVER={Microsoft ODBC for ORACLE};UID=User;PWD=Password;Server=Your_TNSNames_Alias" 'Microsoft ODBC for Oracle using a DSN "DSN=Your_DSN_Name;UID=User;PWD=Password"
- SQL*Net 인증의 설정을 해제합니다. 이를 위해 SQLNET.ora 파일을 편집합니다. 이 구성 파일은 대개 Oracle 홈 폴더의 Network\Admin 하위 폴더에 저장되어 있습니다. 이 파일에 아래와 같은 줄을 추가합니다.
SQLNET.AUTHENTICATION_SERVICES = (none) SQLNET.AUTHENTICATION = (none)
변경을 마친 후 IIS 서비스를 다시 시작합니다. - IUSR_시스템 이름 계정 및 IWAM_시스템 이름 계정을 Oracle 홈 폴더에 추가합니다. 두 계정에 모든 권한을 부여합니다.
이렇게 하려면 Windows 탐색기에서 Oracle 홈 폴더를 마우스 오른쪽 단추로 누릅니다. 등록 정보를 누른 다음 보안 탭을 누릅니다. 해당 계정을 추가한 다음 모든 권한을 부여합니다. 컴퓨터를 다시 시작합니다.
이 문서에 포함된 다른 공급업체의 연락처 정보는 기술 지원을 받는 데 도움을 주기 위한 것입니다. 이 연락처 정보는 예고 없이 변경될 수 있습니다. Microsoft는 이러한 다른 공급업체 연락처 정보의 정확성을 보증하지 않습니다.
Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.
본 문서의 정보는 다음의 제품에 적용됩니다.
- Microsoft Data Access Components 1.5
- Microsoft Data Access Components 2.0
- Microsoft Data Access Components 2.1
- Microsoft Data Access Components 2.1 (GA)
- Microsoft Data Access Components 2.1 SP1
- Microsoft Data Access Components 2.1 SP2
- Microsoft Data Access Components 2.5
- Microsoft Data Access Components 2.6
원문 : http://support.microsoft.com/default.aspx?scid=kb;KO;193225
요약
본 문서에는 Microsoft Internet Information Server(IIS) 및 Active Server Pages(ASP)와 함께 사용하도록 권장되는 Oracle 클라이언트 소프트웨어 버전과 ODBC 드라이버 버전이 포함되어 있습니다.응용 프로그램을 위한 안정된 플랫폼을 만들기 위해 올바른 버전을 사용하고 있는지, 그리고 적절한 Oracle 패치가 설치되어 있는지 확인하는 것이 좋습니다.
본 문서에는 ASP 또는 ADO를 Oracle 서버와 연결하기 위해 Internet Information Server를 올바르게 설치하는 방법을 보여주는 단계별 안내 예제도 포함되어 있습니다. 본 문서에서 제공하는 설치 안내는 예제일 뿐이며 모든 Oracle 클라이언트 소프트웨어 설치에 적용되는 것은 아닙니다. 자세한 내용은 Oracle 기술 지원부에 문의하십시오.
권장되는 소프트웨어 버전
권장되는 클라이언트 소프트웨어의 버전은 아래와 같습니다.Oracle용 Microsoft ODBC 드라이버(Msorcl32.dll) 버전 2.573.2927 이상과 Microsoft Data Access Components 2.0
아래와 같은 버전이나 그 이상의 Oracle 소프트웨어를 권장합니다.
Oracle 서버 7.3.3.0.0 7.3.4.0.0 8.0.3.0.0 8.0.4.0.0 ------------- --------- --------- --------- --------- RSF 7.3.3.5.3 7.3.4.2.0 8.0.3.2.3 8.0.4.3.2 SQL*Net 2.3.3.0.5 2.3.4.0.4 N/A N/A Net8 N/A N/A 8.0.3.0.4 8.0.4.0.3
Oracle 기술 지원부에서 Oracle 업데이트와 패치를 구할 수도 있습니다.
Microsoft Data Access Components(MDAC) 2.0 설치는 아래 웹 사이트에서 구할 수 있습니다.
http://www.microsoft.com/data/mdac2.htm
중요: Oracle 클라이언트 소프트웨어(SQL*Net, Net8)는 Microsoft와 무관한 공급업체인 Oracle이 만드는 제품으로서 Microsoft는 이 제품의 성능과 신뢰성에 대해 어떠한 보증도 하지 않습니다.
추가 정보
아래는 클라이언트에서 Oracle 데이터베이스를 액세스하는 데 필요한 소프트웨어를 설치하기 위한 단계별 설치 예제입니다. 이 예제에서는 SQL*Net 버전 2.3.3.0.0 및 필요한 지원 파일 버전 7.3.3.0.0을 Windows NT 4.0 Server 컴퓨터에 설치합니다.참고: 최적의 결과를 얻으려면 Windows NT 4.0(SP3)을 새로 설치하고 Internet Information Server를 설치한 컴퓨터에서 아래와 같이 구성하는 것이 좋습니다.
Microsoft Data Access Components 2.0 설치
Custom 설치를 선택한 경우에는 아래의 항목을 선택해야 합니다.- ODBC Components
- OLE DB Components
- ODBC Driver for Oracle Databases
- OLE DB Provider for Oracle Databases
- Microsoft ActiveX Data Objects
참고: Microsoft Data Access Components 2.0 설치를 아래 웹 사이트에서 구할 수 있습니다.
http://www.microsoft.com/data/mdac2.htm
필요한 Oracle 지원 파일 및 SQL*Net 설치
Active Server Pages는 ActiveX Data Objects(ADO)를 사용하여 ODBC(Open Database Connectivity)를 통해 Oracle과 통신합니다. 이 연결을 사용 가능하게 하려면 웹 서버에 Oracle의 클라이언트 소프트웨어를 설치합니다.- Oracle 소프트웨어 CD의 루트 디렉터리에서 설치 프로그램을 실행합니다.
참고: 네트워크 드라이브에서 Oracle 소프트웨어를 설치하려면 네트워크 드라이브를 연결해야 합니다. - 언어를 선택합니다.
- 설치 디렉터리를 선택합니다.
- Oracle7 클라이언트 제품을 선택합니다.
- 응용 프로그램 사용자를 선택합니다.
- Oracle 설명서를 하드 디스크 드라이브에 설치할 것인지 CD에서 직접 사용할 것인지 묻는 메시지가 나타나면 적절한 위치를 선택합니다.
ODBC를 사용하여 Oracle 데이터베이스에 연결하려면 유효한 SQL*Net 연결 문자열을 제공해야 합니다. SQL Net Easy Configuration을 이용하면 Oracle 서버에 연결하기 위해 ODBC 데이터 원본 이름(DSN)에서 참조할 수 있는 별칭을 만들 수 있습니다.
데이터베이스 별칭 추가
- SQL*Net Easy Configuration을 실행합니다. 이를 위해 시작을 누르고 프로그램을 가리키고 Oracle for Windows NT를 선택한 다음 SQL Net Easy Configuration을 선택합니다.
- Add Database Alias를 선택합니다.
- 별칭을 위한 이름(예: 서버 이름)을 입력합니다.
- 프로토콜(대개 TCP/IP)을 선택합니다.
- 호스트 컴퓨터 및 데이터베이스 인스턴스를 지정합니다. 이것은 Oracle 서버 및 그 서버에 있는 데이터베이스의 이름입니다. 이 값들을 모르면 Oracle 데이터베이스 관리자(DBA)에게 문의하십시오.
- 설정을 확인합니다.
- Exit SQL*Net Easy Configuration을 선택합니다.
시스템 DSN 만들기
- 웹 서버의 제어판에서 32비트 ODBC Administrator(관리자)를 사용하여 시스템 DSN을 추가합니다.
- Oracle용 Microsoft ODBC 버전 2.573.2927을 선택합니다.
- Microsoft ODBC for Oracle 대화 상자에서 필요한 정보를 입력합니다. 사용자 이름은 Oracle DBA가 제공하며 "서버"는 SQL Net Easy Configuration에서 만든 별칭입니다.
데이터 원본 이름: OracleDSN 설명 : <서버 이름>에서 Oracle 서버 테스트(옵션) 사용자 이름 : <Oracle DBA가 제공> 서버 : <SQL*Net Easy Configuration 별칭>
ASP에서 Oracle 서버에 연결
아래와 같은 코드를 포함하는 Active Server Page를 만들어 Oracle 연결을 테스트할 수 있습니다. 연결 문자열은 유효한 사용자 ID와 암호를 가져야 하고 SQL 문은 유효한 테이블을 참조해야 합니다.<%@ Language=VBScript %> <html> <head> <title>Oracle Test</title> </head> <body> <center> <% Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "dsn=OracleDSN;uid=userid;pwd=password;" Set objRs = objConn.Execute("SELECT * FROM DEMO.EMPLOYEE") Response.Write "<table border=1 cellpadding=4>" Response.Write "<tr>" For I = 0 To objRS.Fields.Count - 1 Response.Write "<td><b>" & objRS(I).Name & "</b></td>" Next Response.Write "</tr>" Do While Not objRS.EOF Response.Write "<tr>" For I = 0 To objRS.Fields.Count - 1 Response.Write "<td>" & objRS(I) & "</td>" Next Response.Write "</tr>" objRS.MoveNext Loop Response.Write "</table>" objRs.Close objConn.Close %> </center> </body> </html>
Oracle과 IIS에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
189410: HOWTO: Enable or Disable Connection Pooling in IIS 4.0
178391: PRB: Oracle TNS: Authentication Service Initialization Error
참조
60781: Hardware and Software Third-Party Vendor List, L-P
본 문서의 정보는 다음의 제품에 적용됩니다.
- Microsoft Internet Information Server 4.0
조금 정리해 봤습니다.
- DUAL테이블은 데이터 딕셔너리와 함께 Oracle에 의해 자동으로 생성되는 테이블 입니다.
- DUAL테이블은 사용자 SYS의 스키마에 있지만 모든 사용자는 DUAL이라는 이름으로 엑세스 할 수 있습니다.
- DUAL테이블은 VARCHAR2(1)으로 정의된 DUMMY라는 하나의 열이 있으며 값을 가지는 하나의 행도 포함되어 있습니다.
- DUAL테이블은 사용자가 계산이나 사용자 함수등을 실행하고자 할 경우에 유용 합니다.
SQL> DESC DUAL;
이름 널? 유형
------------------------- -------- ---------------
DUMMY VARCHAR2(1)
SQL> SELECT dummy FROM dual;
DU
--
X
몇가지 예제들..
SQL>SELECT count(*) FROM dual;
COUNT(*)
----------
1
SQL>SELECT 123456789 FROM dual;
123456789
----------
123456789
SQL>SELECT ROUND(5*(4+5)/3, 1) xx FROM dual
XX
----------
15
더 자세한 내용은 아래 링크를 참고해 보세용.. 근데 아쉽게도 영문이네용..
링크참조
날짜 및 시간을 조작 하는 함수들 이다.
ADD_MONTHS(date, n) : date에 n달을 추가한다. date값을 반환하며 n은 정수이다.
LAST_DAY(date) : date를 포함하는 달의 마지막 날을 반환, date값을 반환 한다.
MONTHS_BETWEEN(date1, date2) : date1과 date2의 차이를 달 수로 표현, 정수를 반환하며 차이가 1개월 미만인 경우는 1보다 작은 소수를 반환한다. 즉 (date1 – date2)를 나타낸 것이라고 생각하면 된다.
NEXT_DAY(date, c) : 날짜 date를 포함해서 이후 나타나는 첫번째 c요일을 반환 한다.
ROUND(date, fmt) : date를 지정한 포맷 형식에 맞춰 표시하는데 반올림 한다.
SYSDATE : 해당 시스템의 현재 날짜 및 시간을 반환
SYSTIMESTAMP : 오라클 9i에서 추가 되었으며 SYSDATE와 마찬가지로 해당 시스템의 현재 날짜 및 시간을 반환 한다. TIMESTAMP는 DATETIME의 확장이며 보다 정교한 시간을 나타낼 수 있다.
TRUNC(date, fmt) : date를 지정한 포맷 형식에 맞춰 표시하는데 절삭 한다.
[ROUND, TRUNC함수의 fmt 문자열]
YYYY , YYY , YY , Y , YEAR : 년도의 첫날(7월1일부터 반올림)
Q : 분기의 첫날(분기의 두번째 달 16일부터 반올림)
MONTH , MON, MM : 월의 첫날(16일부터 반올림)
W : 월의 첫날과 같은 요일
DDD, DD : 일(정오를 지나면 반올림)
DAY, DY, D : 주의 첫 요일(수요일 정오가 지나면 반올림)
HH, HH12, HH24 : 시단위
MI : 분단위
현재 시스템의 시간 및 날짜를 확인
SQL> select sysdate, systimestamp from dual;
SYSDATE SYSTIMESTAMP
------------ ---------------------------
03/10/01 03/10/01 10:52:28.243000 +09:00
“2003년12월1일”에 3개월을 더하면 어떤 결과가 나올까?
SQL> select add_months('03/12/01', 3) from dual;
ADD_MONT
--------
04/03/01
“2003년10월1일을 포함하는 달의 마지막 날을 반환 하는 예문 이다.
SQL> select last_day('03/10/01') from dual;
LAST_DAY
--------
03/10/31
SQL> select months_between('04/01/01','05/01/01') from dual;
MONTHS_BETWEEN('04/01/01','05/01/01')
-------------------------------------
-12
SQL> select months_between('04/01/01','05/01/30') from dual;
MONTHS_BETWEEN('04/01/01','05/01/30')
-------------------------------------
-12.935484
“2003년 10월1일을 포함하여 다음 일요일을 구하는 예문이다.
SQL> select next_day('03/10/01','일요일')from dual;
NEXT_DAY
--------
03/10/05
SYSDATE를 그냥 출력하면 날짜만 나오게 된다. 만약 시간도 확인을 하기 위해서는 to_char 와 같은 변환 함수를 이용하여 문자로 변환을 시켜 줘야 한다.
SQL> select sysdate, to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') from dual;
SYSDATE TO_CHAR(SYSDATE,'YY
-------- -------------------
04/02/17 2004.02.17 15:25:53
현재 날짜를 2004년2월17일 오후15시25분 정도라면 가정 하고 다음 예문을 이해 하자. MONTH는 월의 첫날을 출력하는데 17일 이므로 월은 반올림 하면 다음 월인 3월1일이 출력된다. 또한 DAY의 경우 주의 첫요일을 출력하는데 2월17일은 화요일 이므로 반올림 대상이 아니다. 즉 주의 첫요일인 2월15일이 출력 되는 것이다.
SQL> select round(sysdate, 'MONTH'), round(sysdate, 'DAY') from dual;
ROUND(SY ROUND(SY
-------- --------
04/03/01 04/02/15
EMP 테이블에서 “SMITH” 사원의 오늘(2004년2월17일 이라고 가정)을 기준으로 입사한지 몇 개월째 인지 파악 하려고 한다.(16째일 부터는 1개월로 반올림하는 예문이다.)
SQL> select ename, hiredate "입사일", sysdate "기준일",
2 round(months_between(sysdate, hiredate), 0) "입사개월수"
3 from emp
4 where ename = 'SMITH';
ENAME 입사일 기준일 입사개월수
---------- -------- -------- ----------
SMITH 80/12/17 04/02/17 278
아래는 trunc를 사용하는 예문이다. 위의 예문에서는 현재 날짜가 17일 이므로 반올림이 되었지만 절삭을 하면 월의 첫날은 2월1일이 된다.
SQL> select trunc(sysdate, 'MONTH'), trunc(sysdate, 'DAY') from dual;
TRUNC(SY TRUNC(SY
-------- --------
04/02/01 04/02/15
일단위로 보면 정오를 지났으므로 일자가 반올림 된다.
SQL> select round(sysdate, 'DD') from dual;
ROUND(SY
--------
04/02/18
[날짜 산술 연산]
date + number date
date – number date
date – date 정수
date + number/24 date
SQL> select systimestamp from dual;
SYSTIMESTAMP
--------------------------------------------------------------------
04/02/18 06:49:35.008000 +09:00
SQL> select sysdate +60 "오늘부터 60일 후" from dual;
오늘부터
--------
04/04/18
SQL> select systimestamp + 60 "오늘부터 60일 후" from dual;
오늘부터
--------
04/04/18
아래 예문은 1970년 1월1일부터 오늘까지의 일수차이를 반환하는 예문이다.
SQL> select trunc(sysdate - to_date('19700101','yyyymmdd')) from dual;
TRUNC(SYSDATE-TO_DATE('19700101','YYYYMMDD'))
---------------------------------------------
12466
/*--------------------------------------------------------------------------------*/
/* ★ [참고] Oracle DB에서 특정 컬럼명이 들어 있는 테이블 목록 Sql
----------------------------------------------------------------------------------*/
Select A.table_name, B.comments
From sys.all_tab_columns A,
sys.all_tab_comments B
Where A.column_name = 'ZZZZZZ' -- 여기 컬럼명 (대문자)
And A.table_name = B.table_name
;
Select * from all_tables Where owner = 'ZZZZZZ';
Select * from all_tab_comments Where owner = ZZZZZZ;
select *
from
(
SELECT ALL_TAB_COMMENTS.TABLE_NAME,
ALL_TAB_COMMENTS.COMMENTS
FROM ALL_TAB_COMMENTS
WHERE ( ALL_TAB_COMMENTS.OWNER = 'SCOTT' )
ORDER BY ALL_TAB_COMMENTS.COMMENTS , ALL_TAB_COMMENTS.TABLE_NAME
) a,
(
SELECT A.TABLE_NAME,
A.COLUMN_NAME,
A.COMMENTS ,
B.COLUMN_ID ID,
A.COMMENTS||' '||DECODE(C.CONSTRAINT_NAME,NULL,'','PK') PNAME,
DECODE(C.CONSTRAINT_NAME,NULL,'','PK') PK
FROM ALL_COL_COMMENTS A ,
ALL_TAB_COLUMNS B ,
(SELECT t.CONSTRAINT_NAME , s.TABLE_NAME , s.COLUMN_NAME
FROM
(SELECT CONSTRAINT_NAME
FROM ALL_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'P' ) t ,
(SELECT CONSTRAINT_NAME ,
TABLE_NAME,COLUMN_NAME
FROM ALL_CONS_COLUMNS ) s
WHERE t.CONSTRAINT_NAME = s.CONSTRAINT_NAME ) C
WHERE ( A.OWNER = B.OWNER ) AND
( A.TABLE_NAME = B.TABLE_NAME ) AND
( A.COLUMN_NAME = B.COLUMN_NAME ) AND
A.TABLE_NAME = C.TABLE_NAME(+) AND
A.COLUMN_NAME = C.COLUMN_NAME(+)
ORDER BY A.TABLE_NAME,B.COLUMN_ID
) b
where a.TABLE_NAME = b.TABLE_NAME