(oracle脚本.doc
文本预览下载声明
1. 每天的8:00到23:00每隔5分钟执行一个sql语句的JOB
--建立一个存储过程
CREATE OR REPLACE PROCEDURE p_jobtest IS
v_hh VARCHAR2(2);
BEGIN
v_hh := to_char(SYSDATE, hh24);
IF v_hh = 08 AND v_hh = 22 THEN
--你的sql语句
NULL;
END IF;
END;
/
--提交一个JOB
DECLARE
v_jobno NUMBER;
BEGIN
dbms_job.submit(v_jobno,
p_jobtest;,
trunc(SYSDATE, mi) + 1 / 1440,
trunc(SYSDATE, mi) + 5 / 1440);
END;
/
2. RMAN 中的list 命令显示的信息是从控制文件里获取的,如果使用rm等命令手工的删除备份文件,这个动作不会同步到控制文件,造成不一致,这种不一致会导致使用rman时报错。可以使用delete 删除这些过期的记录,在用就不会报错了。
RMANcrosscheck copy;
RMANlist copy;
RMANdelete expired copy;
3. 触发LGWR进程的条件有:
1. 用户提交
2. 有1/3重做日志缓冲区未被写入磁盘
3. 有大于1M的重做日志缓冲区未被写入磁盘
4. 3秒超时
5. DBWR 需要写入的数据的SCN大于LGWR记录的SCN,DBWR 触发LGWR写入。
4. 触发DBWR进程的条件有:
1. DBWR超时,大约3秒
2. 系统中没有多余的空缓冲区来存放数据
3. CKPT 进程触发DBWR
5. 每隔3秒钟ckpt会去更新控制文件和数据文件,记录checkpoint执行的情况。
当发生checkpoint时,会把SCN写到四个地方去。
三个地方于control file内,一个在datafile header。
6. 触发CheckPoint(检查点) 条件有很多,比如:
1. 通过正常事务处理或者立即选项关闭例程时(shutdown immediate或者Shutdown normal),
2. 当通过设置初始化参数:
LOG_CHECKPOINT_INTERVAL,
LOG_CHECKPOINT_TIMEOUT ,
FAST_START_IO_TARGET 强制时;
3. 当数据库管理员手动请求时:
ALter system checkpoint;
alter tablespace ... offline;
4. 每次日志切换时;
alter system switch logfile
注意:
1. alter system switch logfile也将触发完全检查点的发生。
2. alter database datafile ... offline 不会触发检查点进程。
7. RECOVER DATABASE UNTIL CANCEL 和 RECOVER DATABASE UNTIL CANCEL USING BACKUP CONTROLFILE; 区别
1) RECOVER DATABASE UNTIL CANCEL == OPEN DATABASE RESETLOG
== DATAFILE HEADER SCN一定会小于CONTROLFILE的DATAFILE SCN
如果你有进行RESTORE DATAFILE,则该RESTORE的DATAFILE HEADER SCN一定会小于目前CONTROLFILE的DATAFILE SCN,此时会无法开启数据库,必须进行media recovery。 重做archive log直到该datafile header的SCN=current scn
8. 建表前判断表是否存在的存储过程。
在Oracle 中没有drop table... if exists语法。 所以我们可以在创建表之前用如下存储过程来判断。
create or replace procedure proc_dropifexists(
p_table in varchar2
) is
v_count number(10);
begin
select count(*)
into v_count
from user
显示全部