Oracle 创建要在导出CSV的计划上运行的作业
我对oracle db真的很陌生,有谁能帮助我或建议我该怎么做,我需要每天生成一个csv文件,我已经创建了这样一个脚本,但不知道如何使用此脚本创建作业Oracle 创建要在导出CSV的计划上运行的作业,oracle,jobs,Oracle,Jobs,我对oracle db真的很陌生,有谁能帮助我或建议我该怎么做,我需要每天生成一个csv文件,我已经创建了这样一个脚本,但不知道如何使用此脚本创建作业 SET markup csv on SET VERIFY OFF set feedback off set termout off set echo off Column ReportDate New_Value XRptDate Select To_char(sysdate-1,'yyyymmdd') ReportDat From Dual;
SET markup csv on
SET VERIFY OFF
set feedback off
set termout off
set echo off
Column ReportDate New_Value XRptDate
Select To_char(sysdate-1,'yyyymmdd') ReportDat From Dual;
Spool D:\test\REPORTSYS_HDR_&xRptDate..csv
SELECT * FROM REPORTSYS_HDR_VW;
Spool Off
您可以在有关软件包的文档中阅读有关创建作业的信息。您需要阅读有关过程DBMS_SCHEDULER.CREATE_JOB的内容,我认为您可以在那里找到所需的内容。您可以在有关包的文档中阅读有关创建JOB的内容。您需要阅读有关过程DBMS_调度程序的内容。创建_作业,我想您可以在那里找到所需的内容。您可能希望使用的一个选项是DBMS_调度程序。如果您使用的是12c以后的版本,则可能会使用新选项EXTERNAL_SCRIPT。您还可以选择创建SQL_脚本类型的作业 让我向您展示一个外部脚本的示例 我有两个假设,因为你没有明确说明
- 您的数据库正在Windows上运行
- 您可以通过具有在DBMS_调度程序和DBMS_凭据中创建或管理对象所需权限的用户访问数据库
begin
DBMS_CREDENTIAL.create_credential(
credential_name => 'NAME_WIN_CREDENTIAL',
username => 'youruser',
password => 'password',
windows_domain => 'yourwindowsdomain');
end;
/
2.创建作业以使用类型为EXTERNAL_SCRIPT的凭据
declare
v_job varchar2(80) := 'YOUR_JOB_NAME';
v_counter pls_integer;
BEGIN
select count(*) into v_counter from dba_scheduler_jobs where job_name = v_job;
if v_counter > 0
then
dbms_scheduler.drop_job ( job_name => v_job , force => true );
end if;
DBMS_SCHEDULER.create_job
(
job_name => v_job,
job_type => 'EXTERNAL_SCRIPT',
job_action => 'D:\test\REPORTSYS_HDR.cmd',
credential_name => 'NAME_WIN_CREDENTIAL',
start_date => '24-JUL-20 08.15.00 AM Europe/Warsaw',
repeat_interval => 'FREQ=DAILY;' -- change the frequency to your needs,
enabled => TRUE,
auto_drop => FALSE -- avoid the job to be dropped after finish
);
END;
/
3.将SQL脚本包含到名为D:\test\REPORTSYS\u HDR.cmd的新cmd程序中,该程序可由新作业触发
%ORACLE_HOME%\bin\sqlplus -S youruser/yourpassword@yourtns @D:\test\REPORTSYS_HDR.sql
您可能希望使用的一个选项是DBMS\u调度程序。如果您使用的是12c以后的版本,则可能会使用新选项EXTERNAL_SCRIPT。您还可以选择创建SQL_脚本类型的作业 让我向您展示一个外部脚本的示例 我有两个假设,因为你没有明确说明
- 您的数据库正在Windows上运行
- 您可以通过具有在DBMS_调度程序和DBMS_凭据中创建或管理对象所需权限的用户访问数据库
begin
DBMS_CREDENTIAL.create_credential(
credential_name => 'NAME_WIN_CREDENTIAL',
username => 'youruser',
password => 'password',
windows_domain => 'yourwindowsdomain');
end;
/
2.创建作业以使用类型为EXTERNAL_SCRIPT的凭据
declare
v_job varchar2(80) := 'YOUR_JOB_NAME';
v_counter pls_integer;
BEGIN
select count(*) into v_counter from dba_scheduler_jobs where job_name = v_job;
if v_counter > 0
then
dbms_scheduler.drop_job ( job_name => v_job , force => true );
end if;
DBMS_SCHEDULER.create_job
(
job_name => v_job,
job_type => 'EXTERNAL_SCRIPT',
job_action => 'D:\test\REPORTSYS_HDR.cmd',
credential_name => 'NAME_WIN_CREDENTIAL',
start_date => '24-JUL-20 08.15.00 AM Europe/Warsaw',
repeat_interval => 'FREQ=DAILY;' -- change the frequency to your needs,
enabled => TRUE,
auto_drop => FALSE -- avoid the job to be dropped after finish
);
END;
/
3.将SQL脚本包含到名为D:\test\REPORTSYS\u HDR.cmd的新cmd程序中,该程序可由新作业触发
%ORACLE_HOME%\bin\sqlplus -S youruser/yourpassword@yourtns @D:\test\REPORTSYS_HDR.sql
一个非常好的选择是使用Oracle data sync,它将帮助您在数据库中上载csv文件,并帮助安排作业。一个非常好的选择是使用Oracle data sync,它将帮助您在数据库中上载csv文件,并帮助安排作业。这是一个很好的示例。数据库作业从其本地D:\test路径调用脚本-对吗?如果不可能,那么运行cmd的简单Windows调度程序作业可能是一种替代方法。它不需要访问DB服务器文件系统。@oratom,有几种选择。我试图在oracle中为oracle脚本提供一个解决方案。也许我有偏见,因为我一直在使用DBMS_调度程序的API构建日历,运行外部_脚本和SQL_脚本作业类型。因此,我可以用依赖项和步骤构建链,以便在没有任何第三方软件的情况下运行外部程序:)这是一个很好的例子。数据库作业从其本地D:\test路径调用脚本-对吗?如果不可能,那么运行cmd的简单Windows调度程序作业可能是一种替代方法。它不需要访问DB服务器文件系统。@oratom,有几种选择。我试图在oracle中为oracle脚本提供一个解决方案。也许我有偏见,因为我一直在使用DBMS_调度程序的API构建日历,运行外部_脚本和SQL_脚本作业类型。因此,我可以构建带有依赖项和步骤的链,以便在没有任何第三方软件的情况下运行外部程序:)