External table, datapump


#1

Текс формат бүхий нэг формат бүхий файлыг бид Oracle Server руу оруулан ашиглаж болно. a.txt файл доторх мэдээллийг хэрхэн унших талаар жишээн дээр тайлбарлая.

a.txt файлд дараах мэдээллүүд байгаа. Мөн файл хаана байрлаж байгаа замыг харна уу.

[oracle@node214 d1]$ cat a.txt
1,Bold,Sugar
2,Dondog,Dulam
3,Bat,Dorj
4,Sukh,Bat
5,George,Washington
[oracle@node214 d1]$
[oracle@node214 d1]$ pwd
/home/oracle/sqlloader/d1

SCOTT хэрэглэгчид шаардлагатай эрхүүдийг өгч уг хэрэглэгчээр нэвтрэн орж дээрх файлын мэдээллийг унших болно.

[oracle@node214 dbca]$
[oracle@node214 dbca]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Tue Jan 24 03:29:58 2017

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>  -- scott хэрэглэгчид хавтас үүсгэх эрх өгнө. Учир нь тухайн хавтсанд буй файлтай ажиллана
SQL>  grant create any directory to scott;

Grant succeeded.

SQL> -- SCOTT хэрэглэгчийн нууц үгийг сольж идэвхжүүлнэ
SQL> alter user scott identified by s account unlock; 

User altered.

SQL>  -- SCOTT хэрэглэгчийн эрхээр нэвтэрч орно
SQL> conn scott/s
Connected.

SQL>  -- a.txt файл байрлах хавтаст Alias үүсгэнэ
SQL> create or replace directory d1 as '/home/oracle/sqlloader/d1';

Directory created.

SQL>  -- SCOTT хэрэглэгчийн хүснэгтүүдийн жагсаалтыг харна
SQL> select table_name from tabs;

TABLE_NAME
------------------------------
SALGRADE
BONUS
EMP
DEPT

SQL> --- cat /home/oracle/sqlloader/d1/a.txt ---
SQL> --- 1,Bold,Sugar --- .... файлын агуулгыг харах
SQL> 
SQL>  --- Тухайн мэдээлэлд зориулсан хүснэгт үүсгэх
SQL> create table t1 (id number, fname varchar2(20),lname varchar2(20))
          organization external
          (type oracle_loader
          default directory d1
          access parameters
          ( records delimited by newline
          fields terminated by ',' )
          location ('a.txt') )
/
SQL> /

Table created.

SQL>  -- t1 хүснэгтний бүтцийг харах
SQL> desc t1
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID						    NUMBER
 FNAME						    VARCHAR2(20)
 LNAME						    VARCHAR2(20)

SQL>  -- хүснэгтний мэдээллийг сонгож харах. Зөвхөн унших эрхтэйгээр хандана
SQL> select * from t1;

	ID FNAME		LNAME
---------- -------------------- --------------------
	 1 Bold 		Sugar
	 2 Dondog		Dulam
	 3 Bat			Dorj
	 4 Sukh 		Bat
	 5 George		Washington

Дээрх жишээний дагуу бид файлуудыг хүснэгт хэлбэр рүү хөрвүүлэн ашиглах боломжтой.

Мөн бид хүснэгтийг шууд dump болгон хадгалж болно.

SQL> CREATE TABLE t2
              ORGANIZATION EXTERNAL
              ( TYPE oracle_datapump
              DEFAULT DIRECTORY d1
              LOCATION ('e.dmp')) as select * from emp;
SQL>
SQL> /

Table created.

e.dmp файл үүссэн эсэхийг шалгах

[oracle@node214 d1]$ ls -la /home/oracle/sqlloader/d1 | grep e.dm
-rw-r----- 1 oracle oinstall 12288 Jan 24 03:44 e.dmp
[oracle@node214 d1]$

Одоо гаргаж авсан файлыг өөр хүснэгт рүү оруулж үзье.

SQL> drop table t2;
SQL> CREATE TABLE t2 (empno number,ename varchar2(40))
                 ORGANIZATION EXTERNAL
                 ( TYPE oracle_datapump
                 DEFAULT DIRECTORY d1
            LOCATION ('e.dmp')) 
 /

Table created.

SQL> desc t2
 Name					   Null?    Type
 ----------------------------------------- -------- ----------------------------
 EMPNO						    NUMBER
 ENAME						    VARCHAR2(40)

SQL> select * from t2;

     EMPNO ENAME
---------- ----------------------------------------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      ...
      ...

#2

Надад 2 бааз хооронд дата файлаар дамжуулах даалгавар байсын.
source баазаас text file export хийгээд destination бааз дээрээ энэ аргаар үүсгээд ашиглаж үзлээ. Миний ажлыг маш хөнгөвчилсөн шийдэл байлаа баярлалаа.
Гэхдээ нэг асуулт байна
external table байгаа folderт иймэрхүү file ууд үүсээд байх юм.
Энэ файлуудыг үүсгэхгүй байх арга чарга байдгын болуу?

rw-r–r--. 1 oracle oinstall 5.3K Mar 1 23:02 TMP_POS_SKUDD_28416.log
-rw-r–r--. 1 oracle oinstall 5.3K Mar 1 23:11 TMP_POS_SKUDD_28873.log
-rw-r–r--. 1 oracle oinstall 6.2K Mar 1 23:02 TMP_POS_SKUSIGANDD_28416.log
-rw-r–r--. 1 oracle oinstall 6.2K Mar 1 23:11 TMP_POS_SKUSIGANDD_28873.log
-rw-r–r--. 1 oracle oinstall 7.1K Mar 1 22:58 TMP_STK_SKUDDTBL_28416.log
-rw-r–r--. 1 oracle oinstall 15K Mar 1 23:11 TMP_STK_SKUDDTBL_28873.log
[oracle@oradb imp]$
[oracle@oradb imp]$
[oracle@oradb imp]$ cat TMP_POS_SKUDD_28416.log

LOG file opened at 03/01/18 23:02:01

KUP-05004: Warning: Intra source concurrency disabled because parallel select was not requested.

Field Definitions for table TMP_POS_SKUDD
Record format DELIMITED BY NEWLINE
Data in file has same endianness as the platform
Rows with all null fields are accepted

Fields in Data Source:

JUMCD                           CHAR (255)
  Terminated by ","
  Trim whitespace same as SQL Loader
ILJA                            CHAR (255)

#3

Зүгээр л лог файл ууд байна даа. Лог файл байршлыг өөрчилж болно. Syntax -ийг нь олоод оруулчихаа…