A. Win7下如何实现连接到不同网络自动切换代理Pac脚本
PAC的配置方法非常简单,不需要安装任何软件或插件,只需用记事本建立一个脚步文件即可,我们可以把这个文件保存在硬盘的任何位置,也可以保存在服务器上,然后打开Internet选项 - 进入 连接 选项卡 - 点击局域网选项 - 选中 使用自动配置脚本 选项 - 在地址里面填入你的文件位置,比如files://d:/goagent.pac ,即可完成配置。
B. oracle数据库如何每天自动执行脚本完成正式数据库到备份数据库的备份
写个脚本完成正式数据库到备份数据库的备份
再设定Task Schele 每天某个时间自动执行这个脚本
C. 如何在dataguard环境做到client的自动切换
如果做通用的方案,需要客户端自己提供自动重连的能力,这点大多数Java的occi的连接池都有实现。
但这些已有实现大多是对同一连接配置发起重连,所以需要考虑为application提供透明的连接方式,而不让应用看到具体data guard的多个ip和service name,这就需要做些额外的配置工作。
一种方式通过vip,真实转发的ip只挂靠在有效数据库的ip上。这种方式切换发生后,application在断连的旧connection上发起dml会获得ORA-3113 "end of file on communication channel"的错误,此时application可以尝试重连机制和新的primary建立连接。
在f5上可以通过设置心跳sql和期望的返回结果内容,以类似ping方式获取远端数据库是否可用,来决定ip是否应该转发到该物理ip上。
另一种方式是通过设置tns和数据库的service name来访问,通过合理设置,甚至可以做到在发生切换时的select操作仅仅被阻塞一会,而不会感觉到数据库已经完成了主备切换。
设置步骤如下:
1.客户端的tnsnames.ora中tns配置成
MYAPP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = HostA)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = HostB)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = myapp)
)
)
2.在primary数据库运行
begin
dbms_service.create_service("myapp","myapp");
end;
/
begin
DBMS_SERVICE.START_SERVICE("myapp");
end;
/
3.在primary数据库创建触发器:
create trigger myapptrigg after startup on database
declare
v_role varchar(30);
begin
select database_role into v_role from v$database;
if v_role = "PRIMARY" then
DBMS_SERVICE.START_SERVICE("myapp");
else
DBMS_SERVICE.STOP_SERVICE("myapp");
end if;
end;
/
解释下:这个方案的思路就是将两边的数据库的service name都设置成"myapp",当发生切换时,由触发器在数据库startup的时候把primary的实例以"myapp"的名字显示,而把standby的"myapp"服务名给停掉,这样任何时刻只有主节点显示名字为"myapp"的服务。
注意这里的plsql都是运行在primary,无需在standby上做任何设置,因为data guard会自动将变化同步到standby数据库。
通过在primary数据库运行下面程序,可以让客户端在做select的时候甚至意识不到数据库的切换:
begin
dbms_service.modify_service
("myapp",
FAILOVER_METHOD => "BASIC",
FAILOVER_TYPE => "SELECT",
FAILOVER_RETRIES => 200,
FAILOVER_DELAY => 1);
end;
/
注意如果在切换时有comit的提交事务发生,还是会出现失误提交失败,要求回滚的情况。
下面tns是另一种配置方式(类似rac的failover配置思想),使用这种方式,不需要在Oracle server中运行任何plsql脚本,在DESCRIPTION_LIST中的两个数据库甚至根本不需要处于data guard中,可以是任意两个数据库。driver会按顺序遍历list中的数据库,一直到能连接上为止。
MYAPP =
(DESCRIPTION_LIST=
(LOAD_BALANCE=off)
(FAILOVER=on)
(DESCRIPTION =(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=10)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = myapp1)
)
)
(DESCRIPTION =(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=10)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = otherIP)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = myapp2)
)
)
)
这种方式需要注意的地方:
1.jdbc必须走oci的方式,如果为jdbc:thin+tns方式,则会出现
Exception in thread "main" java.lang.: 545
at oracle.NET.nl.NVTokens.parseTokens(Unknown Source)
at oracle.Net.nl.NVFactory.createNVPair(Unknown Source)
其原因在于jdbc的driver本身无法识别这种格式的tns内容。
此时即使以jdbc:thin+tns的方式访问其他正常的tns也会一样抛出这个错误,因为这导致了jdbc根本无法正确解析整个tnsnames.ora文件。
而jdbc:oci实际上负责解析tnsnames.ora和处理通信的是依赖oci.lib,因此就不存在这个问题。
2.这种配置适用于任何依赖oci通信的客户端,包括oci,occi,一些基于它们的wrap库,以及pl/sql developer此类的工具软件。
3.注意如果连接的数据库组属于manually switch的模式,而不是fail down导致的切换,比如tns中的a数据库是mount状态,b是primary,而tns的列表顺序是先a后b,则会出现尽管客户端连a时,抛出ORA-0133错误,但是不会按顺序去尝试连接b。
原因是在处理这个链接时,oci客户端会尝试通过listener和service建立连接。
如果listener是关闭的,或者客户端能连上listener但是找不到对应service,则都会尝试连接处于第二个的b,但是如果通过listener找到了对端的service,只是无法建立连接(如数据库处于mount状态),则此时不会尝试连接b,而直接会以抛出
ORA-0133:ORACLE initialization or shutdown in progress
终止连接尝试。
所以在使用这种tns的时候要确保通过tns列表能访问到的所有数据库都不会一直处于mount状态,否则连接它会打断对后面正常open数据库的连接尝试。
这也是为何手动切换的dataguard数据库,客户端不能依赖这种tns配置方法做自动切换,因为手动切换的dataguard数据库状态肯定是一个open一个mount,如果mount处于tns的列表靠前的位置,在连接它失败后会抛出ORA-0133异常阻止客户端尝试连接正常open的那个数据库。
D. 按键精灵如何自动切换脚本
简单的思路,
如你把a脚本的启动键设置为f8,终止为f9,
b脚本的启动键设置为f10,终止为f11
编写第三个脚本控制这两个脚本,思路如下:
循环开始
按键f8,启动a脚本
延时1800秒,即30分钟
按键f9终止a脚本,按键f10,启动b脚本
延时1800秒
循环终止
E. 实现WEB服务器当机子自动切换到备用WEB服务器上面!
看你怎么访问你的web了,如果是ip地址访问,做的麻烦点,需要1,2上面都做设置
如果是域名访问,可以用dns来解决,需要有宕机检测
以上是网络解决,要不就多一个网卡做心跳线互联,自己写脚本
F. 求个自动在2个窗口之间切换的脚本。前台后台无所谓,一定要是按键精灵
你只要录制就行了
再把延时DELAY改成1000
就是点录制之后先点一下第一个窗口,过一秒再点第二个窗口,然后保存