oracle 常用笔记

1.Oracle的启动
SQL>conn sys/password@DATABASE_NAME as sysdba;
SQL>startup [pfile=your pfile dircnetory]
2.Oracle的关闭
SQL>conn sys/password@DATABASE_NAME as sysdba;
SQL>shutdown [immediate][force][normal][tanscatinal]

3.创建表空间和用户

          create tablespace house datafile 'e:\house.dbf' size 10M;

         create user user_name identified by password default tablespace house TemporaryTABLESPACE Temp;
注:用户创建后并不能连接Oracle,要用sysdba角色授予权限:
conn sys/password as sysdba;
grant connect,resource to user_name;
4.删除用户
SQL>drop user_name;
5.锁定用户
SQL>alter user user_name account lock;
6.解锁
SQL>alter user user_name account unlock;
7.用户授权
SQL>grant connect,resource to user_name
9.修改密码
>sqlplus /nolog
SQL>conn / as sysdba
SQL>alter user system identified by [password]
 
修改表空间大小:
alter database DATAFILE 'D:\oraclexe\oradata\XE\bank.dbf' resize 128M;
 
修改临时表空间自动增长:
alter database tempfile '/u01/app/oracle/oradata/orcl/temp01.dbf' AUTOEXTEND ON next 100m;

增加表空间
ALTER TABLESPACE "TS_SQXT_IDX"  ADD DATAFILE '/dxsq3data/rsqxtidx4g_09.dbf' SIZE 4096M;
 
怎么取消``11G的密码过期限制。
ALTER PROFILE DEFAULT
    LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED PASSWORD_LOCK_TIME
    UNLIMITED PASSWORD_GRACE_TIME UNLIMITED PASSWORD_LIFE_TIME
    UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_REUSE_TIME
UNLIMITED PASSWORD_VERIFY_FUNCTION NULL;

 
SELECT tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间M FROM dba_free_space GROUP BY tablespace_name;
---------------------------------------
8.delete与trancate区别
delete操作有写日志,trancate没写日志所以操作快;
当要清空一个非常大的表时, truncate要高效的多, 与表中的数据量没什么关系.
Truncate 释放所有的Block ,而Delete 不释放空间
truncate做的修改是不能回滚的,就是不可恢复的操作。用了这个命令后就收回了表空间。delete删除是要把数据写入系统回滚段中以便恢复时使用。
truncate是DDL語言.
delete是DML語言

DDL語言是自動提交的.
命令完成就不可回滾.

truncate和不带where子句的delete, 以及drop都会删除表内的数据

不同点:
1. truncate和 delete只删除数据不删除表的结构(定义)
    drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
   truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
  显然drop语句将表所占用的空间全部释放
  truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;   truncate会将高水线复位(回到最开始).
4.速度,一般来说: drop>; truncate >; delete
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据
 
9.查看当前用户
SQL>show user
 
 
 
--创建用户
create user systop    --用户名字
identified by 123456  --用户密码
default tablespace tab_space --用户表空间
temporary tablespace temp_space--临时表空间

desc dba_tablespaces          --查看表空间表结构
select * from dba_tablespaces --查看表空间

connect cmadba/systop          --切换用户登录

disconnect --断开连接

--设置权限
grant create session to test   --给test赋予session权限

--更改密码
alter user test identified by 123456 --更改test密码为123456

--锁定用户与解除锁定
alter user test account lock | unlock

--修改命名空间
alter user test
default tablespace new_def_tablespace
identified tablespace new_tmp_tablespace

--删除用户
drop user test

--给与对象权限
grant select,insert,delete,update on catalogs to test
--收回
revoke select,insert,delete,update on catalogs to test

--创建角色
create role role_test
identified by role_password;

--授与权限
grant xxxx_role to test

desc user_role_privs

desc user_sys_privs

--输出一行数据
prompt 'ssssss'

在sysdate 上加上几个月可以为 负
add_months(sysdate, 1)

--返回当前月的最后一天的日期
last_day(sysdate)

--返回之间的月数
months_between(sysdate, '2008-06-09')

next_day(sysdate)

修改表的表空间;
alter table apas_attr move tablespace monitor
 
另一种方法:
要ORACLE里面的那个SQL PLUS
Coral 18:13:37
copy from cxmonitor/cxmonitor@orcl create tbl_doc_xml1 using select * from tbl_doc_xml;
 
建表空间
CREATE TABLESPACE apps
  DATAFILE '/db/oradata/apps01.dbf' SIZE 1000M,
  '/db/oradata/apps02.dbf' SIZE 1000M
  EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;
 
例:
CREATE TABLESPACE reda
  DATAFILE 'D:\oraclexe\oradata\XE\reda.dbf' SIZE 64M
  EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;
 
create user reda identified by reda default tablespace reda;
grant connect to REDA;
grant exp_full_database to REDA;
grant imp_full_database to REDA;
grant resource to REDA;
 
 
Oracle10g启动与关闭的方法:
1.以Oracle帐号登陆Linux,或者从root下输入su - oracle变成oracle帐号,然后进入bin目录输入
sqlplus / as sysdba进入sqlplus.然后直接输入startup就可以了.
关闭Oracle10g的办法和启动一样,只是sqlplus命令输入shutdown,
2.开启和关闭监听
在终端下(不是sqlplus),输入lsnrctl start 启动监听.输入lsnrctl stop关闭监听.
3.启动isqlplus
isqlplusctl start
4.启动em
emctl start dbconsole
 
Oracle9i TNS 配置文件D:\oracle\ora90\network\ADMIN\tnsnames.ora
Oracle10G TNS配置文件/home/oracle/oracle/product/10.2.0/db_1/dbs/spfileorcl.ora
8i
[oracle@oradb /oracle]$sqlplus system/manager
  出现以下信息:
  SQL*Plus: Release 8.1.6.0.0 - Production on Fri Oct 26 22:21:32 2002
  (c) Copyright 1999 Oracle Corporation. ALL rights reserved.
 
  Connected to:
  Oracle8i Enterprise Edition Release 8.1.6.1.0 - Production
  With the Partitioning option
  JServer Release 8.1.6.0.0 - Production
 
  SQL>
  启动数据库:
  [oracle@oradb /oracle]$ svrmgrl
  SVRMGR> connect internal
  Connected.
  SVRMGR> startup
  ORACLE instance started.
  显示SGA状态
  Database mounted.
  Database opened.
  SVRMGR>
  关闭数据库:
  [oracle@oradb /oracle]$ svrmgrl
  SVRMGR> connect internal
  Connected.
  SVRMGR> shutdown
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  SVRMGR>
  启动监听器
  [oracle@oradb /oracle]$ lsnrctl
  LSNRCTL> start
  LSNRCTL> exit
  停止监听器
  [oracle@oradb /oracle]$ lsnrctl
  LSNRCTL> stop
  LSNRCTL> exit
  查看监听器状态
  [oracle@oradb /oracle]$ lsnrctl
  LSNRCTL> status
  LSNRCTL> exit

 
对public_role用户授权:
conn system/manager
grant create session to public_role with admin option;
grant select on scott.emp to public_role;
grant insert,update,delete on scott.emp to public_role;
 
查询当前连接会话
    12是cpu used by this session
 
    select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
    from v$session a,v$process b,v$sesstat c
    where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;
 
 
 
我想把dw.mgr_role授权给place用户语句怎么写?
chenl(陈亮) 09:51:37
grant select on dw.mgr_role to place;
所有权限授予
  select 'grant all on '||tname||' to basedba;' from tab --表
select 'grant execute on '||object_name||' to basedba;' from user_objects t where t.object_type='FUNCTION' --函数
 select 'grant all on '||object_name||' to flowcfg;' from user_objects
 
用户级授权:

connect system/manager@dbstring
 
grant connect,resource to userid
 
GRANT "CONNECT" TO "myuser";
GRANT "DBA" TO "myuser";
 
 
 
 
跨库查询
--create database link 连接名 connect to 用户 identified by 密码 using 'ORACLE的TNS名'
--insert into doone.user_info select * from user_info@连接名;
 
2006-12-18 16:52
查询小灵通的用户
 select acc_nbr from dw.serv a,dw.prod_sum b,dw.serv_product c
 where a.state='A'
 and a.serv_id_ibss=c.serv_id_ibss
 and a.prod_id4=c.prod_id4
 and b.prod_name4='小灵通公话'
 

2006-12-20 17:13
CLOB跨库导法:
1.导出:首先把数据查询出来,然后选择数据,在右键菜单中选择copy to excel;
2.导入:在tools\ODBC Importer...;选择ExcepFiles输入用户名和密码(当然前提是这台主机要装EXCEL,或建数据源),然后Connect选择excel文件;
然后在Data to Oracle选项卡填写Owner和TAble,选择要导的字段,然后点Import
 
第二种是导志dmp文件,如果报oracle exp-00003错误
    解决方法是,用sys用户以dba身份登录,然后编辑EXU9TNE这个视图;
加入
    UNION ALL
    SELECT * FROM SYS.EXU9TNEB
这个语句,编译一下,再导出就可以了
导完后,最好再把刚才EXU9TNE视图添加的语句删除掉;

2006-12-29 8:29
修改某个字段中的所有关键字:
update basedba.qry_topic_tree set topic_name=replace(topic_name,'泉灵通','小灵通')
 
 
 
2007-2-1 19:40
查询建表:
create table  basedba.qry_form_define_20070201bak as select * from  basedba.qry_form_define
 

 

2007-2-10 13:31
统计表的空间
            select       
            b.file_id     文件ID号,     
            b.tablespace_name     表空间名,     
            b.bytes     字节数,     
            (b.bytes-sum(nvl(a.bytes,0)))     已使用,     
            sum(nvl(a.bytes,0))     剩余空间,     
            sum(nvl(a.bytes,0))/(b.bytes)*100     剩余百分比       
            from   dba_free_space   a,dba_data_files   b       
            where   a.file_id=b.file_id       
            group   by   b.tablespace_name,b.file_id,b.bytes       
            order   by   b.file_id;     
统计每张表所占用的空间:
select bytes / 1024 / 1024 || 'M', segment_name, segment_type
  from dba_segments t
 where owner = 'BASEDBA'
  order by bytes desc
 
 
 
2007-3-1 16:17
查询数据对象
select * from user_source where lower(text) like '%task_dept_man_cfg%';
 
2007-3-5 11:12
Select '<input type=Check name=Rbox id=R1 value=''' || a.Device_Id ||
       ''' οnclick=fun_setid(this.value)>' As Id,
       (Select Type_Name
          From Dxsq.Device_Type y
         Where y.Device_Type_Id = a.Device_Type_Id) Type,
       a.Device_Name,
       a.Addr_Info,
       Decode(d.Bss_Org_Id, Null, '未划分', '已划分')
  From Dxsq.Device a,
       (Select *
          From Dxsq.Community_Device b,
               (Select Node
                  From Dw.Place_Tree
                Connect By Prior Node = f_Node
                 Start With Node = 61) c
         Where b.Bss_Org_Id = c.Node) d
 Where a.Device_Id = d.Device_Id(+)
;
SELECT a.emitter_nbr ,'未划分'
  FROM  EMITTER A
 WHERE NOT EXISTS (SELECT 1 FROM EMITER_IN_COMM B WHERE A.EMITTER_ID = B.EMITTER_ID)
 UNION
 SELECT a.emitter_nbr ,'已划分'
  FROM EMITTER A
 WHERE EXISTS (SELECT 1 FROM EMITER_IN_COMM B WHERE A.EMITTER_ID = B.EMITTER_ID)
 
2007-3-7 11:20
union跟union all区别,union有去掉重复记录, union all不判断是否有重复记录,直接并集
 
 select node, place_name, t_level, bureau_id
  from dw.place_tree
 where state = 'A'
   AND instr(','||place.f_get_place_node_by_staff_role(1804109, '3')||',',','||node||',')>0;
 
2007-4-28
批量删除表
select 'drop table '||table_name||';'  from user_all_tables where table_name like '%TEMP%'
 
2007-5-19
同义:synonym
create synonym dept_tree for dw.dept_tree
 
2007-5-29
循环:
create or replace procedure p_my_first is
begin
   for rec in(select old_bss_org_id,device_id  from device_log b where  log_date = (select max(t.log_date)
                       from DEVICE_LOG t
                      where t.device_id = b.device_id))loop
  update community_device set old_place_s_ndoe =rec.old_bss_org_id where device_id=rec.device_id;
 end loop;
end p_my_first;
 
2007-5-31
分段commit
 
举例如下:
 
declare
v_rowcount number;
begin
   loop
    update  tab a set  a.filed = (select filed from tab b where a.id = b.id)
        and rownum<100001;
      v_rowcount:=sql%rowcount;      
      commit;   
     exit when v_rowcount<100000;    --  当sql返回的记录数<100000时,说明已经是最后一次循环了,符合exit出循环的条件了
   end loop;  
end;
/
 
每10w个数据提交一次

2007-5-30
直接从一个电脑中将数据库文件拷贝到另一台电脑上,如何在另一台电脑上把数据库恢复?
建立一个同名的库。然后shutdown。然后用你的文件覆盖这个新建立的库。然后startup
 
# 进程和会话  init.ora
###########################################
processes=150
 
2007-7-19截取字符串
select substr(to_char(sysdate,'yyyy'),1,4) from dual
2007-8-23
 /*+rule*/
 若是希望返回91-100筆紀錄
SELECT * FROM tab WHERE ROWNUM<101
minus
SELECT * FROM tab WHERE ROWNUM<91;
 
1.增加表空间
ALTER TABLESPACE "TS_SQXT_IDX"  ADD DATAFILE '/dxsq3data/rsqxtidx4g_09.dbf' SIZE 4096M;
 
2.and MON between 2007 and 2009

3.charge_last3 "近第三个月话费(元)",--带括号的列名,加双引号
 
 
 
表空间办法 exp 表空间 2分钟
 导出用户东东 5分钟
 还原时 一样是 2+5
小谢unix 15:57:31
  Linux也一样
小谢unix 15:57:43
 imp太慢了
小谢unix 15:58:07
 表空间备份 就是你exp表结构后 就可以移动dbf了
对了, imp的时候记得 关了归档
小谢unix 16:00:14
 不然TNND 大数据 那个归档日志 够你受地
 
yyyy-MM-dd HH24:mi:ss
 
时间格式化
select to_date('8 :00 :00','hh24:mi:ss') from dual
 
 
sysdate+1  加一天
sysdate+1/24 加1小时
sysdate+1/(24*60) 加1分钟
sysdate+1/(24*60*60) 加1秒钟
类推至毫秒0.001秒
 
 
查看一下数据库现有的进程数,是否已经达到参数processes的大小。
1.select count(*) from v$process;取得数据库目前的进程数。
2.select value from v$parameter where name = 'processes';取得进程数的上限。
3.如已达到上限,修改initSID.ora中的processes的大小。
4.重新启动数据库到nomount状态下,执行create spfile from pfile; 并startup open。
或者alter system set processes=150 scope=spfile; 然后重启。
如果是RAC,则修改的命令又不一样。
需要:
alter system set processes=150 scope=spfile sid='rac1';
alter system set processes=150 scope=spfile sid='rac2';
 
查询数据库自启动以来最大的并发数量
select * from v$license

Action: run "lsnrctl services" to ensure that the instance(s) have registered
        with the listener, and are accepting connections. 检查lsnrctl service ,instance已经注册,
 状态显示ready时,可以连接。


substr(source_url,3)

 

正则表达式:

select * from t_domain@domain151 t where length(domainname)<=3 and postfix in('.cn','.com.cn') and regexp_like(domainname,'^([a-z]+|[0-9]+)$') order by t.registrationdate

 

修改ORACLE最大连接数

1、修改Oracle最大连接数的方法
   
   a、以sysdba身份登陆PL/SQL 或者 Worksheet
   b、查询目前连接数
      show parameter processes;
   c、更改系统连接数
      alter system set processes=1000 scope=spfile;
   d、创建pfile
      create pfile from spfile;
   e、重启Oracle服务或重启Oracle服务器

2、查询Oracle游标使用情况的方法
   select * from v$open_cursor where user_name = 'TRAFFIC';
3、查询Oracle会话的方法
   select * from v$session

 

 

 [^]不再某个范围
          tel like '13[^0-3] [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' 移动卡号

 

 

导出前100条:
exp sq/sq@zx151 file=sq_1010.dmp  query="""where rownum<=100""" tables=COMPANY_PRODUCT

 

只修改注释:用PD生成数据库,在Database/Generation Database里只勾选Comment项,然后生成SQL    

大小写转换

select upper(cp_mc) from t_product

lower

JOB:

begin
  sys.dbms_job.submit(job => :job,
                      what => 'p_product_expir();',
                      next_date => to_date('29-11-2008 10:13:19', 'dd-mm-yyyy hh24:mi:ss'),
                      interval => 'sysdate+1');
  commit;
end;
/


三、查看相关job信息
1、相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息




exec dbms_job.broken(:job) 停止
exec dbms_job.broken(186,true) //标记位broken
exec dbms_job.broken(186,false)//标记为非broken
exec dbms_job.broken(186,false,next_day(sysdate,'monday')) //标记为非broken,指定执行时间
exec dbms_job.remove(:job);删除
exec dbms_job.remove(186);
commit;

修改数据链:

drop database link REDA165;
create database link reda165
  connect to reda identified by "reda"
  using 'zx168';

select   to _char(sysdate,'d')   from   dual   
  1——7分别为周日——周六Top

2 楼chliang315()回复于 2006-04-22 19:51:14 得分 0
SQL>   select   to_char(sysdate,'Day')   from   dual;   
    
  TO_CHAR(SYSDATE,'DAY')   
  ---------------------------------------------------------------------------   
  Saturday

 

ora-14551

只需下列PL/SQL的声明部分加上PRAGMA AUTONOMOUS_TRANSACTION; 就可以了.

对数据库有写操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的存储过程或函数是无法简单的用SQL来调用的,此时可以将其设为自治事务,从而避免ORA-14552(无法在一个查询或DML中执行DDL、COMMIT、ROLLBACK)、ORA-14551(无法在一个查询中执行DML操作)等错误。需要注意的是函数必须有返回值,但仅有IN参数(不能有OUT或IN/OUT参数)。

 

 

函数改导成sql文件
可以用pl/sql
在导出
找故事里的人 10:59:49
我没找到,在哪
吴理金 11:00:12
在tools->export users object
吴理金 11:00:28
在tools->export user object

吴理金 11:00:49
选择里面的对象

清空BLOB数据

update t_cptp set cptp_ck =EMPTY_BLOB()  where 1=1;

----------------------------------------------------
在SQLNET.ora文件中设置以下参数可以实现IP访问限制:

tcp.validnode_checking=yes
tcp.invited_nodes=(ip1,ip2......)
tcp.excluded_nodes=(ip1,ip2......)

 

select  /*+choose */  topic_id, lpad(' ',level*5,' ') || label, hotkeys
from
(select topic_id, hotkeys, label,parentid from ipop_topic where application_id=1008 and active=1 order by label) connect by parentid = prior topic_id
start with parentid = 0

取整mod(onlinetime-lasttime,60*24)

  象CEIL(15.7)只能取最接近但大于15.7的整数   16   
  象FLOOR(15.7)只能取最接近但小于15.7的整数   15   
  象TRUNC(15.79,1)只能依据精确位来取,不会四舍五入,15.7   
  象ROUND(15.79,1)能依据精确位来四舍五入,15.8   
  trunc和round中的"1"表示小数点1位,0表示个位,-1表示十位   

查看正在运行的过程

select name
from v$db_object_cache
where locks > 0 and pins > 0 and type='PROCEDURE';


怎么把查询结果导成文本文件?在LINUX下,比如我要把这个查询结果写到文件里

set pages 1000 lines 140
spool tmp.txt
select 'rm '||tp_path from t_cptp_del;
spool off

$vi spool_del_cptp.sh



sqlplus -s $USER/$PWD@$SID<<EOF
set echo off
set feedback off
set heading off
set trimspool on
set trimout on
set termout off
set pagesize 0;
spool del_repeat_cptp.sh
select 'rm '||substr(tp_path,2,length(tp_path)) from t_cptp_del where 1=1;
spool off
EOF

 

闪回查询,下面这个查询它将检索出过去一小时以内存在的数据
select * from tb_user as of timestamp (systimestamp-interval '1' hour);

闪回表
flashback table tb_user to timestamp (systimestamp-interval '1' hour);

闪回库
flashback database

注意,TRUNCATE 操作的表,无法闪回操作

 

修改SGA参数:

startup  mnomount   
create pfile='/tmp/init_SID.ora from spfile;
shutodown immediate;
startup pfile='/tmp/init_SID.ora'
init_SID.ora 修改文件中的sga参数

 

在oracle中修改已经存在的一个表的名字

ALTER TABLE old_table_name RENAME TO new_table_name;

或者SQL> rename test to temp ;

 
(补0)
oracle位数不足前面补0的函数,lpad()

判断BLOG是否为空

   dbms_lob.compare(photo, empty_blob()) = 0
    dbms_lob.GETLENGTH(photo) = 0

-----------------------------------------------
重新编译所有函数

select 'alter function ' || object_name || ' compile;',ao.*
  From user_objects ao
 where object_type = 'FUNCTION'

TO_CHAR(ADD_MONTHS(SYSDATE,-1),'YYYYMM')

 

--找出两个库之前不同的对象

select * from user_sequences@ZYWBAK where sequence_name not in(select sequence_name from user_sequences);
select * from user_tables@ZYWBAK where upper(table_name)   not in(select upper(table_name)   from user_tables);
select * from user_triggers@ZYWBAK where trigger_name    not in(select trigger_name    from user_triggers);
select * from USER_PROCEDURES@ZYWBAK where object_name     not in(select object_name     from USER_PROCEDURES);


---rowType 行数据类型,存储的是一行数据
  rowData 表名%rowType;
  vs_row2  游标%rowtype;


---DBA_JOBS  定时器
相关视图:
dba_jobs      //系统中所有的job
all_jobs     //当前用户的创建的job以及被管理员创建的job
user_jobs   //当前用户的创建的job
dba_jobs_running 包含正在运行job相关信息
    Broken()过程。
  change()过程。
  Interval()过程。
  Isubmit()过程。
  Next_Date()过程。
  Remove()过程。
  Run()过程。
  Submit()过程。
  User_Export()过程。
  What()过程。
===========================================
字段(列) 类型 描述
JOB NUMBER 任务的唯一标示号
LOG_USER VARCHAR2(30) 提交任务的用户
PRIV_USER VARCHAR2(30) 赋予任务权限的用户
SCHEMA_USER VARCHAR2(30) 对任务作语法分析的用户模式
LAST_DATE DATE 最后一次成功运行任务的时间
LAST_SEC VARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小时,分钟和秒
THIS_DATE DATE 正在运行任务的开始时间,如果没有运行任务则为null
THIS_SEC VARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小时,分钟和秒
NEXT_DATE DATE 下一次定时运行任务的时间
NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小时,分钟和秒
TOTAL_TIME NUMBER 该任务运行所需要的总时间,单位为秒
BROKEN VARCHAR2(1) 标志参数,Y标示任务中断,以后不会运行
INTERVAL VARCHAR2(200) 用于计算下一运行时间的表达式
FAILURES NUMBER 任务运行连续没有成功的次数
WHAT VARCHAR2(2000) 执行任务的PL/SQL块
CURRENT_SESSION_LABEL RAW MLSLABEL 该任务的信任Oracle会话符
CLEARANCE_HI RAW MLSLABEL 该任务可信任的Oracle最大间隙
CLEARANCE_LO RAW MLSLABEL 该任务可信任的Oracle最小间隙
NLS_ENV VARCHAR2(2000) 任务运行的NLS会话设置
MISC_ENV RAW(32) 任务运行的其他一些会话参数

--------------------------
描述 INTERVAL参数值
每天午夜12点 'TRUNC(SYSDATE + 1)'
每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'
每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)'
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24'
每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

--------------------------
--定义一个job
declare job名 number;
begin
    dbms_job.submit(job名,what名,next_date参数指识何时将运行这个工作,interval定时器,true/false是否执行语言分析);
end;

--删除一个job
首先查出该时间控制器的唯一标识id
begin
    dbms_job.remove(job标识id);
end;

--执行job(手动执行job)
begin
    dbms_job.run(job标识id);
end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值