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]
注:用户创建后并不能连接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;
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;
注:用户创建后并不能连接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;