[ORA] External Table

ORACLE | 2008. 2. 24. 11:54
Posted by Haronoid
참고 : http://radiocom.kunsan.ac.kr/lecture/oracle/statement_create/create_external_table.html
http://www.psoug.org/reference/externaltab.html


external 테이블은 DB 외부에 저장된 data 파일을 조작하기 위한 접근 방법의 하나로 읽기 전용 테이블이다.
external 테이블의 실제 데이터는 DB 외부에 존재하지만, external 테이블에 대한 metadata는 DB 내부에 존재하는 일종의 가상 테이블이다.
주로 ETL(extraction, transformation, loading)에 주로 사용되는데, ETL은 일종의 tool로 data 파일에 접근하고 조작하여 그 결과를 오라클 내로 loading하는 동작이다.

External 테이블에 대한 두 가지 access drivers
1) LOADER ACCESS DRIVER(oracle loader) :
Oracle의 Loader 기능을 이용해 external table로부터 데이터를 읽어 오는데 사용(SQL*Loader에 의해 해석될 수 있는 어떤 데이터 유형도 access 가능)
2) Import/Export ACCESS DRIVER(oracle Internal) :
Platform에 상관 없이 데이터의 Importing/Exporting이 가능

CREATE DIRECTORY 명령문을 사용하여 file의 위치 정보를 가진 객체를 먼저 생성한 후 CREATE TABLE 명령에 ORGANIZATION EXTERNAL이라는 절을 사용하여 external 테이블을 생성할 수 있다.

특징
 - 형식 : CREATE TABLE ....
ORGANIZATION EXTERNAL
- Read Olny
- DML작업 불가능
- Index 생성 불가능

----------------------------------------------------------------------------------------------------
1) CREATE TABLE 명령을 사용하여 external table을 생성한다.
external table은 SQL 명령문을 사용하여 질의가 가능하며, external table에 대해 DML 작업을 수행 할 수 없다. 또한 external table에 대한 index 생성이 불가능하다.

【형식】
    CREATE TABLE [스키마.]테이블명
    컬럼명 데이터타입 [DEFAULT 값]...
    ORGANIZATION EXTERNAL (
    [TYPE access_driver형식]
    [DEFAULT DIRECTORY 객체명]
    [ACCESS PARAMETERS (access_parameters절...)]
    [LOCATION (경로:파일명...)]
    [REJECT LIMIT n | UNLIMITED]

• type : 접근방식을 기술하는것으로 oracle loader나 oracle internal 방식중 하나(default=oracle loader)
• default directory : external table의 위치 정보를 가진 object를 사용
• create directory : 명령어를 사용하여 생성한 object를 기술한다. access driver가 error에 대한 log 정보를 기록하기 위해서도 사용
• access_parameters : access driver의 parameter를 정의 한다. log file, discard file, bad file을 적을 수 있다.
• location : 각 external data source에 대한 external locator를 기술하는 곳으로주로 file을 사용한다.경로가 생략된 경우, default directory에 지정한 경로를 사용한다.
• reject limits : bad file에 저장되는 reject된 data의 건수를 제한한다. 디폴트=0, bad file은 access parameter 절에기술한다.
----------------------------------------------------------------------------------------------------
2) 우선 External table을 생성하기 전에 external table의 위치 정보를 가진 object를 생성한다.
CREATE DIRECTORY명령문을 사용하여 file의 위치 정보를 가진 object를 생성한다.

【형식】
    CREATE [OR REPLACE] DIRECTORY 객체명 AS 경로명

• object명에 schema는 기술할 수 없다.
• directory의 길이는 30byte를 넘을 수 없다.
• path명에 file이 위치해 있는 OS의 절대경로를 기술한다.
• CREATE ANY DIRECTORY 시스템 권한이 있아야 한다.

【예제】
1단계) 읽어올 데이터 파일
$ pwd  
/export/home/oracle/app/oracle/oradata
$ cat test.txt
0111,"COREA",
0222,"CHINA",
$

2단계) 디렉토리 만들기
SQL> conn system/manager as sysdba

SQL> create directory test_dir
  2  AS '/export/home/oracle/app/oracle/oradata';
 
디렉토리가 생성되었습니다.
 
SQL> grant read,write on directory test_dir to scott;
 
권한이 부여되었습니다.
 
SQL> conn scott/tiger
Connected.
 
세션이 변경되었습니다.
 
SQL>

3단계) 테이블 만들기(외부 데이터 읽어올)

SQL> create table test_ext (
  2    aa number(4),
  3    bb char(5))
  4  ORGANIZATION EXTERNAL         ☜ external table 생성을 의미
  5   (type oracle_loader        ☜ SQL*Loader를 사용하여 데이터를 load함
  6    default directory test_dir     ☜ 미리 생성한 directory object를 기술
  7    access parameters (        ☜ access driver의 변수값 지정
  8      records delimited by newline    ☜ 줄바꿈으로 record를 구분
  9      badfile 'test_bad.bad'        ☜ loading되지 못한 record를 저장할 file
 10      logfile 'test_log.log'        ☜ log 기록을 저장하는 file
 11      fields terminated by ',' optionally enclosed by '"'    ☜컬럼 구분시 컴마(,) 사용
 12       (aa, bb))
 13      location('test.txt'))        ☜ 읽어올 외부 파일의 이름
 14  reject limit unlimited;         ☜ bad file에 저장되는 unload되는 record 제한
 
테이블이 생성되었습니다.
 
SQL> select * from test_ext;
 
        AA BB
---------- -----
       111 COREA
       222 CHINA
 
SQL> 
SQL> desc test_ext;
 이름                  널?      유형
 --------------------- -------- ----------------------------
 AA                             NUMBER(4)
 BB                             CHAR(5)
 
SQL> select * from tab;
 
TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT                           TABLE
EMP                            TABLE
BONUS                          TABLE
SALGRADE                       TABLE
TEST_EXT                       TABLE
 
SQL>

 

NTLDR is missing

Windows | 2007. 9. 12. 11:35
Posted by Haronoid
윈도우가 들어있는 하드디스크의 교환이나, 바이러스등의 화일 손상등의 원인으로 부팅시 나오는 에러
부트로더의 손상등의 이유로 부팅시 나오는 에러입니다.

원인
1. NTLDR 파일 손상이나 삭제
2. BOOTFONT.BIN 파일손상 삭제
3. NTDETECT.COM 파일 손상이나 삭제
4 .하드웨어적 문제(이경우는 복잡한경우로 문제의 부품을 일일이 확인해야합니다)

해결방법
윈도우의 설치디스크를 넣고 부팅
1.R 을 선택해서 복원으로
2.C를 선택해서 콘솔부팅
 2-1 부팅할 화면에서 부팅할 하드를 선택
 2-2 administrator 아이디와 암호 입력후 부팅
3. cd에서 ntldr 화일과 ntdetct.com화일을 카피
  ex)copy cdrom\i386\ntldr c:\

도스명령
attrib -r -s -h ntldr 화일의 시스템속성 해제
attrib -r -s -h ntdetect.com
fixboot  부트섹터기록명령
fixmbr \drvice\harddisk0 첫번재 하드디스크의 MBR 부트레코드의 복구 명령어
map /arc 파티션정보 확인
 

Excel 한계치, 제한

Excel | 2007. 8. 27. 16:29
Posted by Haronoid
  • 셀 최대 문자입력 : 32767문자
  • 셀에 표지가능한 문자 1024
  • 수식에 표지가능한 문자수 32767문자
  • 워크시트 사이즈 65536행 x 245열
  • 열의 크기 255문자
  • 행의 높이 409포인트
  • 북의 시트수 : 가능한 메모리에 의존
  • 최대와 최소율의 범위 10~400%
  • 되돌리기 최대회수 16
  • 가용자릿수 15
  • 셀에 입력가능한 최대수 9.99999999999999E307
  • 처리가능한 정수의 최대값 1.79769313486231E308
  • 처리가능한 음수의 최소값 -2.2250738585072E-308
  • 처리가능한 정수의 최소값 2.229E-308
  • 처리가능한 음수의 최대값 -1E-307
  • 함수에 설정가능한 내부레벨 7
  • 계산가능한 최대 과거의 날짜 1900년1월1일(1904년시스템은1904/1/1)
  • 계산가능한 최대 미래의 날짜 9999년12월31일 입력가능한 최대시간 9999:59:59
Excel 2003기준
 

ROW_NUMBER() OVER(ORDER BY CLMNAME)

ORACLE | 2007. 8. 21. 15:33
Posted by Haronoid
SELECT시 컬럼에 로우번호 넣기
ROW_NUMBER() OVER(PARTITION BY 패턴컬럼명 ORDER BY 정렬컬럼명)
  • ROW_NUMBER()번호를 넣는 함수 뒤에 OVER와 ORDER BY가 필수
  • PARTITION BY 키워드로 패턴별로 번호를 넣을수 있다.
  • ORDER BY에 ROWID를 넣으면 기존의 (로우)순서로 나오게 된다.
  • 오라클9i이후 버전부터 유효하다.

ex) ROW_NUMBER() OVER(ORDER BY CLM)
//테이블의 100번째부터 300번째까지의 라인을 출력
SELECT * FROM (
SELECT ROW_NUMBER() OVER (ORDER BY ROWID) ROW_NO,
TABLE_NAME.*
FROM TABLE_NAME )
WHERE ROW_NO BETWEEN 100 AND 300;

ex) PARTITION BY
아래의 결과를
------------------
| COL_1 | COL_2 |
|----------------|
| A | A1 |
| A | B1 |
| A | C1 |
| B | A2 |
| B | B2 |
| B | C2 |
| B | D2 |
| C | A3 |
| C | B3 |
| C | C3 |
| C | D3 |
| D | A4 |
| D | B4 |
| D | C4 |
------------------아래처럼 출력
--------------------
| COL_1 | COL_2 | NO
|-------------------
| A | A1 | 1
| A | B1 | 2
| A | C1 | 3
| B | A2 | 1
| B | B2 | 2
| B | C2 | 3
| B | D2 | 4
| C | A3 | 1
| C | B3 | 2
| C | C3 | 3
| C | D3 | 4
| D | A4 | 1
| D | B4 | 2
| D | C4 | 3
------------------
SELECT COL_1,
            COL_2,
            ROW_NUMBER() OVER(PARTITION BY COL_1 ORDER BY COL_2) NO
FROM TABLE_NAME

 

커맨드실행 SQLPLUS로 직접 SQL화일실행

ORACLE | 2007. 8. 21. 14:45
Posted by Haronoid
커맨드에서 sqlplus로 저장된 sql화일을 실행한다.
sqlplus userid/password @화일명

ex)
>sqlplus scott/scott @start.sql
 

서비스 정지 / 시작

WidnowsCommandLine | 2007. 8. 21. 14:41
Posted by Haronoid
커맨드라인에서 서비스의 시작 정지 지정
net stop "서비스명"
net start "서비스명"
ex)
REM Tomcat서비스 정지
net stop "Apache Tomcat 4.1"
REM Tomcat서비스 시작
net start "Apache Tomcat 4.1"


 

Excel VBA에서의 개행문자처리

VB&VBA | 2007. 8. 16. 16:10
Posted by Haronoid
기본적으로 개행은
\n\r 로 구성된 케리지리턴과 라인피드로 구성되어있다.

일반적인 String속에 개행은 \n\r 로 들어가지만 데이타를 Excel표지로 바꿀경우
윈도우2000이하의 오피스 엑셀 2000 이하의 버전에서 개행문자가 화면에 표시되어 버리는 경우가 발생한다.
일본어윈도우에서는 「・」문자가 표지된다. (한글윈도우의 경우는 확인 못해봤음)
엑셀 Macro에서도 vbCrLf를 추가하면 위와 같은 모양이 보인다.
해결책은 vbLf 만으로 하던가 vbCrLf 혹은 개행문자인 \r\n을 chr(10)으로 댜체하는 방법으로 해결이 가능하다.

단 이 현상은 윈도우XP이상의 경우에서는 발견되지 않는다.
 

BAT화일로 날짜명 폴더 만들기

WidnowsCommandLine | 2007. 8. 3. 12:58
Posted by Haronoid

배치화일로 폴더 작성후 bat화일 실행
실행용 bat화일
SET MYDIR=%CD:~0,1%
SET TODAY=%date:~-10%
for /F "tokens=1" %%a in ('time /t') do set orgtime=%%a
SET NEWDIR=%MYDIR%:%TODAY:~0,4%_%TODAY:~5,2%_%TODAY:~8,2%_%orgtime:~0,2%_%
                                                                                                                 orgtime:~3,5%

md %NEWDIR%
copy DATEXP.BAT %NEWDIR%
cd %NEWDIR%
call DATEXP.BAT
실행결과 : 현재 날짜와 시간으로 폴더를 만들고 현재 폴더에 있는 실행화을을 복사후 복사된 화일을 실행합니다.

 

Cr & Lf

프로그래밍 기본 | 2007. 8. 1. 11:20
Posted by Haronoid
  •  Cr & Lf
    • CR : CarrageReturn
      • \r로 표시
      •  커서를 줄의 맨처음으로 보냄
      • VB에서는 vbCr로 표시
    • LF : LineFeed
      • \n로 표시
      • 커서를 다음줄로 보냄(위치는 그대로 커서는 다음줄로 이동함)
      • C에서는 \n으로 입력해서 text저장을 하면 \r\n으로 인식되어 표지됨
      • VB에서는 vbLf , chr(10) 으로 표시가능

예)

ABC\rBCD   => BCD

ABC\nBCD  => ABC

  BCD

ABC\r\nBCD  =>  ABC

                              BCD


이 글은 스프링노트에서 작성되었습니다.

 
블로그 이미지

Haronoid

기본적으로 프로그래밍 관련 메모를 중점으로 합니다. 자세한 설명이 결여되어 있을 가능성이 있습니다.

카테고리

분류 전체보기 (29)
프로그래밍 기본 (1)
VB&VBA (1)
JAVA (0)
ORACLE (10)
WidnowsCommandLine (2)
Excel (1)
Windows (1)
.NET (6)
MS SQL (6)