16.1.GIỚI THIỆU CHUNG
16.1.1. Tổng
quan việc nạp 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
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.
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
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
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.
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
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
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ư CONCATENATE
và CONTINUEIF.
§ 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:
Ví
dụ: Nội dung của một control file
1.
Dữ liệu được nạp trực tiếp
LOAD
DATA
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
Dữ liệu trong file
‘ulcase2.dat’ là:
Ở 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.
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
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
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
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
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).
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.
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):
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
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)
- Dữ liệu trong
các bảng (Table data)
- Các Index
tương ứng với từng bảng (Table indexes)
- Các Integrity
constraints, views, procedures và triggers
- 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.
Website không bao giờ chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn muốn tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ kinh nghiệm, thủ tục, quy trình, bí kíp thực chiến mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin1_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
HỌC ORACLE DATABASE CƠ BẢN TỪ A-Z - BÀI 16: NẠP VÀ TỔ CHỨC LƯU TRỮ DỮ LIỆU, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty