AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[jobs](dba)

Martin Hope
Huskie69
Asked: 2022-04-27 01:01:06 +0800 CST

Oracle 作业调度问题

  • 1

我有一个在 Oracle 19c 上刷新物化视图刷新组的工作。我想每天午夜刷新组 - trunc(sysdate)?这项工作是使用以下 PL/SQL 完成的:

  BEGIN
  DBMS_REFRESH.MAKE (
        name => 'REFG_1',
        list => '', 
        next_date => trunc(sysdate), 
        interval => 'SYSDATE + 1',
        implicit_destroy => FALSE, 
        rollback_seg => '',
        push_deferred_rpc => TRUE, 
        refresh_after_errors => FALSE);
  END;
  /

MV每天都在更新。但是,它们在上午 11:26 刷新(这与我最初创建该作业的时间一致)。

如何创建此作业以确保它在每晚午夜刷新?

oracle jobs
  • 2 个回答
  • 41 Views
Martin Hope
Mikhail Aksenov
Asked: 2021-01-22 04:36:03 +0800 CST

为什么 dbms_job 的工作被破坏

  • 1

我有使用 dbms_job 包的 Oracle 工作。我看到它变坏了:

Select job,what,BROKEN from dba_jobs; 
-------- ------------ -----------
1   statspack.snap; Y

我想知道它坏的原因

计划作业的 ASAIK 我们有 dba_scheduler_job_log 视图,我们可以在其中看到失败原因,但是 dbms_job 作业呢?

oracle jobs
  • 1 个回答
  • 853 Views
Martin Hope
Andrew Hicks
Asked: 2020-09-26 14:09:42 +0800 CST

为什么 SQL Developer 中的计划作业会失败?

  • -1

我正在尝试在 Oracle SQL Developer 中创建一个每月运行一次的计划作业,并且我正在测试 Scheduler/Jobs 功能,我在其中创建了一个简单的 SQL 查询来测试执行此操作的能力。我有一个名为“TEST123”的简单表,当我执行“SELECT * FROM TEST123;”时,我可以看到它有效。

在 SQL Developer 中,我有一个名为“TEST1”的作业,它有一个 PL/SQL 块 =“DROP TABLE TEST123;” 立即运行(尽管我也测试过在特定时间运行)。

在我看到我仍然可以从此测试表中进行选择并且作业名称的状态为“FAILED”之后。我将所有其他设置保留为默认设置。我在这里想念什么?为什么它失败了,有没有办法解决它?

来自作业向导的 SQL:

BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
            job_name => '"TEST1"',
            job_type => 'PLSQL_BLOCK',
            job_action => 'DROP TABLE MKTRD.TEST123;',
            number_of_arguments => 0,
            start_date => NULL,
            repeat_interval => NULL,
            end_date => NULL,
            enabled => FALSE,
            auto_drop => FALSE,
            comments => '');

    DBMS_SCHEDULER.SET_ATTRIBUTE( 
             name => '"TEST1"', 
             attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
  
    DBMS_SCHEDULER.enable(
             name => '"TEST1"');
END;

作业日志中的错误:

 "ORA-06550: line 1, column 757:
PLS-00103: Encountered the symbol "DROP" when expecting one of the following:

   ( begin case declare exit for goto if loop mod null pragma
   raise return select update while with <an identifier>
   <a double-quoted delimited-identifier> <a bind variable> <<
   continue close current delete fetch lock insert open rollback
   savepoint set sql execute commit forall merge pipe purge
   json_exists json_value json_query json_object json_array
The symbol "lock was inserted before "DROP" to continue.
ORA-06550: line 1, column 781:
PLS-00103: Encountered the symbol ";" when expecting one of the following:

   . , @ in <an identifier>
   <a double-quoted delimited-identifier> partition subpartition
ORA-06550: line 1, column 856:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

   end not pragma final instantiable order overriding static
   member constructor map
"

更新:如果我使用 PLSQL Block 语法

BEGIN
  DROP TABLE TEST123;
END

我仍然收到以下错误:

"ORA-06550: line 2, column 3:
PLS-00103: Encountered the symbol "DROP" when expecting one of the following:

   ( begin case declare exit for goto if loop mod null pragma
   raise return select update while with <an identifier>
   <a double-quoted delimited-identifier> <a bind variable> <<
   continue close current delete fetch lock insert open rollback
   savepoint set sql execute commit forall merge pipe purge
   json_exists json_value json_query json_object json_array
The symbol "lock was inserted before "DROP" to continue.
ORA-06550: line 2, column 27:
PLS-00103: Encountered the symbol ";" when expecting one of the following:

   . , @ in <an identifier>
   <a double-quoted delimited-identifier> partition subpartition
"
oracle jobs
  • 2 个回答
  • 554 Views
Martin Hope
ellie-lumen
Asked: 2020-08-21 10:24:25 +0800 CST

使用 DBMS_SCHEDULER 调度过程。PLS-00103:在预期以下情况之一时遇到符号“NULL”:;

  • 1

我无法安排要运行的作业。

我制作了一个编写 CSV 文件的程序,当我执行它时它就可以工作。

然后我试着做一个工作来安排它:

BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name => 'AUTOMATE_CSV_EXPORT',
    job_type => 'STORED_PROCEDURE',
    job_action => 'EXPORT_ALL_LYS_FOR_TABLEAU',
    number_of_arguments => 0,
    start_date => '20-AUG-20 2.05.00PM',
    repeat_interval => 'FREQ=WEEKLY; BYDAY=FRI; BYHOUR=23;',
    end_date => NULL,
    enabled => FALSE,
    auto_drop => FALSE,
    comments => 'hello i am a comment');

  DBMS_SCHEDULER.SET_ATTRIBUTE( 
    name => 'AUTOMATE_CSV_EXPORT', 
    attribute => 'logging_level', 
    value => DBMS_SCHEDULER.LOGGING_RUNS);
  
  DBMS_SCHEDULER.enable(
    name => 'AUTOMATE_CSV_EXPORT');
END;
/

它没有在预定的时间运行,但是当我像这样运行它时它确实运行了:

在此处输入图像描述

我试图在向导中编辑开始时间,它给了我这个错误:

在此处输入图像描述

我从不久前开始安排它每 2 分钟运行一次,但它还没有运行。它肯定是启用的。 在此处输入图像描述


故障排除

TLDR:调度程序工作!唯一不起作用的是我输入电子邮件以获取通知。

  1. 我是否在我创建它的相同模式中运行它? 在此处输入图像描述

我将工作更改为每 2 分钟运行一次。 在此处输入图像描述 ^^^所以它工作?但我在目标文件夹中看不到任何 CSV。我像下面的代码一样将开始日期更改为 NULL 并且它起作用了!我有 CSV!

  1. 测试计划的工作:测试:
create or replace procedure test_print
is
begin
    dbms_output.put_line('Current date and time is : ' || 
    to_char(sysdate,'DD-MON-YYYY HH:MI:SS AM'));
end;

set serveroutput on;

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
    job_name => 'JOB_TEST',
    job_type => 'STORED_PROCEDURE',
    job_action => 'TEST_PRINT',
    number_of_arguments => 0,
    start_date => NULL,
    repeat_interval => 'FREQ=MINUTELY;INTERVAL=2;',
    end_date => NULL,
    enabled => FALSE,
    auto_drop => FALSE,
    comments => 'Testing job runs');
 
DBMS_SCHEDULER.enable(name => 'JOB_TEST');
END;
/

select job_name,output,status,owner 
from user_scheduler_job_run_details where  job_name='JOB_TEST';

结果: 在此处输入图像描述

仍然不起作用的是通过电子邮件通知。当这是我唯一编辑的内容时,我收到此错误:

在此处输入图像描述

oracle jobs
  • 1 个回答
  • 724 Views
Martin Hope
Smenov
Asked: 2020-06-23 10:11:19 +0800 CST

Oracle Enterprise Manager 13c - 度量中使用的查询

  • 0

我有任务 - “向我发送此指标中使用的查询?”

它与状态为“FAILED”的作业有关。

我发现这个失败的作业,但找不到该指标通过哪个查询检测到此错误。

oracle jobs
  • 1 个回答
  • 127 Views
Martin Hope
Matthew Moisen
Asked: 2020-05-10 08:51:34 +0800 CST

ORA-01658: 无法为表空间 SYSAUX 中的段创建初始范围;JOB_SCHEDULER 是最大的占用者

  • 0

DBMS_SCHEDULER 占用了我所有的 SYSAUX 表空间。我运行了dbms_scheduler.purge_logwhich 从 中删除了 1 亿行dba_scheduler_job_run_details,但是v$sysaux_occupants数据文件大小保持不变。我需要采取一些额外的措施来清除 DBMS_SCHEDULER 生成数据的 SYSAUX 表空间吗?


尝试将单行插入到我的常规表空间中新创建的表中失败:

ORA-01658: unable to create INITIAL extent for segment in tablespace SYSAUX

我可以通过查询看到它JOB_SCHEDULER占用了 SYSAUX 表空间的 92.4% v$sysaux_occupants:

SELECT
    occupant_name,                    
    round (sum(space_usage_kbytes) * 100 / sum (sum(space_usage_kbytes)) over (), 2) Pct
FROM v$sysaux_occupants                  
GROUP BY occupant_name
ORDER BY 2 desc NULLS LAST
;

我最初在 dba_scheduler_job_run_details 中有超过 1 亿行。

昨天,我运行了 purge 命令(耗时 3.5 小时):

BEGIN
    dbms_scheduler.purge_log;
END;
/

今天,dba_scheduler_job_run_details有不到 1K 行。

但是,查询v$sysaux_occupants不变;今天它仍然说JOB_SCHEDULER是占92.4%。同样查询我的数据文件大小显示 SYSAUX 仍然被最大化:

select d.TABLESPACE_NAME, d.FILE_NAME, d.BYTES/1024/1024 SIZE_MB, d.AUTOEXTENSIBLE, d.MAXBYTES/1024/1024 MAXSIZE_MB, d.INCREMENT_BY*(v.BLOCK_SIZE/1024)/1024 INCREMENT_BY_MB
from dba_data_files d,
    v$datafile v
where d.FILE_ID = v.FILE#
order by d.TABLESPACE_NAME, d.FILE_NAME;

看来我实际上并没有删除 DBMS_SCHEDULER 占用的空间。

我是否缺少一些步骤来清理 DBMS_SCHEDULER 消耗的所有空间?

oracle jobs
  • 2 个回答
  • 2283 Views
Martin Hope
Andres Arango
Asked: 2020-04-17 12:19:25 +0800 CST

带有日期的备份到 azure blob 存储 url

  • 1

我正在尝试对具有备份日期的天蓝色 blob 存储进行备份,这样当使用相同的名称生成备份时,作业不会失败,我正在连接convert(varchar(500),GetDate() ,112) + '.bak')但我在作业执行中遇到下一个错误

'+' 附近的语法不正确。[SQLSTATE 42000](错误 102)。步骤失败。

剧本:

将数据库模型备份到 url = 'https:containerurl/azurecontainer/model' + convert(varchar(500),GetDate(),112) + '.bak') go

sql-server jobs
  • 1 个回答
  • 52 Views
Martin Hope
Nicholas McQuillen
Asked: 2020-03-19 17:22:14 +0800 CST

如何清除 SQL 代理作业计划程序缓存

  • 1

我必须提交票证以更改作业调度,因此我尝试通过 tsql 脚本更新 msdb..sysschedules,而不是浏览 GUI。我总是通过 GUI 立即看到更改。不过,我第一次使用这种方法时,更改需要一天的时间才能传播。最近时间更长了。我怀疑代理/调度程序中缓存了一些东西,但我找不到关于如何在生产系统上以最少侵入性的方式刷新它的文档。我希望像禁用/启用作业这样的基本功能会触发刷新,但它什么也没做,我宁愿在 T-SQL 中使用我的票证发出一些东西,以确保使用更改。当没有任何事情发生时,我已要求重新启动代理,以查看它是否有效,但理想情况下会更喜欢不那么侵入性的东西。这是一个 2014 年的实例。

示例脚本:

USE msdb;
update s set
    s.freq_subday_interval=3
from msdb..sysjobs j
    left join msdb..sysjobschedules js on j.job_id = js.job_id
    left join msdb..sysschedules s on js.schedule_id = s.schedule_id
    where j.name ='SomeDb.RunMeEvery3MinsBusta';

- - 编辑 - - -

我想从我在下面测试过的答案中获取,它似乎立即级联。只是想让它更有活力。

declare @jobid nvarchar(50), @scheduleid int
select @jobid=j.job_id,@scheduleid=s.schedule_id from msdb..sysjobs j
    left join msdb..sysjobschedules js on j.job_id = js.job_id
    left join msdb..sysschedules s on js.schedule_id = s.schedule_id
    where j.name ='test';

EXEC msdb.dbo.sp_attach_schedule @job_id=@jobid,@schedule_id=@scheduleid
EXEC msdb.dbo.sp_update_schedule @schedule_id=@scheduleid, 
        @freq_subday_interval=1
GO
sql-server jobs
  • 2 个回答
  • 454 Views
Martin Hope
Jeevesh Juneja
Asked: 2020-02-23 03:22:30 +0800 CST

计划作业在 oracle SQL*PLUS 中不起作用

  • 0

我只是 Oracle 的初学者,似乎无法完成这项工作:-

我想从我的数据库中删除旧行。并创建了如下工作:-

CREATE OR REPLACE PROCEDURE delete_trips
AS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('Here');
        DELETE FROM trip y where sysdate > y.arrival_date;
    END;
/
BEGIN
    DBMS_SCHEDULER.CREATE_JOB(
        job_name        => 'delete_old_rows',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'EXECUTE delete_trips;',
        start_date      => sysdate,
        repeat_interval => 'FREQ=SECONDLY',
        end_date        => add_months(sysdate,12),
        auto_drop       => FALSE,
        enabled         => TRUE
    );
END;
/

执行上述代码后,我可以看到作业“delete_old_rows”被安排在 DBA_SCHEDULER_JOBS 中,但既没有删除行,也没有在终端中产生输出。我尝试注销并再次登录,但没有删除任何行,也没有产生输出。并且满足删除条件的行确实存在。请帮忙。我错过了什么?

oracle jobs
  • 1 个回答
  • 187 Views
Martin Hope
Learning_DBAdmin
Asked: 2020-02-03 23:13:33 +0800 CST

begin tran 而不是在 SQL 作业中使用 db_name 来执行存储过程

  • 2

我昨天定义了一个 SQL 作业,用于在早上的特定时间执行存储过程。这是一个临时且紧急的要求,因此我即时开发了这个程序,并安排它每天早上运行。

我应该只是在作业步骤中调用该过程并在高级选项卡中定义输出文件。我必须在作业步骤中使用以下命令:

use db_name
go
exec sp_name
go

而不是上面,我错误地写了如下:

begin tran
go
exec sp_name
go

这个 sql 作业没有失败,但是它没有完成它的预期工作。

输出文件包含以下内容:

作业“Job_Name”:第 1 步,“Step_name”:开始执行 2020-02-03 06:10:00

这似乎是正确的,但我想知道上面可以保持一个开放的交易并可能导致另一个问题。

我执行了sp_whoisactive(感谢 Adam Machanic 先生)并且没有看到从那时起运行的任何会话,并且在任何表上都没有阻塞,因为基础过程在将数据插入表时有 tablock 表提示。

有没有办法找到这个 sql 作业实际发生了什么,为什么它没有完成它的预期工作,以及是否有办法找到它是否仍在后台运行并且可以提交或回滚。我还运行 sp_who2 以查看是否有任何与此作业相关的 SPID,但找不到任何东西。

运行以下查询以检查所有作业的状态,它显示我的作业成功:

USE MSDB
SELECT name AS [Job Name]
         ,CONVERT(VARCHAR,MAX(DATEADD(S,(run_time/10000)*60*60 /* hours */  
          +((run_time - (run_time/10000) * 10000)/100) * 60 /* mins */  
          + (run_time - (run_time/100) * 100)  /* secs */
           ,CONVERT(DATETIME,RTRIM(run_date),113))),100) AS [Time Run]
         ,CASE WHEN enabled=1 THEN 'Enabled'  
               ELSE 'Disabled'  
          END [Job Status]
         ,CASE WHEN SJH.run_status=0 THEN 'Failed'
                     WHEN SJH.run_status=1 THEN 'Succeeded'
                     WHEN SJH.run_status=2 THEN 'Retry'
                     WHEN SJH.run_status=3 THEN 'Cancelled'
               ELSE 'Unknown'  
          END [Job Outcome]
FROM   sysjobhistory SJH  
JOIN   sysjobs SJ  
ON     SJH.job_id=sj.job_id  
WHERE  step_id=0  
AND    DATEADD(S,  
  (run_time/10000)*60*60 /* hours */  
  +((run_time - (run_time/10000) * 10000)/100) * 60 /* mins */  
  + (run_time - (run_time/100) * 100)  /* secs */,  
  CONVERT(DATETIME,RTRIM(run_date),113)) >= DATEADD(d,-20,GetDate())  
  group by name, CASE WHEN enabled=1 THEN 'Enabled'  
               ELSE 'Disabled'  
          END 
         ,CASE WHEN SJH.run_status=0 THEN 'Failed'
                     WHEN SJH.run_status=1 THEN 'Succeeded'
                     WHEN SJH.run_status=2 THEN 'Retry'
                     WHEN SJH.run_status=3 THEN 'Cancelled'
               ELSE 'Unknown'  
          END 

非常感谢任何帮助或输入。

版本:Microsoft SQL Server 2014 (SP3-GDR) (KB4505218) - 12.0.6108.1 (X64) 2019 年 5 月 29 日 20:05:27 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows NT 上基于内核的许可(64 位) 6.3(内部版本 9600:)(管理程序)

sql-server jobs
  • 1 个回答
  • 209 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve