常用的数据库功能操作

##常用的数据库功能操作

物化视图,查询DLL,定时任务

###物化视图

也叫做实例视图

【不建议使用,由于没有索引等优化手段,一旦数据量大些造成性能的问题。】

【还有个问题是在使用的时候,遇到公司的数据库主备库同步数据,这个物化视图‘很可能’倒是同步数据失败[(ノ`Д)ノ当初找了好久这个原因]】

测试代码:

CREATE MATERIALIZED VIEW VM_REPORT_OPEN_MERCHANT
BUILD IMMEDIATE   --在视图编写好后创建  
--更新方式COMPLETE 完全刷新  刷新时间 360分钟 
REFRESH COMPLETE NEXT  SYSDATE + 360/(24*60)  
ENABLE QUERY REWRITE   --可读
AS 
select ****这里就是个查询语句****;

刷新方式 FAST 快速增量刷新,的限制太多,[统计之类的都不可以使用]只有简单到视图才可以使用的感觉。


###查询数据库DLL

就是查询数据库的表、视图、存储等的具体的创建语句等东东

#####查看表的索引等东东

SELECT DBMS_METADATA.GET_DDL(s.OBJECT_TYPE,s.OBJECT_NAME) 
FROM user_objects s LEFT JOIN USER_indexes i 
on s.OBJECT_NAME=i.INDEX_NAME  
WHERE i.TABLE_NAME='APP_USER' OR s.OBJECT_NAME='APP_USER' ORDER BY s.OBJECT_NAME;
--APP_USER 需要查询的表的名称

#####查看 表、视图、存储等的创建语句:

SELECT DBMS_METADATA.GET_DDL('TABLE','APP_USER')  as sql FROM dual; --表
SELECT DBMS_METADATA.GET_DDL('VIEW','V_APP_USER')  as sql FROM dual; --视图
SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW','VM_MERCHANT_TRADING')  as sql FROM dual; --物化视图
SELECT DBMS_METADATA.GET_DDL('PROCEDURE','PROC_TRANSREPORT_DIRECT_MODE')  as sql FROM dual; --存储过程

###数据库定时任务

#####查看启用的定时任务

select * from user_jobs;

#####停止和开启任务

begin
	dbms_job.remove(1);  --1任务的Job .broken(121,true); --暂停     .run(121)--启动
	commit; 
 end;

#####创建任务

begin  --每一天 凌晨1点
	declare jobno number;
BEGIN
	sys.dbms_job.submit(jobno,
			'DELETE_OS_DATA;',  --执行的存储过程名称 what
			TRUNC(sysdate) + 1 +1 / (24), --next——date执行时间 可为‘’  我通常都是写上的和下个参数一样的内容
			'TRUNC(sysdate) + 1 +1 / (24)' --interval,关键设置 定时的时间字符串
	);
	commit; 
END; end;
--参数说明:
--job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作;
--what参数是将被执行的PL/SQL代码块;
--next_date参数指识何时将运行这个工作。写Job的时候可以不指定该值;
--interval参数何时这个工作将被重执行。

实测 参数next_date不可为’’,为空的话根本一次都不会执行,next_date的值会为4000/1/1

填坑问题:定时任务在创建的时候自动执行!

原因:next_date 参数必须填写,如果没有此参数,oracle数据库默认在创建定时任务的时候会执行一次代码块,下次的执行时间才会以interval参数进行计算。

#####interval设置和示例

1、 每分钟执行 Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)

这个在使用的时候作为interval参数 写法为 ‘TRUNC(sysdate,’‘mi’’) + 1 / (24*60)’

2、 每天定时执行
例如:每天的凌晨2点执行 Interval => TRUNC(sysdate) + 1 +2 / (24)

3、 每周定时执行
例如:每周一凌晨2点执行 Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天

4、 每月定时执行
例如:每月1日凌晨2点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24

5、 每季度定时执行
例如每季度的第一天凌晨2点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24

6、 每半年定时执行
例如:每年7月1日和1月1日凌晨2点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

7、 每年定时执行
例如:每年1月1日凌晨2点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24

8、每天早上8点30分 :
‘TRUNC(SYSDATE + 1) +(860+30)/(2460)’

9、每天00:30 : TRUNC(sysdate) + 1 + 30 / (24*60)

前一半为获取系统时间 +号后面‘1’表示1天


20171104 整理 小杭
数据库:Oracle 版本不知道


在这里插入图片描述

你可能感兴趣的:(笔记,数据库)