
正文
oracle如何防止并发 怎么解决并发
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
oracle中,如何防止多个会话同时调用存储过程,造成的计算结果重复,详细描述请看下文.
可以从这几个方面考虑
1、限制会话数量,防止多个会话出现
2、在多个会话中调用存储过程前增加检测调用状态的功能
3、在存储过程pro中增加当前运行状态的功能,防止重复运行
4、在结果表增加唯一索引,防止出现重复记录
解决问题的途径总是很多,需要程序开发人员和DBA共同沟通解决。
相关问答
Q1: 请教为什么oracle有很强的并发能力,它通过什么手段来保证?
通过数据库引擎的锁机制、内存操作、日志机制等。
锁机制保证同一时的数据不会被多外同时写或覆盖。
内存是把操作的数据都放在内存。
日志机制,是修改数据后,先写日志,再写数据。
Q2: oracle rac 系统高并发怎么防止获取的sequence重复
有二种选择,一是老实的用oracle数据库的安装光盘安装对应版本的oracle客户端。二是下载oracle提从的即时客户端,即时客户端是不用安装的,把下载包解压即可。
要使java web正常的通过oci驱动访问oracle,还需要客户端正确的配置一下相关变量。主要如下:
对于windows系统并使用oracle客户端时:
1. 把%ORACLE_HOME%lib加到PATH环境变量.
2. 把%ORACLE_HOME%jdbclibclasses12.jar加到CLASSPATH环境变量里.也可以把classes12.jar拷贝到resin的lib目录下。
对于linux系统并使用oracle即时客户端时:
1. 在使用resin的用户主目录下的.bash_profile文件中加入
exprot ORACLE_HOME=/opt/product/10.2.0/cleint/
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
2. 把instantclient_10_2目录下的classes12.jar拷贝到resin的lib目录下。
Q3: Oracle存储过程并发问题
1.设立主键。根据唯一性数据库自动判别。
2.笨的方法:建议采用信号量。
举例如下:
create signal_flag (signal number(1));insert into signal_flag values(1);
在每次查询表有无记录前,加入语句
select signal from signal_flag where signal=1 for update;
select count(1) int var_cnt from tab1 ;
if var_cnt =0 then insert.....
endif;
commit;
Q4: oracle的并发问题?
插入数据使用主键约束即可。如果主键是自增,可以定义唯一约束。
----------------------------------------------------------
如果不使用数据库,那么程序写成串行即可。






