2012-01-31 25 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 jest katalog Oracle, który wskazuje na /u/logs/Oracle Tabele zewnętrzne - Określanie dynamicznej pliku

Problem jest jednak, że zawartość /u/logs/ wygląda to

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

Czy istnieje sposób czy dynamicznie określa lokalizację pliku? tj. za każdym razem, gdy uruchamiam Select * from LOG_FILES, powinien używać pliku dziennika danego dnia. (na przykład log_adm_DDMMRRRRR).

Wiem, że mogę używać alter table log_files location ('logadm_15012012.log'), ale nie chciałbym wydać polecenia alter.

Jakieś inne możliwości?

Dzięki

Odpowiedz

6

Szkoda, że ​​masz 10g. W wersji 11g możemy powiązać skrypt preprocesora - skrypt powłoki - z zewnętrzną tabelą. W twoim przypadku możesz uruchomić skrypt, który wyłapie najnowszy plik, a następnie wyda polecenie kopiowania. Coś jak:

cp logadm_15012012.log logadm 

Adrian Billington został blogu o this feature here. Szczerze mówiąc jego zapis jest bardziej pomocny niż the official docs.

Ale jak na 10g, wszystko, co możesz zrobić, to uruchomić instrukcję ALTER TABLE lub użyć zaplanowanego zadania (cron lub cokolwiek innego), aby zsynchronizować nowy plik z nazwą ogólną.

+0

Dzięki zaktualizowałem jedną z przechowywanych procedur (która korzysta z tabeli), aby zaktualizować nazwę pliku, ponieważ działa również codziennie. – ziggy