3:创建触发器,创建一个触发器,当所设置
字段
数据变化时触发相关事件
create
or
replace
trigger
trg_seq_pid
BEFORE
insert
ON
mobilePhone
FOR
EACH
ROW
begin
select
seq_pid
nextval
into:Newpid
from
dual;
end
trg_seq_pid
;
该触发器
含义
为当往表mobilePhone
中插入数据时userid字段的值从序列
seq_pid
中取数插入。
1跟踪数据库空间增长
SELECT SUM(MB_ALLOC)/1024 GB_DB_SIZE FROM
(SELECT SUM(ROUND(bytes_used/(10241024),2) + ROUND(bytes_free/(10241024),2)) MB_ALLOC
FROM V$temp_space_header, dba_temp_files
WHERE V$temp_space_headerfile_id (+) = dba_temp_filesfile_id
UNION
SELECT SUM(BYTES)/(10241024) MB_ALLOC FROM dba_data_files);
2下面例子除了undo和temp表空间外,将其他表空间的的使用情况记录每周插入db_spaec_hist表,以便查询:
Create the table for database size history create table db_space_hist (
timestamp date,
total_space number(8),
used_space number(8),
free_space number(8),
pct_inuse number(5,2),
num_db_files number(5)
);
Create the procedure db_space_history CREATE OR REPLACE PROCEDURE db_space_history AS
BEGIN
INSERT INTO db_space_hist
SELECT SYSDATE, total_space,
total_space-NVL(free_space,0) used_space,
NVL(free_space,0) free_space,
((total_space - NVL(free_space,0)) / total_space)100 pct_inuse,
num_db_files
FROM ( SELECT SUM(bytes)/1024/1024 free_space
FROM sysDBA_FREE_SPACE WHERE tablespace_name NOT LIKE '%UNDO%') FREE,
( SELECT SUM(bytes)/1024/1024 total_space,
COUNT() num_db_files
FROM sysDBA_DATA_FILES WHERE tablespace_name NOT LIKE '%UNDO%') FULL;
COMMIT;
END;
/
Create the job that runs once in a week DECLARE
X NUMBER;
BEGIN
SYSDBMS_JOBSUBMIT
(
job => X
,what => 'SYSDB_SPACE_HISTORY;'
,next_date => TO_DATE('22/02/2008 19:40:28','dd/mm/yyyy hh24:mi:ss')
,INTERVAL => 'TRUNC(SYSDATE+7)'
,no_parse => FALSE
);
END;
3做周期性监控
select from db_space_hist order by timestamp desc;
4查询结果(每月数据库的增长情况),统计的出发条件为createion_time
SELECT TO_CHAR(creation_time, 'RRRR Month') "Month", round(SUM(bytes)/1024/1024/1024) "Growth in GBytes"
FROM sysv_$datafile
WHERE creation_time > SYSDATE-365
GROUP BY TO_CHAR(creation_time, 'RRRR Month');
Month Growth in GBytes
-------------- ----------------
2008 December 1331
2008 November 779
2008 October 447
2009 April 797
2009 August 344
2009 February 505
2009 January 443
2009 July 358
2009 June 650
2009 March 452
2009 May 1787
2009 October 255
2009 September 158
将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现)----创建表Create table t_user(Id number(6),userid varchar2(20),loginpassword varchar2(20),isdisable number(6));----创建序列create sequence user_seqincrement by 1start with 1nomaxvaluenominvaluenocache----创建触发器create or replace trigger tr_userbefore insert on t_popedom_userfor each rowbeginselect user_seqnextval into :newid from dual;end;----测试insert into t_popedom_user(userid,loginpassword, isdisable)values('ffll','liudddyujj', 0);insert into t_popedom_user(userid,loginpassword, isdisable)values('dddd','zhang', 0)select from t_user;就可以看出结果。对sequence说明:increment by :用于指定序列增量(默认值:1),如果指定的是正整数,则序列号自动递增,如果指定的是负数,则自动递减。start with :用于指定序列生成器生成的第一个序列号,当序列号顺序递增时默认值为序列号的最小值 当序列号顺序递减时默认值为序列号的最大值。Maxvalue:用于指定序列生成器可以生成的组大序列号(必须大于或等于start with,并且必须大于minvalue),默认为nomaxvalue。Minvalue:用于指定序列生成器可以生成的最小序列号(必须小于或等于starr with,并且必须小于maxvalue),默认值为nominvalue。Cycle:用于指定在达到序列的最大值或最小值之后是否继续生成序列号,默认为nocycle。Cache:用于指定在内存中可以预分配的序列号个数(默认值:20)。在sequence中应注意:1、 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。2、 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失 所以可以在create sequence的时候用nocache防止这种情况。关键字:自增 sequence序列 increment start with
以上就是关于oracle数据库中数据表主键自动增长全部的内容,包括:oracle数据库中数据表主键自动增长、如何监控oracle自动增长表空间、如何在oracle中设置字段自动增长等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)