我需要找到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
是收集尺寸信息的来源,其余表是我自己创建的,用于存储收集的数据。
我需要每天收集细分的尺寸信息,包括日期。
我如何才能使此代码每天工作,例如每天两次?
答案 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