目标
“Queued Sessions”在负载平衡配置中如何使多个并发的Oracle数据加载器(ODI)代理平等的执行
解决方案
1。主代理创建一个会话,然后把它传给一个从属的代理执行(根据实际负载平衡设置)。
注:代理作用于连接代理的级联上。此外,它有可能使代理的连接循环。所以不建议使用此方法。
例如,如果两个从属代理连接到对方并且启动会话。两个从代理将运行成一个无限循环把同一个会话彼此之间不停的转发,直到Oracle数据库不允许了并发会话试图连接的数量。
2。一个Session之内可能存在几毫秒时间的一个“等待”状态的... ...但这种情况一般不会感觉到,因为在时间很短。
每一个从代理将尝试执行它自己的会话。当并发执行的最大数量超标时,从属代理把会话引入到 “排队状态”的堆栈中。
3。运行时,会话将SESS_STATUS = "R" (running) and those on the "Queued status" stack have SESS_STATUS="Q" (queued).
每个从代理运行会话时都会分配一个线程。
当一个会话完成后,这个会话里的线程会检索下一个“Queued”会话并执行它。
startscen.sh脚本不是严格意义上的代理... ...必须考虑这个脚本作为一个执行文件启动,只有ODI方案(除非它用OdiStartScen工具启动其他子脚本) ... ...当脚本终止时,进程终止。
注意:
1。如果一个(父)方案包含对OdiStartScen工具的调用并在代理中在异步模式启动另一个(子)方案,那么在OdiStartScen调用后(父)方案将自动终止后,子进程将继续在远程代理上运行。
2。如果一个(父)方案包含对OdiStartScen工具的调用并在代理中在同步模式启动另一个(子)方案,然后将等待,直到遥控器上的代理终止再从它自己的进程自动退出..那么(父)方案将在他自己的进程自动退出之前一直等待直到在远程代理对OdiStartScen的调用(运行子进程)结束。
需要注意的是***- forbidden - ***从父方案用异步模式和THE STARTSCEN CALL(就是指不使用代理)方法启动子方案(从startscen.sh脚本启动) ***-UNLESS***- 启动OdiWaitForChildSession用来捕获在父方案里的子方案的结束时状态。
在负载平衡代理的情况下,在ODI里有一个叫Use the new Load Balancing的新参数,这要设置在户参数(在菜单文件中设置>用户参数<使用新的负载平衡)
当设置为“Yes”(默认值),这个参数允许自动重新分配超载的代理。
在这种情况下,如果使用此选项,那么,如果一个负载平衡代理设置崩溃,任何在这个崩溃的代理上的QUEUED方案将在第二个代理执行完他自己当前的列表后自动重新分配给其他(第二个)负载平衡代理 。
该贴被gang编辑于2011-12-30 10:00:42