Thứ Bảy, 22 tháng 2, 2020

HỌC ORACLE DB TỪ A-Z - BÀI 16: NẠP VÀ TỔ CHỨC LƯU TRỮ DỮ LIỆU

16.1.GIỚI THIỆU CHUNG

16.1.1.  Tổng quan việc nạp dữ liệu

Hình vẽ 1.    Tổng quan về việc nạp và lưu trữ dữ liệu

Có một số phương pháp khác nhau để có thể load (nạp) dữ liệu vào trong tables của oracle database, các phương pháp được đề cập trong chương này bao gồm.
§  Công cụ direct load insert: nạp dữ liệu trực tiếp.
§  SQL*loader: nạp dữ liệu từ file text, khuôn dạng tự do
§  Công cụ Import và Export: nạp dữ liệu từ file lưu trữ với khuôn dạng do Oracle quy định.

Direct load insert
Direct load insert có thể được sử dụng để sao chép (copy) dữ liệu từ một bảng sang một bảng khác trong cùng một database. Sử dụng phương pháp này có thể tăng  tốc độ của quá trình insert dữ liệu do có thể bỏ qua vùng đệm dữ liệu,  dữ liệu được ghi trực tiếp vào trong database.

SQL loader
SQl * loader là công cụ được sử dụng để load dữ liệu vào trong oracle database sử dụng các file dữ liệu bên ngoài, công cụ này thường dùng chuyển dữ liệu từ hệ thống khác (như FoxPro, Access,...) vào trong Oracle.

Eport và Import
Công cụ Export cho phép các users tách thông tin trong dictionary views và dữ liệu trong Oracle Database và chuyển chúng vào trong một file của hệ điều hành theo định dạng file nhị phân của Oracle.
File sinh ra bởi công cụ Export có thể đọc bởi công cụ Import để đưa dữ liệu đọc được vào trong cùng một database hoặc vào một database khác.

16.1.2.  Nạp dữ liệu trực tiếp

Khi nạp dữ liệu trực tiếp (direct load insert) có thể sử dụng mệnh đề APPEND như sau:
Cú pháp:
INSERT /*+APPEND*/ INTO [schema.]table
[ [NO]LOGGING]
sub_query ;
Trong đó:
schema                        là owner của bảng
table                là tên của bảng
sub_query                    là câu lệnh query để lấy các hàng theo yêu cầu
Direct insert load chỉ được dùng khi câu lệnh INSERT INTO SELECT được sử dụng. Tuỳ chọn này không có khi câu lệnh INSERT INTO VALUES được sử dụng. Direct load insert đươc dùng cho cả nonpartitioned table và partitioned table. Công cụ này cho phép kiểm tra các index và các constraint của bảng.

Chế độ logging
Khi insert sử dụng tuỳ chọn LOGGING (là giá trị mặc định) câu lệnh này sinh ra các điểm vào cho redo log, thực hiện việc recovery dữ liệu đầy đủ nếu trong quá trình load có lỗi.
Nếu NOLOGGING được sử dụng, tất cả các thay đổi trong dữ liệu sẽ không được lưu trong vùng đệm redo log, một số thông tin nhỏ về logging được đưa vào redo log cho các câu lệnh  mở rộng vùng lưu trữ
Chế độ NOLOGGING sử dụng nếu như các thuộc tính đã được khởi tạo cho bảng.
Nếu một số thao tác update online đối với dữ liệu trên bảng xảy ra thường xuyên nên khởi tạo thuộc tính NOLOGGING khi load và khởi tạo lại LOGGING khi load dữ liệu đã hoàn thành.

Direct load insert cho phép các giao dịch khác đồng thời tạo thay đổi trên bảng
Toàn bộ dữ liệu đưa vào bảng theo phương pháp này sẽ được load vào vùng chỉ định bởi High Water Mark. Nếu bảng chứa nhiều block nơi các hàng đã bị xoá, không gian có thể sẽ không được sử dụng, việc truy vấn trên toàn bộ bảng có thể sẽ chậm đi.

16.2.NẠP DỮ LIỆU

16.2.1.  Nạp dữ liệu bằng SQL* Loader

Sql* Loader nạp dữ liệu từ một file bên ngoài database vào trong Oracle database.
Các đặc tính của SQL loader:
§  Có thể sử dụng một hay nhiều file đầu vào
§  Một vài bản ghi đầu vào có thể được kết hợp vào trong một bản ghi logic trong quá trình nạp.
§  Các trường đầu vào có thể có độ dài thay đổi hoặc như nhau.
§  Dữ liệu đầu vào có thể có các định dạng khác nhau – kí tự, nhị phân, date.
§  Dữ liệu có thể được load từ các phương tiện lưu trữ khác nhau như đĩa, băng từ.
§  Dữ liệu có thể được load vào một hoặc nhiều bảng trong một lần chạy.
§  Có tuỳ chọn cho phép thay thế hay nối tiếp dữ liệu vào trong các bảng.
§  Các hàm SQL có thể được sử dụng ngay trên dữ liệu đầu vào trước khi dữ liệu được lưu trong database.
§  Giá trị các cột có thể tự động được sinh ra dựa trên một nguyên tắc nào đó, ví dụ: giá trị khoá tuần tự có thể được sinh ra và lưu trong các cột của bảng.
§  Dữ liệu có thể được load trực tiếp vào trong bảng mà không cần phải sử dụng đến vùng đệm.
Hình vẽ 2.    SQL*loader

SQL*Loader sử dụng các file sau đây
§  Control file (file điều khiển): dùng để định dạng cho dữ liệu đầu vào, bảng đầu ra và các điều kiện tuỳ chọn có thể được sử dụng để load một phần các bản ghi tìm thấy trong file dữ liệu đầu vào.
§  Data file (file dữ liệu): chứa dữ liệu đầu vào theo định dạng  được định nghĩa bởi control file.
§  Parameter file (file tham số) là file tuỳ chọn có thể sử dụng chứa các tham số dòng lệnh cho quá trình load.
§  Bad File: được sử dụng bởi công cụ load  dùng để ghi các bản ghi  bị loại bỏ trong quá trình load (hiện tượng này có thể xảy ra khi các bản ghi được load vào trong bảng và bị loại ra sau khi kiểm tra tính hợp lệ đối với các trường)
§  Log File: được tạo bởi SQL*loader chứa một bản ghi các thông tin trong quá trình load dữ liệu.
§  Discard File: là một file có thể được tạo khi cần thiết, file này chứa tất cả các bản ghi không thoả mãn điều kiện lựa chọn.

16.2.2.  Phương pháp nạp dữ liệu

Hình vẽ 3.    Phương thức nạp dữ liệu

SQL* Loader sử dụng hai phương pháp load dữ liệu:
§  Conventional load - nạp dữ liệu thông qua mảng
§  Direct load - nạp dữ liệu trực tiếp

Conventional load
Phương pháp conventional load xây dựng một mảng các hàng được insert và sử dụng câu lệnh INSERT để load dữ liệu. Trong quá trình load dữ liệu theo phương pháp conventional load các bản ghi đưa vào sẽ được phân tích dựa vào các trường được chỉ định. Một mảng của các bản ghi được tạo lập và chèn vào trong bảng theo chỉ định của file điều khiển. Các bản ghi không thoả mãn điều kịên của các trường được chỉ định thì sẽ bị loại bỏ và các bản ghi không thoả mãn điều kiện lựa chọn đặt ra sẽ bị từ chối.
Có thể sử dụng phương pháp conventional load để load dữ liệu vào trong cả các bảng cluster hay các bảng không được cluster.
Thông tin redo log được sinh ra và điều khiển bởi thuộc tính LOG cho các bảng đựơc load.

Direct load
Theo phương pháp direct load, oracle server xây dựng các block dữ liệu trên bộ nhớ và cất các block này trực tiếp vào trong các vùng extent được cấp phát cho bảng được dùng trong quá trình load .
Redo log không được sinh ra trừ khi database đang ở chế độ ARCHIVE LOG,  Direct load sử dụng các trường đã chỉ định để xây dựng toàn bộ các blocks của dữ liệu và trực tiếp ghi toàn bộ các block đó vào trong các datafile. Quá trình load dữ liệu này có thể bỏ qua vùng đệm dữ liệu trên bộ nhớ, việc truy xuất vùng nhớ SGA chỉ để quản lý việc mở rộng các extents và hiệu chỉnh giá trị High Water Mark.
Phương pháp direct load cho phép nạp dữ liệu nhanh hơn so với phương pháp conventional load. Nhưng phương pháp này không sử dụng được trong một số tình huống nhất định. Phần tiếp theo sẽ trình bày so sánh giữa hai phương pháp load dữ liệu.

16.2.3.  So sánh hai phương pháp nạp dữ liệu

Bảng sau đây so sánh hai phương pháp load dữ liệu
Conventional load
Direct load
Sử dụng lện COMMIT để ghi nhận thay đổi dữ liệu thường trú
Sử dụng các lệnh lưu trữ dữ liệu
Luôn có các redo log tương ứng
Chỉ tạo redo log trong một số trường hợp đặc biệt
Thoả mãn tất cả các ràng buộc
Chỉ cần thoả mãn khoá chính, khoá duy nhất và điều kiện NOT NULL
Thực hiện các trigger INSERT kèm theo (nếu có)
Không thực hiện các trigger INSERT kèm theo
Có thể nạp dữ liệu vào clustered tables
Không cho phép nạp dữ liệu vào clustered tables
User khác vẫn có thể thay đổi dữ liệu trên table, trong khi nạp.
Trong khi nạp, các user khác không được phép sửa đổi dữ liệu của bảng đó

Phương pháp lưu trữ dữ liệu
Phương pháp conventional load sử dụng câu lệnh SQL và COMMIT cho việc cất dữ liệu, quá trình chèn một mảng dữ liệu và tiếp theo là câu lệnh COMMIT. Mỗi dữ liệu load có thể liên quan đến một vài giao dịch.
Phương pháp direct load sử dụng phương pháp ghi các block dữ liệu vào trong oracle data file, các đặc tính khác nhau sau đây giữa hai quá trình cất dữ liệu trên hai phương pháp:
§  Trong quá trình dữ liệu được cất, toàn bộ các block được cất vào trong oracle database.
§  Các block này được ghi vào trong sau giá trị High Water Mark của bảng.
§  Một quá trình cất dữ liệu sẽ không kết thúc giao dịch.
§  Các index không được cập nhật trong mỗi lẫn cất dữ liệu.

Lưu lại các thay đổi
Conventional load sinh ra điểm vào redo log giống như các câu lệnh DML, khi sử dụng direct load, các điểm vào đó không được sinh ra nếu như database ở trong chế độ:
§  Database trong chế độ NOARCHIVELOG
§  Database trong chế độ ARCHIVELOG nhưng tham số LOGGING=DISABLE (chế độ logging bị disable khi khởi tạo thuộc tính NOLOG cho bảng hay sử dụng mệnh đề UNRECOVERABLE  trong file điều khiển.

Thiết lập các ràng buộc
Trong quá trình sử dụng conventional load  tất cả các constraint được enable sẽ được thiết lập, các constraint này được sử dụng trong quá trình thực hiện các câu lệnh DML.
Khi thực hiện Direct load các constraints được sử dụng như sau:
§  Các NOT NULL constraint được kiểm tra khi các mảng được xây dựng.
§  Ngoại khoá( Foreign Key) và các CHECK constraint bị DISABLE và được ENANBLE thực hiện xong quá trình load dữ liệu bằng cách sử dụng câu lệnh tương ứng trong tệp điều khiển. Ngoại khoá bi disable bơỉ vì chúng tham chiếu đến các hàng khác hay các bảng khác. Các CHECK constraint bị DISABLE bởi vì chúng có thể sử dụng các hàm  SQL, nếu một số lượng nhỏ các hàng được chèn vào trong một bảng lớn nên sử dụng phương thức load conventional load.
§  Khoá chính và khoá duy nhất (unique) được kiểm tra trong quá trình load và khi kết thúc quá trình load chúng có thể bị disable nếu chúng không hợp lệ.

Thực hiện các Trigger Insert
Trong  khi các trigger insert được thực hiện trong quá trình conventional load thì chúng lại bị DISABLE trước khi thực hiện việc load bằng phương thức direct. Chúng có thể vẫn trong trạng thái DISABLE nếu như đối tượng được tham chiếu tới không thể truy xuất khi kết thúc quá trình chạy. Cần xem xét việc sử dụng phương thức conventional load khi load dữ liệu vào trong bảng với trigger insert.

Load dữ liệu vào trong clustered table
Phương thức direct load không thể sử dụng cho các clustered table, chỉ có thể sử dụng phương thức conventional load cho các bảng clustered table.

Quá trình khoá (Locking)
Trong khi thực hiện direct load, các transactions (giao dịch) khác không thể ghi lại bất kỳ thay đổi nào trên bảng đang được load, ngoại trừ việc sử dụng phương thức parallel direct load.

16.2.4.  Nạp dữ liệu đồng thời (Parallel direct load)

Parallel direct load cho phép sử dụng một vài session direct load đồng thời dữ liệu vào trong một bảng.
Hình vẽ 4.    Nạp dữ liệu đồng thời
Tính tuần tự của các câu lệnh
Sử dụng các file dữ liệu vào khác nhau cho mỗi session trong khi sử dụng parallel direct load, khi các sesion trong parallel direct load được khởi tạo, quá trình load thực hiện các  bước sau đây:
1.      Mỗi session sử dụng một temporary segment để load dữ liệu từ tệp dữ liệu đầu vào. Những temporary segment này được tạo trong tablespace mà bảng nằm trên đó. Nếu tablespace chứa một vài datafile thì một user có thể chỉ cho mỗi session file nơi temporary segment được tạo. Tham số lưu trữ cho các segment này có thể được chỉ định bởi user. Theo mặc định, các segment này sử dụng các tham số lưu trữ giống với bảng đang được load.
2.      Extent cuối cùng trong mỗi temporary segment sẽ được cắt đi để thu hồi không gian không được sử dụng khi session kết thúc.
3.      Toàn bộ các temporary segment được kết hợp lại hình thành nên một segment vào cuối của quá trình load dữ liệu.
4.      Segment đó được thêm vào segment của bảng.

Các hạn chế
Việc sử dụng parallel direct load có các hạn chế sau đây:
§  Các indexes không được xem xét trong quá trình load, xoá các indexes trước khi load sử dụng paralell và tạo lại chúng sau khi load xong.
§  Tính toàn vẹn của tham chiếu, CHECK constraint và các trigger phải được DISABLE và được ENABLE lại bằng tay sau đó.
§  Các hàng chỉ có thể nối tiếp vào với dữ liệu tồn tại trong bảng do các quá trình load riêng lẻ không thể kết hợp được với nhau. Nếu dữ liệu trong bảng cần thay thế thì phải sử dụng câu lệnh TRUNCATE bảng trước khi sử dụng parallel load.

16.3.NẠP DỮ LIỆU BẰNG SQL*LOADER

16.3.1.  Sử dụng SLQ*LOADER

Hình vẽ 5.    Nạp dữ liệu bằng SQL*Loader

Sử dụng câu lệnh sau đây để thực hiện load dữ liệu:
Cú pháp:
C:\> sqlldr[keyword=]value[[[,]keyword=]value]...
Với:
keyword                      là từ khoá
value                            là giá trị được gán cho từ khoá          
Ví dụ:
$sqlldr scott/tiger \
> control=ulcase6.ctl \
> log=ulcase6.log direct=true

Chú ý:
Nếu từ khoá không được chỉ định thì giá trị cần được chỉ  đúng như trật tự trong câu lệnh.

Các từ khoá được sử dụng khi nạp dữ liệu
Từ khoá
Diễn giải
USERID
Username và mật khẩu tương ứng
CONTROL
Tên của control file
LOG
Tên của log file
BAD
File lưu trữ các bản ghi nạp hỏng (tên mặc định là controlfile.bad)
DATA
Tên file dữ liệu đầu vào
DISCARD
Bỏ qua file chứa các bản ghi đã được lưu trữ nhưng không được chọn
DISCARDMAX
Số lượng tối đa các discards được phép
SKIP
Số lượng bản ghi được bỏ qua, sử dụng đến trong trường hợp tiếp tục nạp dữ liệu khi gặp lỗi
LOAD
Số lượng các bản ghi tiếp tục được nạp sau khi SKIP
ERRORS
Số lượng tối đa các bản ghi lỗi
ROWS
Số dòng dữ liệu trong mảng được tạo trước khi nạp dữ liệu (đối với phương pháp nạp thông thường)
BINDSIZE
Dung lượng tối đa (tính theo đơn vị bytes) dùng để tạo mảng các dòng dữ liệu nạp vào database, đối với trường hợp nạp thông thường
DIRECT
SQL*Loader sử dụng phương pháp nạp trực tiếp nếu tham số này được đặt là TRUE.
PARFILE
Tên của các file chứa các tham số nạp dữ liệu
PARALLEL
Tham số chỉ dùng khi nạp dữ liệu trực tiếp. Chỉ số lượng luồng nạp trực tiếp có thể thực hiện đồng thời.
FILE
File chứa temporary segment sử dụng đến khi nạp trực tiếp
Các tham số còn có thể định nghĩa trong file điều khiển.
  

16.3.2.  Parameter file (tệp tham số)

Trong trường hợp thực hiện lệnh nạp dữ liệu với nhiều tham số tuỳ chọn khác nhau, khi này ta có thể gom các tham số tuỳ chọn này vào trong cùng một file tham số.
Tệp tham số có thể được sử dụng để chỉ định các  tham số cho quá trình load dữ liệu, sử dụng tệp tham số để lưu các thông số được sử dụng cho quá trình load. Tệp này sử dụng định dạng sau đây để  định nghĩa tham số:
<KEYWORD> = <VALUE>
Tham số PARFILE được dùng để xác định tên của file tham số.
Ví dụ:
SQLLDR PARFILE=example.par

Với nội dung của file tham số example.par là:

userid=scott/tiger
control=example.ctl
errors=9999
log=example.log
Lưu ý:
Trong ví dụ trên, example.ctl là tên của control file - sẽ được nhắc tới trong phần sau.
Các từ khoá sử dụng trong file tham số chính là các từ khoá dùng để nạp dữ liệu như đã nói ở trên.

16.3.3.  Control file (tệp điều khiển)

Tệp điều khiển bao gồm các thành phần sau:
§  Tên của tệp dữ liệu đầu vào sử dụng mệnh đề INFILE.
§  Sự hợp thành các bản ghi logic từ một bản ghi vật lí trong file dữ liệu đầu vào, sử dụng mệnh đề như CONCATENATECONTINUEIF.
§  Các trường chỉ định bao gồm vị trí, kiểu dữ liệu, delimiter sử dụng mệnh đề FIELDS.
§  Tên của bảng và phương pháp load dữ liệu, xác định dữ liệu có được load vào bảng trống hay chèn các bản ghi mới sau khi xoá các bản ghi đã tồn tại, hoặc gắn thêm các hàng vào bảng đã tồn tại dữ liệu, sử dụng mệnh đề INTO TABLE.
§  Các  bản ghi được bỏ qua cho mỗi bảng sử dụng mệnh đề CONTINUE_LOAD.
§  Điều kiện có thể được sử dụng cho việc lựa chọn các hàng được load sử dụng mệnh đề WHEN.   
§  Các cột được load
§  Quy tắc cho việc sinh ra các giá trị cột, sử dụng mệnh đề RECNUM, SYSDATE và áp dụng các hàm SQL
§  Các tham số load sử dụng  trong mệnh đề OPTIONS
§  Chỉ định các tham số lưu trữ cho phân đoạn temporary được tạo khi sử dụng parallel load.
§  Các comment (chú dẫn) sử dụng tiền tố “--“
§  Các tuỳ chọn cho direct load như: SINGLEROW (bảo trì các index trên hàng dựa vào hàng cơ sở) REENABLE (để thiết lập lại các constraint khi quá trình chạy kết thúc), SORTED_INDEXES (chỉ định dữ liệu được xắp sếp trước), UNRECOVERABLE (không sinh ra các thông tin redo log).

Chú ý:
§  Khởi tạo giá trị NOLOG cho bảng đang sử dụng từ khoá NOLOGGING tương đương với việc sử dụng tuỳ chọn RECOVERABLE trong tệp điều khiển.
§  Dữ liệu có thể được đặt chung vào trong tệp điều khiển bằng cách chỉ định tham số INFILE * và sử dụng từ khoá BEGINDATA  để đánh dấu phần bắt đầu của dữ liệu, nếu tuỳ chọn này được sử dụng thì tất cả các bản ghi đặt sau từ khoá BEGINDATA sẽ được biên dịch như là dữ liệu.

Một số từ khoá hay sử dụng trong Control file:
Từ khoá
Diễn giải
INFILE
Xác định tên file chứa dữ liệu nạp vào database, dấu * cho biết  dữ liệu sẽ được lấy ngay trong control file, phía sau của từ khoá BEGINDATA
BEGINDATA
Từ khoá xác định điểm bắt đầu chứa dữ liệu, sau từ khoá này là dữ liệu cần nạp vào database.
READBUFFERS
Yêu cầu sử dụng bộ nhớ đệm để nạp dữ liệu vào database, sử dụng trong phương pháp direct load.
BADFILE
Tên của các file lưu các dữ liệu không thể nạp được vào database do phát sinh lỗi trong quá trình nạp dữ liệu.
DISCARDFILE
Tên của file lưu các bản ghi bị bỏ qua không nạp vào database do không đúng với tiêu chuẩn nạp dữ liệu
CHARACTERSET
Tên tập ký tự sử dụng trong datafile
INSERT
Thêm mới 1 dòng dữ liệu trong database
APPEND
Chèn thêm một dòng dữ liệu vào cuối cùng của bảng
TRAILING NULLCOLS
Điền giá trị null vào cột. TRAILING NULLCOLS được sử dụng cùng với WHITESPACE
POSITION
Từ khoá dùng để xác định vị trí của dữ liệu cần nạp
CONSTANT
Đặt giá trị hằng số cho cột dữ liệu
RECNUM
Đếm số lượng dòng dữ liệu đã được nạp
SYSDATE
Trả về giá trị ngày giờ hiện thời
TERMINATED
Từ khoá xác định phân cách kết thúc
ENCLOSED  
Từ khoá dùng để xác định đường bao dữ liệu
Ví dụ: Nội dung của một control file
1. Dữ liệu được nạp trực tiếp
LOAD DATA
INFILE *
INTO TABLE dept
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(deptno, dname, loc)
BEGINDATA
12,RESEARCH,"SARATOGA"
10,"ACCOUNTING",CLEVELAND
11,"ART",SALEM
13,FINANCE,"BOSTON"
21,"SALES",PHILA.
22,"SALES",ROCHESTER
42,"INT'L","SAN FRAN"

Ví dụ ở trên, sử dụng dấu phẩy (,) để ngăn cách giữa các trường dữ liệu nạp vào database.

2. Dữ liệu cần nạp đặt trong file ‘ulcase2.dat’
LOAD DATA
INFILE 'ulcase2.dat'
INTO TABLE emp
 (empno         POSITION(01:04)   INTEGER  EXTERNAL,
 ename          POSITION(06:15)   CHAR,
 job            POSITION(17:25)   CHAR,
 mgr            POSITION(27:30)   INTEGER EXTERNAL,
 sal            POSITION(32:39)   DECIMAL  EXTERNAL,
 comm           POSITION(41:48)   DECIMAL  EXTERNAL,
 deptno         POSITION(50:51)   INTEGER  EXTERNAL)
           
Dữ liệu trong file ‘ulcase2.dat’ là:
7782 CLARK      MANAGER   7839 2572.50           10
7839 KING       PRESIDENT      5500.00           10
7934 MILLER     CLERK     7782  920.00           10
7566 JONES      MANAGER   7839 3123.75           20
7499 ALLEN      SALESMAN  7698 1600.00   300.00  30
7654 MARTIN     SALESMAN  7698 1312.50  1400.00  30

Ở ví dụ này, việc xác định các trường dữ liệu để nạp vào database dựa vào vị trí của cột dữ liệu trên mỗi dòng. Toán tử POSITION (Vị trí đầu: Vị trí cuối) sẽ thực hiện công việc này.

16.3.4.  Data file

File dữ liệu chứa các bản ghi được xử lý theo một định dạng đã định nghĩa trong control file.
Dữ liệu trong data file thường là các dữ liệu ở dạng text. Thông thường thì các dữ liệu này có được do việc export từ các database  khác loại như FoxPro, Access,...
Ví dụ data file: xem ví dụ phía trên

16.3.5.  Các thành phần của log file

Log file luôn được tạo ra và nếu quá trình load dữ liệu hoàn thành mà log file không được tạo ra thì đó là do user thiếu quyền hoặc khoong đủ không gian đĩa.
Log file bao gồm các thông tin sau:
§  Phần header: bao gồm thông tin về thời gian chạy, phiên bản của phần mềm.
§  Các thông tin toàn cục: tên của input file và output file, các tham số dòng lệnh.
§  Các thông tin bảng:  tên bảng, điều kiện load và phương pháp load.
§  Thông tin về các trường và cột.
§  Thông tin về tệp dữ liệu: chỉ ra các bản ghi bị từ chối và loại bỏ và lí do bị từ chối hay loại bỏ.
§  Thông tin load các bảng: số các hàng đã được load, số các hàng bị từ chối vì lỗi dữ liệu, số các hàng bị loại bỏ.
§  Thông tin tổng hợp: hiển thị dữ liệu sau: số lượng không gian được thiết lập cho mảng, thông tin thống kê cho tất cả các data file.
§  Thời gian bắt đầu và thời gian kết thúc quá trình load.

16.3.6.  Các file đầu ra khác

Bad file
Bad file chứa các bản ghi bị từ chối trong quá trình xử lý vì một trong các lí do sau:
§  Các  bản ghi đầu vào có lỗi. Ví dụ như định dạng sai, độ rộng của trường quá lớn.
§  Không thể chèn thêm các bản ghi vào table chẳng hạn như dữ liệu nạp vào không hợp lệ, các constraints bị vi phạm.

Discard file
Discard file chứa dữ liệu như định dạng của tệp dữ liệu đưa vào, nó chứa các bản ghi không thoả mãn điều kiện load.

16.3.7.  Các hướng dẫn  khi sử dụng load

Sử dụng các hướng dẫn sau đây khi dùng SQL* Loader để load dữ liệu giảm thiểu được lỗi và tăng hiệu năng trong quá trình load:
§  Sử dụng tệp tham số để rút bớt các tham số dòng lệnh.
§  Tách tệp điều khiển và tệp dữ liệu để cho phép sử dụng lại tệp điều khiển cho các session load khác nhau.
§  Thiết lập không gian lưu dữ liệu dựa vào kích thước của dữ liệu tránh việc thiết lập các extents lưu trữ tự động trong khi load.
§  Khi sử dụng direct load,các segment temporary được sử dụng sinh ra các index cho dữ liệu mới. Các index này được trộn với các index đã có của bảng vào lúc load. Bằng cách xếp dữ liệu đầu vào trong khoá của các index lớn  nhất có thể làm giảm không gian dùng cho việc sort dữ liệu.
§  Với parallel direct load  có thể chỉ định vị trí của các phân đoạn tạm thời được sử dụng cho việc insert dữ liệu. Đối với mỗi session load dữ liệu nên chỉ định các datafile khác nhau.

Các lỗi xảy ra khi load dữ liệu
Khi quá trình load dữ liệu kết thúc không bình thường, toàn bộ dữ liệu đã được load đến thời điểm kết thúc đó sẽ được commit. Sau khi hiệu chỉnh lỗi, quá trình load có thể thực hiện tiếp như sau để hoàn thành quá trình load:
§  Nếu đang load vào một bảng hay nhiều bảng có cùng số bản ghi được xử lý , sử dụng tham số SKIP để tiếp tục quá trình load.
§  Nếu nhiều bảng đã được load và số các bản ghi đã được xử lý là không như nhau đối với các bảng , sử dụng mệnh đề CONTINUE_LOAD trong tệp điều khiển chỉ định số bản ghi bị bỏ qua cho mỗi bảng
§  Kiểm tra các index được đánh dấu là Unusable . Hiện tượng này xảy ra khi index không nhất quán với bảng, xoá index có trạng thái như vậy tạo lại chúng khi load xong dữ liệu.

Giải quyết các lỗi khi load
§  Không đủ không gian để load dữ liệu : hiện tượng này xảy ra khi đĩa cứng bị đầy hay khi giá trị các extent cấp phát đến giá trị MAXEXTENTS
§  Hỏng Instance: restart lại instance và load lại dữ liệu.
§  Dữ liệu không ở trong trật tự chỉ định: dữ liệu đã được load xong index ở trong trạng thái unusable, xoá và tạo lại các index.
§  Trùng lặp giá trị trong primary key hay unique key: hiện tượng này không làm hỏng quá trình load song chúng có thể DISABLE các các constraint và index ở trạng thái UNUSABLE. Trong trường hợp các constraint bị lỗi, ta có thể sử dụng các bảng exception để bắt lỗi và sửa chúng. Trong trường hợp các unique index ở trạng thái UNUSABLE, cần tìm lỗi bằng cách tạo unique constraint trên cột làm index. Bắt các lỗi trên các bảng exception và sửa chúng.
§  BINSIZE quá nhỏ: sử dụng giá trị lớn hơn cho việc load dữ liệu.
§  Lỗi vì vượt quá giá trị discard được khởi tạo: hiện tượng này xảy ra khi số các bản ghi không hợp lệ vượt quá giá trị ERRORS hay DISCARDMAX được khởi tạo, nguyên nhân chung của hiện tượng này là sử dụng tệp dữ liệu đầu vào không đúng, kiểm tra và sửa lại tệp dữ liệu đầu vào.

16.4.TỔ CHỨC LẠI DỮ LIỆU BẰNG CÔNG CỤ EXPORT VÀ IMPORT

16.4.1.  Công cụ dịch chuyển dữ liệu

Export và Import là công cụ cho phép người quản trị Oracle Database có thể chuyển dữ liệu giữa hai Oracle database vào chính bên trong Oracle database giữa các tablespace khác nhau hay giữa các user khác nhau.

Hình vẽ 6.    Dịch chuyển dữ liệu
Công cụ Export
Công cụ Export có thể được sử dụng để tạo ra các bản copy logic của các đối tượng được định nghĩa và dữ liệu thành các tệp nhị phân. Export có thể ghi dữ liệu ra tệp trên đĩa hay trên băng từ.

Công cụ Import
Công cụ Import có thể đọc các tệp được tạo bằng công cụ Export, copy các đối tượng được định nghĩa và dữ liệu vào trong Oracle database. Công cụ import không thể đọc các text file hay các file được tạo trong bất kì đinh dạng nào khác.

Sử dụng công cụ Export và Import
Công cụ Export và Import có thể được sử dụng trong những trường hợp sau:
§  Tổ chức lại các bảng: dữ liệu của các bảng cần được chuyển từ tablespace này sang tablespace khác. Các bảng chứa nhiều hàng bị migration, một bảng có nhiều blocks có rất ít các hàng được chèn vào.
§  Chuyển dữ liệu từ user này sang user khác: điều này cần thiết khi một user cần được thay đổi. Một dữ liệu được export bởi một user có thể import vào một user khác.
§  Chuyển dữ liệu giữa các database: Các đối tượng xác định có thể được chuyển từ quá trình phát triển sang sản phẩm khi sử dụng export lấy phần thông tin cấu trúc và loại bỏ phần dữ  liệu. Export và Import còn được dùng để lấy dữ liệu từ một ứng dụng OLTP vào trong Oracle data Warehouse.
§  Chuyển dữ liệu giữa các Platform hay các phiên bản khác nhau của Oracle database.
§  Thực thi quá trình Logical backup: toàn bộ hay một vài đối tượng trong database có thể được export, các export file có thể được sử dụng như là một Logical backup.

16.4.2.  Các chế độ Export

Công cụ export cung cấp 3 kiểu export:
§  User
§  Table
§  Database
Hình vẽ 7.    Các chế độ export dữ liệu

Chế độ Table
Tất cả các user có thể sử dụng chế độ bảng để export các bảng thuộc về user đó, các user được cấp quyền có thể export bất cứ bảng thuộc về bất cứ một user nào trong database, sử dụng chế độ bảng để export:
§  Cấu trúc các bảng
§  Dữ liệu trong bảng
§  Tất cả các index của bảng( chỉ thực hiện được khi dùng user được phân quyền).
§  Tất cả các trigger trong bảng ( chỉ thực hiện được khi dùng user được phân quyền).
§  Các constraint trên bảng
§  Tất cả các quyền trên bảng

Chế độ export theo user
Chế độ export theo user sử dụng để export dữ liệu thuộc về user:
§  User có thể export các đối tượng do user đó sở hữu. Khi này các objects  thuộc về user đều được export ngoại trừ các indexes và triggers do user đó sở hữu nhưng lại được áp dụng cho table của một user khác. Hoặc các indexes và triggers trên table do user này sở hữu nhưng các triggers và indexes này lại do user khác sở hữu.
§  Các trigger và Index được tạo bởi các user khác nhưng trên bảng thuộc về user được export.
§  Các user không được cấp quyền chỉ có thể export được  các đối tượng thuộc về user đó.

Chế độ Full
Khi sử dụng chế độ full thì toàn bộ các đối tượng thuộc về database ngoại trừ các các đối tượng thuộc SYS sẽ được export. Chế độ này đòi hỏi quyền đặc biệt và không thể thực hiện với mọi user. Chú ý rằng trong ba chế độ export quyền của user được sủ dụng là role: EXP_FULL_DATABASE.

16.4.3.  Export dữ liệu trực tiếp và Export dữ liệu thông thường

Trong Oracle sử dụng hai phương pháp load khác nhau : conventional và direct load
Hình vẽ 8.    Các phương thức Export dữ liệu

Cách thông thường (Conventional load)
Conventional load là phương pháp mặc định được sử dụng bởi Oracle Loader  để định dạng dữ liệu và ghi dữ liệu vào trong database.
Conventional load sử dụng câu lệnh SQL để lấy dữ liệu trong table. Dữ liệu được đọc từ đĩa vào trong vùng đệm. Sau đó, các hàng được chuyển vào vùng đệm kiểm tra giá trị. Dữ liệu sau khi kiểm tra giá trị sẽ được chuyển vào các tệp export.

Cách trực tiếp (Direct path)
Direct path load lấy dữ liệu nhanh hơn so với phương pháp conventional path export.  Với phương pháp direct path load dữ liệu được đọc từ  đĩa vào trong vùng đệm sau đó các hàng được chuyển trực tiếp vào trong các export process. Vùng kiểm tra đánh giá bị bỏ qua do dữ liệu trong các block không được ghi nhận mang các hàng cùng với nó . Dữ liệu luôn sẵn sàng trong định dạng của các tệp export yêu cầu, nó tránh đựơc quá trình chuyển đổi định dạng dữ liệu. Dữ liệu được chuyển vào các export process và các process này ghi dữ liệu vào trong các export file.
Công cụ Import có thể sử dụng các export file được tạo bởi bất kì một trong hai phương pháp trên. Phương pháp export không ảnh hưởng đến thời gian của quá trình import.

16.5.CÔNG CỤ EXPORT

16.5.1.  Sử dụng công  cụ Export

Công cụ export có thể gọi theo chế độ:
§  Dòng lệnh
§  Chế độ tương tác
§  Chế độ graphic

Chế độ dòng lệnh (command line)
Cú pháp:
$exp [keyword=]{value|(value, value ...)}
[ [ [,] keyword=]{value|(value, value ...)} ] ...
Với:
keyword                      là từ khoá được sử dụng trong câu lệnh export.
value                            là giá trị được gán cho từ khoá.

Các tham số dòng lệnh sử dụng khi Import dữ liệu
Từ khoá
Mặc định
Diễn giải
ANALYZE
Y
Cho phép thực hiện lệnh ANALYZE đối với database trước khi import dữ liệu
BUFFER
Tuỳ theo hệ điều hành
Kích thước của bộ đệm sử dụng khi export. Kích thước buffer được xác định theo công thức:
buffer_size = rows_in_array * maximum_row_size
COMPRESS
Y
Giá trị là Y, khi import dữ liệu, kích thước của extent  khởi tạo được đặt bằng với kích thước của segment hiện thời.
CONSISTENT
N
Giá trị là Y,  tất cả các thao tác export chỉ được thực hiện trong một read-only transaction.
CONSTRAINTS
Y
Giá trị là Y,  các ràng buộc cũng được exported cùng với dữ liệu trong bảng.
DIRECT
N
Giá trị là Y,  export trực tiếp
FEEDBACK
0
Hiển thị mức độ export, số dòng dữ liệu được export, tại mỗi lần. Ví dụ: FEEDBACK=10, Công cụ export sẽ hiển thị tiến trình cho biết mỗi lần thực hiện sẽ export được 10 dòng dữ liệu
FILE
expdat.dmp
Tên file dữ liệu ra. Tệp dữ liệu có phần mở rộng là .dmp
FULL
N
Giá trị là Y,  export toàn bộ database. Để thực hiện được việc này, user cần được cấp quyền EXP_FULL_DATABASE
GRANTS
Y
Giá trị là Y,  export các đối tượng trong database cùng với cả các quyền đang được áp dụng trên đối tượng đó
HELP
N
Giá trị là Y,  hiển thị danh sách tham số và ý nghĩa tương ứng của chúng
INCTYPE

Các chế độ incremental export (Các chế độ này sẽ được nói cụ thể ở phần sau)
INDEXES
Y
Giá trị là Y,  export cả các index.
LOG

Tên file lưu trữ các thông báo khi export. Ví dụ:
Exp system/manager LOG=export.log
OWNER

Đưa ra danh sách các users sở hữu các đối tượng được export
PARFILE

Tên file chứa các tham số export
QUERY

Export dữ liệu thoả mãn một điều kiện nào đó.
Ví dụ: exp scott/tiger tables=emp query = \"where job=\'SALESMAN\' and sal\<1600\"
RECORD
Y
Ghi lại chế độ dữ liệu là incremental hay cumulative vào trong các bảng hệ thống: SYS.INCEXP, SYS.INCFILSYS.INCVID
RECORDLENGTH
Tuỳ theo hệ điều hành
Kích thước tính theo bytes của bản ghi được export
ROWS
Y
Cho biết có export từng dòng dữ liệu trong bảng hay không.
STATISTICS
ESTIMATE
Phân tích và thống kê số lượng các dữ liệu đã export. Có một số chế độ: ESTIMATE, COMPUTE, và NONE
TABLES

Liệt kê danh sách các bảng export. Ví dụ:
TABLES=(EMP#, DEPT, MYDATA)
TRANSPORT_TABLESPACE
N
Có export các transportable tablespace hay không
TABLESPACES

Khi tham số TRANSPORT_TABLESPACE = Y, TABLESPACES sẽ dùng để liệt kê danh sách tên các tablespace đã export
TRIGGERS
Y
Có export cả các trigger hay không?
USERID

Username và mật khẩu của user thực hiện export. Chúng được thể hiện theo khuôn dạng: username/password AS SYSDBA hay username/password@instance AS SYSDBA

Ví dụ:
1. Export trực tiếp bảng dữ liệu
$exp scott/tiger tables=(dept,emp) \
> file=emp.dmp log=exp.log compress=n \
> direct=y recordlength=32768

2. Export dữ liệu sử dụng file tham số
> exp system/manager parfile=params.dat
Nội dung của params.dat
FILE=dba.dmp
GRANTS=y
FULL=y
ROWS=y

16.5.2.  Giới thiệu một số chế độ export

Quá trình backup (sao lưu) dữ liệu cần được thường xuyên được thực hiện. Công việc Backup có thể được thực hiện theo định kỳ. Tuy vậy, với lần đầu tiên, ta vẫn phải thực hiện việc backup dữ liệu một cách đầy đủ. Tại các lần backup dữ liệu sau đó, dữ liệu trong database có thể có những biến đổi không nhiều so với dữ liệu của lần backup đầu tiên. Vì thế ta có các chế độ thực hiện backup dữ liệu khác nhau và có thể áp dụng các chế độ backup này tuỳ thuộc vào tình huống cụ thể.

Incremental Exports (chế độ tăng trưởng)
Chế độ incremental chỉ thực hiện backup đối với các bảng có sự thay đổi so với lần thực hiện backup gần đó nhất. Trong chế độ này, toàn bộ dữ liệu của bảng và cả định nghĩa các bảng cũng sẽ được exports không phân biệt các dòng dữ liệu có thay đổi hay không có thay đổi (miễn là bảng có thay đổi, thì sẽ export toàn bộ bảng). Chế độ incremental Exports là chế độ thường hay được thực hiện nhất trong số các chế độ export.
Ví dụ: Giả sử lần Export đầu tiên, ta đã thực hiện export toàn bộ thông tin về bảng. Khi này tại lần thứ hai, sử dụng chế độ incremental Export, sau khi bảng dữ liệu đã có sự thông tin ở một dòng nào đó. Tất cả các bảng dữ liệu có sự thay đổi thông tin và cả các indexes đi kèm với bảng đó sẽ được export.

Trong lần thứ ba, có thay đổi trong table 3 và table 4. Khi này Chế độ Incremental Export sẽ tiếp tục export dữ liệu như sau:

Hình vẽ 9.    Export ở chế độ Incremental

Cumulative Exports (Chế độ tích luỹ)
Chế độ cumulative export sẽ thực hiện backup đối với các bảng có sự thay đổi kể từ lần thực hiện backup trước đó ở chế độ cumulative hay complete Export. Chế độ cumulative export sẽ thực hiện nén tất cả các lần thực hiện backup ở chế độ incremental exports vào những file đơn riêng lẻ. Ta không cần phải lưu trữ các file backup ở chế độ incremental export vì khi thực hiện backup theo chế độ cumulative export các file backup ở trên sẽ bị ghi đè lên bằng một file mới tương ứng.
Ví dụ: Trong chế độ cumulative Export ở lần thứ tư, khi có sự thay đổi tại table 1 và table 6 thì tất cả các bảng có thay đổi từ lần export toàn bộ gần nhất sẽ được export. 
Hình vẽ 10.  Export ở chế độ Cumulative
Ta quan sát thấy dữ liệu trong table 4 tuy có được thực hiện backup ở lần thứ 2 nhưng vẫn tiếp tục được Backup.

Complete Exports (Chế độ toàn bộ)
Chế độ complete Export sẽ thiết lập việc backup toàn bộ dữ liệu có trong database.
Ví dụ: Trong lần 5, thực hiện backup dữ liệu ở chế độ toàn bộ.
Hình vẽ 11.  Export ở chế độ toàn bộ
Ta thấy ngay trong chế độ này, table 4 tuy không có thay đổi gì nhưng cũng vẫn bị export.

Ví dụ: thực hiện Export dữ liệu ở chế độ Incremental
> exp system/manager full=y inctype=incremental

16.5.3.  Các tablespaces trao đổi

Oracle cho phép quản trị viên database có thể chuyển một tablespace từ một database sang một database khác, thông qua đặc điểm transportable tablespace.
Để di chuyển hay sao chép một tập hợp các tablespaces, trước tiên ta cần đưa các tablespaces về trạng thái read-only, rổi sao chép các datafiles tương ứng với các tablespaces này, và sử dụng công cụ Export/Import để di chuyển các thông tin database  được lưu trữ trong data dictionary gọi là metadata (thông tin của các thông tin). Cả các datafiles và metadata được export sẽ được sao chép sang database đích. Tiếp theo, quản trị viên database cần import các metadata này vào database mới rồi thiết lập lại trạng thái cho các tablespace vừa được sao chép.
Một số từ khoá được sử dụng để thực hiện export các transportable tablespace metadata.
§  TRANSPORT_TABLESPACE
§  TABLESPACES

16.5.4.  Một số thông báo khi export: Warning, Error, và Completion Messages

Log File
Ta có thể lưu lại tất cả các thông báo (messages) do công cụ Export phát ra vào trong một log file, thông qua việc sử dụng tham số LOG. Công cụ Export sẽ ghi lại chi tiết các thông tin thành công và cả các thông tin lỗi xảy ra trong quá trình thực hiện export.

Warning Messages (thông báo cảnh báo)
Đối với các lỗi xảy ra không nghiêm trọng (nonfatal errors) tiện ích Export sẽ không dừng việc export dữ liệu ngay. Ví dụ, khi có một lỗi xảy ra trong quá trình exporting một table, export sẽ hiển thị các thông báo lỗi error message rồi bỏ qua table hiện tại để tiếp tục chuyển sang các table khác. Các lỗi không nghiêm trọng được gọi là các warnings (cảnh báo).
Export sẽ phát ra cảnh báo mỗi khi có lỗi không nghiêm trọng xảy ra.
Ví dụ, yêu cầu export một table không tồn tại, tiện ích Export sẽ đưa ra thông báo không có table tương ứng và tiếp tục thực hiện các table còn lại.
> exp scott/tiger tables=xxx,emp

Export: Release 8.1.6.0.0 - Production on Wed Oct 6 15:25:15 1999

(c) Copyright 1999 Oracle Corporation.  All rights reserved.

Connected to: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning and Java options
PL/SQL Release 8.1.6.0.0 - Production
Export done in WE8DEC character set and WE8DEC NCHAR character set

About to export specified tables via Conventional Path ...
EXP-00011: SCOTT.XXX does not exist
. . exporting table                            EMP         14 rows exported
Export terminated successfully with warnings.

Fatal Error Messages (thông báo lỗi nghiêm trọng)
Khi có các lỗi nghiêm trọng (fatal errors) xảy ra trong quá trình Export, công cụ sẽ ngừng session ngay lập tức. Thông thường, các lỗi này xảy ra do các lỗi hệ thống (internal problem) do thiếu tài nguyên, thiếu bộ nhớ... Ví dụ, khi chạy CATEXP.SQL, file script không chạy, công cụ Export sẽ phát sinh thông báo lỗi hệ thống (fatal error):
EXP-00024: Export views not installed, please notify your DBA

Completion Messages (Thông báo hoàn tất)
Khi Export đã hoàn tất và không có lỗi xảy ra, Export sẽ hiển thị thông báo “Export terminated successfully without warnings". Nếu có bất kỳ lỗi không nghiêm trọng nào xảy ra trong quá trình thực hiện, Export sẽ kết thúc với thông báo "Export terminated successfully with warnings". Khi có lỗi nghiêm trọng khiến hệ thống phải dừng, khi này hệ thống sẽ trả về thông báo "Export terminated unsuccessfully" .

16.6.CÔNG CỤ IMPORT

16.6.1.  Sử dụng công cụ Import

Công cụ import dùng để đưa dữ liệu từ các export file vào database
Hình vẽ 12.  Sử dụng công cụ Import để đưa dữ liệu vào database

Khi thực hiện Import dữ liệu, Users cần được được gán role IMP_FULL_DATABASE. Công cụ import có thể được thực hiện ở các chế độ sau:
Từ khoá
Diễn giải
TABLES  
Chế độ này cho phép thực hiện import các tables và partitions vào database.
FROMUSER  
Với chế độ này, user có thể import tất cả các objects do user đó sở hữu như tables, grants, indexes, và procedures.
FULL  
Chỉ có các users được gán IMP_FULL_DATABASE role mới có thể thực hiện import ở chế độ này. Khi này, user có thể import toàn bộ database
TRANSPORT_TABLESPACES
Cho phép user có quyền tương ứng có thể di chuyển và import tập hợp các tablespace từ database này sang database khác

Chế độ dòng lệnh
Cú pháp:
$imp [keyword=]{value|(value, value ...)}
[ [ [,] keyword=]{value|(value, value ...)} ] ...
Với:
keyword                      là từ khoá sử dụng
value                            là giá trị được gán cho từ khoá

Các tham số dòng lệnh
Từ khoá
Mặc định
Diễn giải
ANALYZE
Y
Cho phép thực hiện lệnh ANALYZE đối với database trước khi import dữ liệu
BUFFER
Tuỳ theo hệ điều hành
Kích thước của bộ đệm sử dụng khi import. Kích thước buffer được xác định theo công thức:
buffer_size = rows_in_array * maximum_row_size
COMMIT
N
Phát lần commit sau mỗi lần đưa dữ liệu vào database trong quá trình import. Với cách này, dữ liệu sẽ được đảm bảo đưa vào database, để đổi lại, thời gian import sẽ bị kéo dài hơn.
CONSTRAINTS
Y
Cho biết có import cả các ràng buộc vào database hay không
DATAFILES

Liệt kê danh sách các datafile sẽ được đưa vào database.
FEEDBACK
0
Hiển thị mức độ import, số dòng dữ liệu được import, tại mỗi lần. Ví dụ: FEEDBACK=10, Công cụ import sẽ hiển thị tiến trình cho biết mỗi lần thực hiện sẽ đưa được 10 dòng dữ liệu vào database
FILE
expdat.dmp
Tên file dữ liệu vào. Tệp dữ liệu có phần mở rộng là .dmp
FROMUSER

Import các objects vàocác schemas thuộc FROMUSER
FULL
N
Giá trị là Y,  import toàn bộ database. Để thực hiện được việc này, user cần được cấp quyền IMP_FULL_DATABASE
GRANTS
Y
Giá trị là Y,  import các đối tượng trong database cùng với cả các quyền đang được áp dụng trên đối tượng đó
HELP
N
Giá trị là Y,  hiển thị danh sách tham số và ý nghĩa tương ứng của chúng
IGNORE
N
Có bỏ qua các lỗi xảy ra trong quá trình import để tiếp tục import dữ liệu mới hay không.
INCTYPE

Các chế độ incremental Import
INDEXES
Y
Giá trị là Y,  import cả các index.
LOG

Tên file lưu trữ các thông báo khi import.
PARFILE

Tên file chứa các tham số export
RECORDLENGTH
Tuỳ theo hệ điều hành
Kích thước tính theo bytes của 01 bản ghi được import
ROWS
Y
Cho biết có import từng dòng dữ liệu trong bảng hay không.
SKIP_UNUSABLE_INDEXES
N
Cho biết có bỏ qua việc tạo các index và đặt nó về trạng thái Unusable trong quá trình Import hay không.
TABLES

Liệt kê danh sách các bảng import. Ví dụ:
imp system/manager TABLES=(jones.accts, scott.emp,scott.dept)
TRANSPORT_TABLESPACE
N
Có import các transportable tablespace hay không
TABLESPACES

Khi tham số TRANSPORT_TABLESPACE = Y, TABLESPACES sẽ dùng để liệt kê danh sách tên các tablespace đã import
TOUSER

Hiển thị danh sách các user sở hữu các objects sẽ được import.
USERID

Username và mật khẩu của user thực hiện export. Chúng được thể hiện theo khuôn dạng: username/password AS SYSDBA hay username/password@instance AS SYSDBA
Chú ý: Chỉ có một tham số FULL=Y hay OWNER=user hay TABLES=schema.table được chỉ định.
Ví dụ:
> imp system/manager parfile=params.dat
 
Nội dung của file params.dat:
FILE=blake.dmp
SHOW=n
IGNORE=n
GRANTS=y
ROWS=y
FROMUSER=blake
TOUSER=scott
TABLES=(unit,manager)

Thứ tự của quá trình import
Khi thực hiện import, các objects (đối tượng) sẽ lần lượt được đưa vào database theo thứ tự sau:
1.     Các định nghĩa về kiểu dữ liệu (Type definitions)
2.      Các định nghĩa các bảng (Table definitions)
  1. Dữ liệu trong các bảng (Table data)
  1. Các Index tương ứng với từng bảng (Table indexes)
  1. Các Integrity constraints, views, procedures và triggers
  1. Các đối tượng mở rộng khác như Bitmap, functional và domain indexes
Tính tuần tự này ngăn dữ liệu bị từ chối vì trật tự trên đó bảng được import. Trật tự này còn ngăn các trigger thực hiện hai lần trên cùng một dữ liệu. Tuy nhiên một số đối tượng như thủ tục có thể được kiểm tra khi import bởi vì chúng được import trước khi các đối tượng được tham chiếu. Kiểm tra các đối tượng với  STATUS=INVALID và compile lại chúng.

Import vào một bảng đã tồn tại
Khi import dữ liệu vào một bảng đã tồn tại, trật tự của import có thể còn tạo ra lỗi tham chiếu. Tình huống tương tự cũng xảy ra khi có constraints trên một bảng mà có tham chiếu tới chính nó.
Vì lý do như đã nói trên đây, cách tốt nhất là disable các tham chiếu bởi constraint khi import dữ liệu vào trong một bảng đã tồn tại. Các constraint có thể được enable lại sau khi import thành công.
Ta cũng có thể phân chia quá trình Import ra làm nhiều lần thay vì 1 lần để tránh việc check constraints mất nhiều thời gian.

Tablespace được sử dụng cho một đối tượng
Nếu một user có đủ quota cần thiết các bảng sẽ được import vào trong cùng một tablespace mà chúng đã được export. Tuy nhiên nếu tablespace không tồn tại hay user không đủ quota trên tablespace, import sẽ tạo bảng trên tablespace mặc định của user. Nếu user không truy xuất được tablespace mặc định, các bảng sẽ không được import.
Một phân đoạn LOB chỉ có thể được import vào cùng một tablespace từ đó chúng đã được export. Một bảng đang  chứa LOB sẽ không được tạo nếu như owner của các bảng không thể tạo các đối tượng trên tablespace ở đó các phân đoạn LOB đã được export.

Chú ý
Một bảng không chứa LOB có thể được chuyển từ một tablespace sang một tablespace  khác bằng cách sử dụng phương thức import.

Các hướng dẫn trong sử dụng export và import
Sử dụng các tệp tham số để lưu các tham số chung trong danh sách tham số.
§  Nếu có nhiều hoạt động update trên các  bảng đang được export  nên sử dụng tham số CONSISTENT=Y, nói chung nên chạy các quá trình export dữ liệu lớn khi có ít các hoạt động trong bảng được export, nên tạo các rollback segment lớn cho quá trình import.
§  Tuỳ chọn COMPRESS=Y sẽ sinh ra đoạn mã để tạo initial extent , initial extent này bằng tổng kích thước của tất cả các extent hiện đang được cấp phát cho một đối tượng. Nếu đối tượng có nhiều hàng được xoá hay extent cuối cùng có nhiều block không được sử dụng , thì không cần thiết phải cấp phát nhiều không gian cho đối tượng đó.
§  Cấp phát vùng đệm lớn nếu hệ điều hành và nguồn của hệ thống cho phép.

16.6.2.  Chuyển đổi character set

Chuyển đổi character set khi export
Phương pháp conventional export sẽ sử dụng character set chỉ định cho session của user.
Phương pháp direct path export chỉ sử dụng charater set của database, nếu character set của export session không giống như character set của database khi export được khởi tạo, export sẽ hiển thị một thông báo, cần chỉ định character set cho session và khởi động lại quá trình export.
Export file có chứa một cờ (flag) chỉ định character set được sử dụng.

Chuyển đổi character set khi Import
Import session và character set của database đích có thể khác với character set của database nguồn, trong tình huống này cần có sự chuyển đổi của các tập character set. Dữ liệu được chuyển đổi sang character set của user session trong quá trình import sau đó được chuyển thành database character set.
Trong quá trình chuyển đổi, bất cứ character set nào trong export file không tương đương với character set đích đều sẽ được thay thể bởi character set mặc định. Đó là character set được định nghĩa bởi database. Để chuyển đổi 100% thành công thì tập kí tự trong database đích phải là tập cha của tập kí tự trong tệp nguồn.


@ Trần Văn Bình - Founder of Oracle DBA AZ
#học oracle #oracle database #khóa học oracle online #khóa học oca #học oca ở đâu #oca là gì #oca oracle #BossData #OraAz #OracleDBAAz #OracleTutorial #Quản_trị_cơ_sở_dữ_liệu_Oracle #OracleDBA #OracleDatabaseAdministration

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master