2012-01-31 18 views
7
CREATE TABLE LOG_FILES (
     LOG_DTM VARCHAR(18), 
    LOG_TXT VARCHAR(300) 
    ) 
ORGANIZATION EXTERNAL(
    TYPE ORACLE_LOADER 
    DEFAULT DIRECTORY LOG_DIR 
    ACCESS PARAMETERS(
     RECORDS DELIMITED BY NEWLINE 
     FIELDS(
     LOG_DTM position(1:18), 
     LOG_TXT position(19:300) 
    ) 
    ) 
    LOCATION('logadm')) 
) 
REJECT LIMIT UNLIMITED 
/

LOG_DIR là một thư mục oracle trỏ đến /u/logs/Oracle bảng bên ngoài - Xác định tên tập tin năng động

Vấn đề mặc dù là nội dung của /u/logs/ trông như thế này

logadm_12012012.log 
logadm_13012012.log 
logadm_14012012.log 
logadm_15012012.log 

Có cách nào tôi có thể chỉ định vị trí của tệp một cách động? tức là mỗi khi tôi chạy Select * from LOG_FILES, nó sẽ sử dụng tệp nhật ký trong ngày. (ví dụ: log_adm_DDMMYYYYY).

Tôi biết tôi có thể sử dụng alter table log_files location ('logadm_15012012.log') nhưng tôi không muốn phải đưa ra lệnh thay đổi.

Bất kỳ khả năng nào khác?

Cảm ơn

Trả lời

6

Thật đáng tiếc khi bạn đang chạy 10g. Vào ngày 11g, chúng ta có thể kết hợp một tập lệnh tiền xử lý - một kịch bản lệnh shell - với một bảng bên ngoài. Trong trường hợp của bạn, bạn có thể chạy một kịch bản mà sẽ tìm ra tập tin mới nhất và sau đó phát hành một lệnh sao chép. Một cái gì đó như:

cp logadm_15012012.log logadm 

Adrian Billington đã viết blog về this feature here. Thành thật mà nói, bài viết của anh ấy hữu ích hơn the official docs.

Nhưng khi bạn đang trên 10g tất cả những gì bạn có thể làm là chạy câu lệnh ALTER TABLE hoặc sử dụng công việc đã lên lịch (cron hoặc bất kỳ thứ gì) để đồng bộ hóa tệp mới với tên chung.

+0

Cảm ơn tôi đã cập nhật một trong các thủ tục được lưu trữ (sử dụng bảng) để cập nhật tên tệp vì nó cũng chạy mỗi ngày. – ziggy

Các vấn đề liên quan