2017-05-10 1 views
1

Ich möchte die vollständige Oracle-Datenbank jeden Tag automatisch exportieren. ich wissen, um es zu exportieren, verwenden wir die commande Gebrüll:Export-Datenbank Oracle PL/SQL

exp userid=user/pass full=yes file='expdat.dmp' log='file.log' 

, aber ich möchte wissen, wie es automatisch zu tun. Und gibt es eine Möglichkeit, es mit pl/SQL zu tun?

[EDIT] Ich erstellte eine .bat-Datei, die den folgenden Befehl enthält. und i erstellt dbms_scheduler Job, wie folgend:

BEGIN 
dbms_scheduler.create_credential(
     credential_name => 'c', 
     username   => 'user', 
     password   => 'password'); 

    SYS.DBMS_SCHEDULER.CREATE_JOB(job_name => 'ex_job_1', 
     job_type => 'EXECUTABLE', 
     job_action => 'C:\WINDOWS\system32\cmd.exe', 
     job_class => 'DEFAULT_JOB_CLASS', 
     comments => 'Job to call batch script on Windows', 
     auto_drop => FALSE, 
     number_of_arguments => 3, 
     enabled => FALSE, 
     credential_name=>'c' 
     ); 

    SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name => 'ex_job_1', argument_position => 1, argument_value => '/q'); 
    SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name => 'ex_job_1', argument_position => 2, argument_value => '/c'); 
    SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(job_name => 'ex_job_1', argument_position => 3, argument_value => '"C:\Backup_folder\export_database.bat"'); 
    SYS.DBMS_SCHEDULER.ENABLE('ex_job_1'); 

DBMS_SCHEDULER.RUN_JOB('ex_job_1'); 


    END; 

und es gibt mir die folgenden Fehler:

Error Report - 
ORA-06550: Line 2, column 17: 
PLS-00302: The 'CREATE_CREDENTIAL' component must be declared 
ORA-06550: Line 2, column 2: 
PL/SQL: Statement ignored 
ORA-06550: Line 7, column 5: 
PLS-00306: number or wrong argument types in call to 'CREATE_JOB' 
ORA-06550: Line 7, column 5: 
PL/SQL: Statement ignored 
06550. 00000 - "line% s, column% s: \ n% s" 
* Cause: Usually a PL/SQL compilation error. 
*Action: 

Ich bin fest, was soll ich tun?

PS: Ein Schema-Export könnte genug für das, was ich brauche.

+0

DBMS_SCHEDULER, um einen Job zu planen. Sie können Host/OS-Jobs aufrufen. Ihr Problem wird den Benutzernamen/das Passwort verbergen, wenn Sie ein Skript aufrufen, um das Exp zu tun. – TenG

+0

Warum möchten Sie jeden Tag die gesamte Datenbank exportieren? – APC

+0

Verwenden Sie ['RMAN'] (https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmquick.htm#BRADV89346), um eine vollständige Sicherung zu erstellen. – MT0

Antwort

0

ich den täglichen Export der vollständigen Datenbank zu tun verwaltet mit dbms_scheduler und dbms_datapump mit dem folgenden Code:

begin 
    dbms_scheduler.create_schedule(
     schedule_name => 'daily_back', 
     repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN;BYHOUR=8;BYMINUTE=0;BYSECOND=0', 
     start_date => SYSTIMESTAMP 
); 

    dbms_scheduler.create_program 
    ( program_name => 'backup_database', 
     program_type => 'PLSQL_BLOCK', 
     program_action => 'DECLARE 
          handle NUMBER; 
          nom_job varchar(25) := to_char(SYSDATE,''DD-MM-YYYY_HH24-MI-SS''); 
          nom_dump varchar(35) := ''EXPORT_''|| nom_job || ''.DMP''; 
          nom_log varchar(35) := ''EXPORT_''|| nom_job || ''.LOG''; 
          BEGIN 
          execute immediate ''create or replace directory '' || ''BACKUP_FOLDER'' || 
              '' as '''''' || ''C:\BACKUP_FOLDER\BACKUP'' || ''''''''; 
          handle := SYS.DBMS_DATAPUMP.OPEN(operation => ''EXPORT'',job_mode => ''FULL'',remote_link => NULL,job_name => nom_job,version=> ''10.0.0''); 
          SYS.DBMS_DATAPUMP.ADD_FILE(handle=> handle,filename => nom_dump,directory => ''BACKUP_FOLDER'',filetype => 1); 
          SYS.DBMS_DATAPUMP.ADD_FILE(handle=> handle,filename=> nom_log,directory => ''BACKUP_FOLDER'',filetype => 3); 
          SYS.DBMS_DATAPUMP.START_JOB(handle => handle,skip_current => 0,abort_step => 0); 
          SYS.DBMS_DATAPUMP.DETACH(handle=> handle); END;', 
     enabled  => TRUE 
    ); 

    dbms_scheduler.create_job (
    job_name=>'daily_backup', 
    program_name =>'backup_database', 
    schedule_name=> 'daily_back', 
    enabled  => true 
); 

end; 

ich hoffe, das jemand in der Zukunft helfen würde.

Verwandte Themen