oracle怎么控制并发 oracle sql并发执行
请教为什么oracle有很强的并发能力,它通过什么手段来保证?
通过数据库引擎的锁机制、内存操作、日志机制等。
创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、网站设计、宁都网络推广、重庆小程序开发公司、宁都网络营销、宁都企业策划、宁都品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供宁都建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
锁机制保证同一时的数据不会被多外同时写或覆盖。
内存是把操作的数据都放在内存。
日志机制,是修改数据后,先写日志,再写数据。
oracle 如何限定用户并发会话数
-- 创建profile
create profile profile_name LIMIT
SESSIONS_PER_USER 1 -- 用户最大并发会话数
CPU_PER_CALL 10 -- 单语句的最大CPU时间,超过语句会终止(单位:百分之一秒)
CPU_PER_SESSION UNLIMITED -- 单会话CPU占用无限制
LOGICAL_READS_PER_CALL 1000 -- 单语句的最大读取数据块数(包括读缓存和物理磁盘),没完成语句终止,数据回滚
LOGICAL_READS_PER_SESSION UNLIMITED -- 单语句的最大读取数据块数(包括读缓存和物理磁盘),没完成语句终止,数据回滚
CONNECT_TIME 1000 -- 连接的最长时间(单位:分钟)
IDLE_TIME 1; -- 不执行任何数据活动的情况下保持连接的最长时间(单位:分钟)
-- 为用户指定配置文件
alter user user_name profile test_profile;
--修改resource_limit为TRUE,否则资源限制无效
alter system set resource_limit = TRUE;
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;
oracle如何增大并发写入
oracle增大并发写入最简单的方法是使用SQL_TRACE对其进行跟踪。您没有提到Oracle版本,版本或平台。因此,我假设您至少使用的是10gR2版本。因此,使用DBMS_MONITOR来开...1. oracle的数据模式是:用户建在表空间上,表建在用户上
2. 一个用户的表就象自己的私有财产一样,没有自己或管理员授权别的用户是不能查询或修改的;
3. 对于不同用户下的同名表,都是独立的数据对象,如user1.table1和user2.table1是相互独立的,用户分别操作自己的表是不影响其他用户的;
oracle的并发问题?
插入数据使用主键约束即可。如果主键是自增,可以定义唯一约束。
----------------------------------------------------------
如果不使用数据库,那么程序写成串行即可。
Oracle并发连接数的设置
不能连接Oracle数据库了 提示相关的错误
OERR: ORA TNS:no appropriate service handler found
客户端连接间歇性失败 报错ORA
Cause: the listener could not find any available service handlers that are
appropriate for the client connection
Action: run lsnrctl services to ensure that the instance(s) have registered
with the listener and are accepting connections 检查lsnrctl service instance已经注册
状态显示ready时 可以连接
When the listener believes the current number of connections has reached maximum load
it may set the state of the service handler for an instance to blocked and begin refusing
ining client connections with either of the following errors: ora or ora
采用服务动态注册的方式 由PMON 通过SERVICE_UPDATE 来得到目前连接情况 但SERVICE_UPDATE 有时间间隔
所以 listener显示的连接数和当前实际的连接数可能不同
查询解决方法:
查看一下数据库现有的进程数 是否已经达到参数processes的大小
select count(*) from v$process; 取得数据库目前的进程数
select value from v$parameter where name = processes ; 取得进程数的上限
如已达到上限 修改initSID ora中的processes的大小
重新启动数据库到nomount状态下 执行create spfile from pfile; 并startup open
查询数据库自启动以来最大的并发数量
修改最大连接数:
alter system set processes = scope = spfile;
重启数据库:
shutdown immediate;
startup;
查看当前有哪些用户正在使用数据
SELECT osuser a username cpu_time/executions/ || s sql_fulltext machine
from v$session a v$sqlarea b
where a sql_address =b address order by cpu_time/executions desc;
有的时候我们需要调整oracle数据库的最大链接数 而这个链接数的调整是在oacle下的dbs目录下init ora文件中调整的
ORACLE的连接数(sessions)与其参数文件中的进程数(process)有关 它们的关系如下
sessions=( *process+ )
但是我们增加process数时 往往数据库不能启动了 这因为我们还漏调了一个unix系统参数 它是核心参数中的semmns 这是unix系统的信号量参数 每个process会占用一个信号量 semmns调整后 需要重新启动unix操作系统 参数才能生效 不过它的大小会受制于硬件的内存或ORACLE SGA 范围可从 —— 不等
但是 Processes的修改不仅应该调整initsid ora文件中的参数 而且应该调整OS的内核参数 象AIX HPUX Solaris SCO UNIXWare都是这样 OS的调整是需要重新启动的 而且这个参数的设置不能简单按照多少个终端要连到这个服务器上而定 最关键是考虑会有多少同时连上的session(在使用一些共享连接的中间件时 一般就不需要太大) 当然还要考虑一些Oracle的后台进程 还有一些系统维护工作需要多一些连接等
我的atmp大前置机器上对oracle调整的时候 其使用的是unixware操作系统 在做链接数调整的时候 要先对核心参数进行调整
核心主要相关的参数的调整如下
SHMMAX
SHMMIN
SHMMNI
SHMSEG
SEMMNI
SEMMSL
SEMMNS
SEMOPM
其中semmni semmns semmsl要加大 至少要比processes大
SEMMNI( ) 指定在核心中信号识别的数量 这是可以在任意给定时间被激活的唯一信号设置数量 缺省值是 最大值由系统自动调整产生
SEMMSL( ) 指定每个信号识别中信号量的最大值 缺省值是
SEMMNS 除最大db外的所有db 的PROCESSES之和+ *最大db的PROCESSES+ *
实例数 如 个实例进程数分别为 则=( + )+ * + * =
tyle= LINE HEIGHT: %; FONT FAMILY: 宋体 SEMOPM( ) 指定在每个系统调用semop中能够被执行的信号操作量的最大值 缺省值是
SHMMAX( ) 指定了共享内存部分大小的最大值 等于
× 物理内存字节数
SHMMNI( ) 指定了系统范围内共享内存标识的最大值
SHMSEG( ) 指定了与每个进程相关连的共享内存块(或标识)的数量 缺省值是 与每个进程相关连的共享内存块的最大值与进程拥有的未使用空间有关 因此 尽管一个进程拥有少于SHMSEG数值的共享内存块 它也有可能因为其有限的空间而不能与其它进程相联系
init ora中调整为
processes = # SMALL
#processes = # MEDIUM
# processes = # LARGE
From:! FE F A F! entry
修改oracle 的最大连接数
使用sys 以sysdba权限登录
c: sqlplus /nolog
SQLconn / as sysdba
SQL show parameter processes;
NAME TYPE VALUE
aq_tm_processes integer
db_writer_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL alter system set processes= scope = spfile;
系统已更改
SQL show parameter processes;
NAME TYPE VALUE
aq_tm_processes integer
db_writer_processes integer
job_queue_processes integer
log_archive_max_processes integer
processes integer
SQL create pfile from spfile;
文件已创建
lishixinzhi/Article/program/Oracle/201311/18790
本文标题:oracle怎么控制并发 oracle sql并发执行
链接地址:http://pwwzsj.com/article/hjcgsh.html