有时候连得上数据库,有时候又连不上.
可能是数据库上当前的连接数目已经超过了它能够处理的最大值.
select count(*) from v$process --当前的连接数
select value from v$parameter where name = 'processes' --数据库允许的最大连接数
修改最大连接数:
alter system set processes = 300 scope = spfile;
重启数据库:
shutdown immediate;
startup;
--查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;
本文链接
Oracle中一般将自增sequence重置为初始1时,都是删除再重建,这种方式有很多弊端,依赖它的函数和存储过程将失效,需要重新编译。
不过还有种巧妙的方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改为负的这个值(反过来走),然后再改回来。
假设需要修改的序列名:seq_name
1、select seq_name.nextval from dual; //假设得到结果5656
2、 alter sequence seq_name increment by -5655; //注意是-(n-1)
3、 select seq_name.nextval from dual;//再查一遍,走一下,重置为1了
4、 alter sequence seq_name increment by 1;//还原
可以写个存储过程,以下是完整的存储过程,然后调用传参即可:
CREATE OR REPLACE PROCEDURE seq_reset(v_seqname VARCHAR2) AS
n NUMBER(10);
tsql VARCHAR2(100);
BEGIN
EXECUTE IMMEDIATE 'select ' || v_seqname || '.nextval from dual'
INTO n;
n := - (n - 1);
tsql := 'alter sequence ' || v_seqname || ' increment by ' || n;
EXECUTE IMMEDIATE tsql;
EXECUTE IMMEDIATE 'select ' || v_seqname || '.nextval from dual'
INTO n;
tsql := 'alter sequence ' || v_seqname || ' increment by 1';
EXECUTE IMMEDIATE tsql;
END seq_reset;
本文链接
PRAGMA AUTONOMOUS_TRANSACTION
在你的一个事务(外层事务)中可以定义一个或几个自治事务。自治事务可以独立commit,不对外层事务产生影响,同样外层事务的 rollback 也对自治事务没有影响。
通常可以考虑将自治事务定义成一个过程,在外层的事务中调用。即当前的存储过程作为已有事务的子事务运行,子事务的commit,rollback操作不影响父事务的状态
应用于
(1)匿名块
(2)触发器
(3)存储过程
例子:
PROCEDURE addrowautonomous(pid IN tlog.id%TYPE,
pldate IN tlog.ldate%TYPE,
plhsecs IN tlog.lhsecs%TYPE,
pllevel IN tlog.llevel%TYPE,
plsection IN tlog.lsection%TYPE,
pluser IN tlog.luser%TYPE,
pltexte IN tlog.ltexte%TYPE) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
addrow(pid => pid,
pldate => pldate,
plhsecs => plhsecs,
pllevel => pllevel,
plsection => plsection,
pluser => pluser,
pltexte => pltexte);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
plog.error;
ROLLBACK;
RAISE;
END;
自治事务可以用于在客户化程序中记录调试信息
PROCEDURE insert_cux_debug_info(
........
) IS PRAGMA AUTONOMOUS_TRANSACTION;
........
BEGIN
INSERT INTO cux_debug_info VALUES ........;
COMMIT;
END;
本文链接