如何使我的代码每天自动在PL / SQL上运行?

时间:2019-07-18 05:39:45

标签: sql oracle plsql

我需要找到PL / SQL数据库中数据的增长趋势。有一个名为dba_segments的数据字典视图,我需要从中获取数据大小信息,基本上,我每天都需要在同一张表中收集这些数据。 (含日期)我上个月才开始学习SQL,所以我不知道该怎么做。我的代码现在可以编译,但实际上并没有收集其中的数据。

CREATE TABLE timeDate (
   id INT,
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
);

CREATE TABLE add_data_growth AS
SELECT DATE(`ts`) FROM timedate WHERE id =someId
 SELECT segment_name, bytes/1024/1024 AS MB FROM dba_segments;

CREATE PROCEDURE collect_sizes
AS
BEGIN
INSERT INTO data_growth select trunc(sysdate), dba_segments.*
from dba_segments;
insert into data_growth
end add_data_growth;

dba_segments是收集尺寸信息的来源,其余表是我自己创建的,用于存储收集的数据。 我需要每天收集细分的尺寸信息,包括日期。 我如何才能使此代码每天工作,例如每天两次?

1 个答案:

答案 0 :(得分:1)

希望这会有所帮助。还要通过此链接(http://www.dba-oracle.com/t_table_growth_reports.htm

--First create a sequence 
CREATE SEQUENCE  IDS_AUTOINC START WITH 100 INCREMENT BY  1 ;

然后创建一个表,合并所需的表,并假设您需要从dba_segments视图中获取ID,时间戳,segment_name和bytes列。

Create table data_growth
as 
select IDS_AUTOINC.nextval as ID, SYSTIMESTAMP as ts, 
dba_segments.segment_name,bytes/1024/1024 AS MB  from dba_segments;

如果您只需要每天两次将数据插入到data_growth表中,我认为我们真的不需要一个程序块就可以完成这项工作。

    BEGIN
      DBMS_SCHEDULER.create_job (
        job_name        => 'Daily_dba_segments_Cal',
        job_type        => 'PLSQL_BLOCK',
        job_action      => 'BEGIN INSERT into data_growth select IDS_AUTOINC.nextval as ID, SYSTIMESTAMP as ts, 
                            dba_segments.segment_name,bytes/1024/1024 AS MB  from dba_segments;commit; END;',
        start_date      => SYSTIMESTAMP,
        repeat_interval => 'freq=hourly;INTERVAL=12',
        enabled         => TRUE);
    END;

验证

    select trunc(TS),SEGMENT_NAME,max(MB)  from data_growth
    group by trunc(TS), SEGMENT_NAME, MB
    having MB=(select max(MB) from data_growth) ;

有用的链接: https://blogs.oracle.com/academy/free-online-beginners-tutorial-for-sql