thanhtt
15-04-07, 09:08 PM
Thực chất của vân đề là truy vấn dữ liệu từ nguồn ODBC sử dụng cơ chế Oracle Heterogeneous Service.
Bao gồm 05 bước sau:
Bước 1: Tạo một nguồn dữ liệu Windows ODBC dạng "System DSN"
Mở cửa sổ "ODBC Data Source Administrator tool" (Control Panel > Administrative Tools), chọn tab "System DSN" rồi nhấn bút "Add". Ở đây, giả sử, ta cần truy vấn dữ liệu trong một file Excel, các bạn có thể hoàn toàn thực hiện ví dụ này với một nguồn dữ liệu khác chẳng hạn như MS Access, SQL Server, MySQL ... Đặt tên của "Data Source" này là, ví dụ, DEMO_EXCEL rồi chỉ ra đường dẫn đến file này.
http://technology.amis.nl/blog/wp-content/images/hs_odbc.JPG
Bước 2. Cấu h́nh Oracle Hetrogeneous Service
Chuyển vào thư mục <OracleHome>\hs\admin\ và tạo một bản sao của file inithsodbc.ora, đổi tên file là, ví dụ, inithsdemo_excel.ora. Chú ư, tên file này là ǵ không quan trọng, chỉ có yêu cầu bắt buộc là phải bắt đầu với iniths. Mở file inithsdemo_excel, sửa giá trị của tham số HS_FDS_CONNECT_INFO để mang giá trị của ODBC Data Source mà ta vừa tạo, DEMO_EXCEL. Đối với trường hợp file Excel, ta cần khai báo giá trị của các tham số: "HS_AUTOREGISTER = TRUE" and "HS_DB_NAME = hsodbc". Kết quả ta cần phải có như sau:
Code: HS_FDS_CONNECT_INFO = "DEMO_EXCEL"
HS_FDS_TRACE_LEVEL = off
HS_AUTOREGISTER = TRUE
HS_DB_NAME = hsodbc
Bước 3.Cấu h́nh Oracle listener.
Chuyển vào thư mục <OracleHome>\Network\Admin\ và mở file listener.ora. Bổ sung khai báo thêm SID mới cho listener bằng cách bổ sung những ḍng sau trong mục khai báo SID_LIST. Tham số SID_NAME mang một phần tên của file mà ta vừa tạo ở bước 2 (file <OracleHome>\hs\admin\inithsdemo_excel.ora), bỏ đi các tiền tố "init" và phần mở rộng ".ora".
Code: (SID_DESC =
(SID_NAME = hsdemo_excel)
(ORACLE_HOME = C:\oracle\product\10.1.0\Dbase)
(PROGRAM = hsodbc)
)
Tiếp theo, ta khởi động lại listener để listener nhận diện và đăng kư SID mới. Bạn có thể vào Control Panel>Administrator tools>Services, t́m đến service của listener của Oracle và nhấn nút Restart. Hoặc, đơn giản và nhanh hơn, bạn mở cửa sổ Command, lần lượt gơ các lệnh sau: lsnrctl stop và lsnrctl start.
Sau bước này, trên máy chủ bây giờ coi như đă tồn tại một instance Oracle nữa với SID là hsdemo_excel.
Các bước tiếp theo là tương tự cách thức ta thường thực hiện để liên kết 2 Oracle instance bằng Database Link. Ở đây, ta tạo một Database Link từ instance "xịn" đến instance "Excel" giả lập. Do đó, trước hết ta phải tạo một connection đến instance "Excel" giả lập (bước 4) rồi tiếp theo là tạo Database Link cần thiết trong instance "xịn".
Bước 4. Tạo connection string đến Oracle instance "Excel" giả lập.
Ta chuyển vào thư mục <OracleHome>\Network\Admin\ mở file tnsnames.ora rồi bổ sung các ḍng sau:
Code: MY_EXCEL.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SID = hsdemo_excel)
)
(HS = OK)
)
Bạn chú ư giá trị tham số SID ta vừa khai báo chính là giá trị mà ta đă khai báo trong file listener ở bước 3.
Bước 5. Tạo Database Link và kiểm tra kết quả
Ta đăng nhập vào Oracle, rồi thực thi lệnh sau (giả sử user của bạn có đủ thẩm quyền để tạo Database Link):
Code: create database link my_excel_file using 'MY_EXCEL.WORLD';
Đến đây, bạn đă tạo xong database link có tên my_excel_file kết nối đến instance Oracle "Excel" giả lập hay đến file Excel.
Giả sử trong file Excel có một worksheet là countries, ta có thể truy vấn dữ liệu trong worksheet này bằng cấu lệnh SELECT thông thường sau:
Code: select * from "countries$"@my_excel_file;
Chúc mừng bạn đă hoàn thành việc truy vấn dữ liệu trong file Excel từ Oracle !!! http://www.vnoug.org/images/smiles/cheers.gif
Chú ư:
- Bạn cần thêm kư tự '$' sau tên worksheet để tạo thành tên table khi truy vấn dữ liệu.
- Nếu tên của bảng, columns, worksheet trong file Excel hay cơ sở dữ liệu Access th́ cần bao chúng bằng cặp dấu nháy kép """".
- Nếu dữ liệu trong Access hoặc Excel lớn hơn 255 kư tự, Oracle sẽ phiên dịch trương đó sang kiểu long và dẫn đến lỗi đứt kết nối khi ta dùng câu truy vấn dạng select * type.
- Nếu file Excel đang mở khi ta thực hiện truy vấn dữ liệu th́ ta sẽ gặp lỗi.
- Do ODBC driver cho Excel và Access thường có sẵn trong các phiên bản Window nên ở đây ta không cần cài đặt thêm ǵ cả, thậm chí không cần cài bộ MS Office trên máy chủ. Trong trường hợp kết nối đến các nguồn dữ liệu khác mà ODBC driver không có sẵn (ví dụ như MySQL chẳng hạn) th́ ta cần phải tải các ODBC driver tương ứng về cài thêm.
(Tổng hợp từ AMIS Technology, link: http://technology.amis.nl/blog/?p=1303)
Bao gồm 05 bước sau:
Bước 1: Tạo một nguồn dữ liệu Windows ODBC dạng "System DSN"
Mở cửa sổ "ODBC Data Source Administrator tool" (Control Panel > Administrative Tools), chọn tab "System DSN" rồi nhấn bút "Add". Ở đây, giả sử, ta cần truy vấn dữ liệu trong một file Excel, các bạn có thể hoàn toàn thực hiện ví dụ này với một nguồn dữ liệu khác chẳng hạn như MS Access, SQL Server, MySQL ... Đặt tên của "Data Source" này là, ví dụ, DEMO_EXCEL rồi chỉ ra đường dẫn đến file này.
http://technology.amis.nl/blog/wp-content/images/hs_odbc.JPG
Bước 2. Cấu h́nh Oracle Hetrogeneous Service
Chuyển vào thư mục <OracleHome>\hs\admin\ và tạo một bản sao của file inithsodbc.ora, đổi tên file là, ví dụ, inithsdemo_excel.ora. Chú ư, tên file này là ǵ không quan trọng, chỉ có yêu cầu bắt buộc là phải bắt đầu với iniths. Mở file inithsdemo_excel, sửa giá trị của tham số HS_FDS_CONNECT_INFO để mang giá trị của ODBC Data Source mà ta vừa tạo, DEMO_EXCEL. Đối với trường hợp file Excel, ta cần khai báo giá trị của các tham số: "HS_AUTOREGISTER = TRUE" and "HS_DB_NAME = hsodbc". Kết quả ta cần phải có như sau:
Code: HS_FDS_CONNECT_INFO = "DEMO_EXCEL"
HS_FDS_TRACE_LEVEL = off
HS_AUTOREGISTER = TRUE
HS_DB_NAME = hsodbc
Bước 3.Cấu h́nh Oracle listener.
Chuyển vào thư mục <OracleHome>\Network\Admin\ và mở file listener.ora. Bổ sung khai báo thêm SID mới cho listener bằng cách bổ sung những ḍng sau trong mục khai báo SID_LIST. Tham số SID_NAME mang một phần tên của file mà ta vừa tạo ở bước 2 (file <OracleHome>\hs\admin\inithsdemo_excel.ora), bỏ đi các tiền tố "init" và phần mở rộng ".ora".
Code: (SID_DESC =
(SID_NAME = hsdemo_excel)
(ORACLE_HOME = C:\oracle\product\10.1.0\Dbase)
(PROGRAM = hsodbc)
)
Tiếp theo, ta khởi động lại listener để listener nhận diện và đăng kư SID mới. Bạn có thể vào Control Panel>Administrator tools>Services, t́m đến service của listener của Oracle và nhấn nút Restart. Hoặc, đơn giản và nhanh hơn, bạn mở cửa sổ Command, lần lượt gơ các lệnh sau: lsnrctl stop và lsnrctl start.
Sau bước này, trên máy chủ bây giờ coi như đă tồn tại một instance Oracle nữa với SID là hsdemo_excel.
Các bước tiếp theo là tương tự cách thức ta thường thực hiện để liên kết 2 Oracle instance bằng Database Link. Ở đây, ta tạo một Database Link từ instance "xịn" đến instance "Excel" giả lập. Do đó, trước hết ta phải tạo một connection đến instance "Excel" giả lập (bước 4) rồi tiếp theo là tạo Database Link cần thiết trong instance "xịn".
Bước 4. Tạo connection string đến Oracle instance "Excel" giả lập.
Ta chuyển vào thư mục <OracleHome>\Network\Admin\ mở file tnsnames.ora rồi bổ sung các ḍng sau:
Code: MY_EXCEL.WORLD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SID = hsdemo_excel)
)
(HS = OK)
)
Bạn chú ư giá trị tham số SID ta vừa khai báo chính là giá trị mà ta đă khai báo trong file listener ở bước 3.
Bước 5. Tạo Database Link và kiểm tra kết quả
Ta đăng nhập vào Oracle, rồi thực thi lệnh sau (giả sử user của bạn có đủ thẩm quyền để tạo Database Link):
Code: create database link my_excel_file using 'MY_EXCEL.WORLD';
Đến đây, bạn đă tạo xong database link có tên my_excel_file kết nối đến instance Oracle "Excel" giả lập hay đến file Excel.
Giả sử trong file Excel có một worksheet là countries, ta có thể truy vấn dữ liệu trong worksheet này bằng cấu lệnh SELECT thông thường sau:
Code: select * from "countries$"@my_excel_file;
Chúc mừng bạn đă hoàn thành việc truy vấn dữ liệu trong file Excel từ Oracle !!! http://www.vnoug.org/images/smiles/cheers.gif
Chú ư:
- Bạn cần thêm kư tự '$' sau tên worksheet để tạo thành tên table khi truy vấn dữ liệu.
- Nếu tên của bảng, columns, worksheet trong file Excel hay cơ sở dữ liệu Access th́ cần bao chúng bằng cặp dấu nháy kép """".
- Nếu dữ liệu trong Access hoặc Excel lớn hơn 255 kư tự, Oracle sẽ phiên dịch trương đó sang kiểu long và dẫn đến lỗi đứt kết nối khi ta dùng câu truy vấn dạng select * type.
- Nếu file Excel đang mở khi ta thực hiện truy vấn dữ liệu th́ ta sẽ gặp lỗi.
- Do ODBC driver cho Excel và Access thường có sẵn trong các phiên bản Window nên ở đây ta không cần cài đặt thêm ǵ cả, thậm chí không cần cài bộ MS Office trên máy chủ. Trong trường hợp kết nối đến các nguồn dữ liệu khác mà ODBC driver không có sẵn (ví dụ như MySQL chẳng hạn) th́ ta cần phải tải các ODBC driver tương ứng về cài thêm.
(Tổng hợp từ AMIS Technology, link: http://technology.amis.nl/blog/?p=1303)