TAF(扫描+ dataguard) JDBC数据源连接排错

  

<强>环境:RAC + dataguard weblogic 10.3.6
JDBC连数据库配置:
JDBC: oracle:薄:@(描述=(地址==(协议TCP)(主机=XX.XX.XX.xx)(端口=1521))(地址==(协议TCP)(主机=XX.XX.XX.xx)(端口=1521))(LOAD_BALANCE=no) (CONNECT_DATA=https://www.yisu.com/zixun/(服务器=专用)(SERVICE_NAME=tci) (FAILOVER_MODE=(TYPE=选择)(=基本方法)(重试=180)(延迟=5))))

  

<>强起因:
客户搬机房,搬完后,测试一切正常,离开现场后过了几天说连接数据库不正常,经常报数据库只读或正处于打开状态;
 TAF(扫描+ dataguard) JDBC数据源连接排错”> <br/> [com.primeton.das.entity.impl.hibernate.util。JDBCExceptionReporter: 77] ora - 16000:打开数据库以进行只读访问<br/>测试扫描地址好,萍好;网络工程师说了,网络没问题;<br/> <>强排查:</强> <br/>根据错误,很明显连到备库了,至于为啥连到备库(根据字符串,主库只有连不上,才会连备库,而检查主库是可用的,各种检查就不再阐述了),那就奇怪了。<br/> 1问题的不可再现性,决定了<br/> a)你要么用人干这活,一天到晚守着那,等终于逮着的那一刻;<br/> b)写个程序一天到晚守着那,去抓个日志;看一看,或许程序诚不欺你,<br/>最近运气不好,接连碰着各种炸库,选b吧,开始造程序:<br/>语言:JAVA JDK1.6即可<br/>编辑器:记事本+ +(很低的,干这事用eclipse不敢);<br/>代码:最基本的JAVA类库,加ojdbc6.jar(记得用11 g以后的)<br/>想法:要有个程序不停的连数据库,然后连得上写下时间,连的是哪个实例,连不上也得写下日志,当时的时间,最好带上网络的萍,怀疑网络,但人家说没问题,你也不能死赖是吧,<br/>编码:<br/>用到的包:</p>
  <blockquote>
  <p>进口javax.swing。<em>, <br/>进口java.awt。</em>, <br/>进口java.awt.event。<em>, <br/>进口java.sql。</em>, <br/>进口java.util。<em>, <br/> import . io . </em>, <br/>进口java.net.InetAddress; <br/>进口java.text.SimpleDateFormat; </p>
  </引用>
  <p>定义一个参数文件,要有知识产权,要有超时时限,要有日志文件输出地址;<br/> tbname.properties: </p>
  <pre> <代码>//定义导出的csv文件,注意要手动建立目录
  pname=test.csv//定义扫描连接地址
  ipaddr=XX.XX.XX.XX
  超时=3000 </代码> </pre>
  <p>读取办法:</p>
  <pre> <代码>{试
  ps=new属性();
  FileInputStream fis=new FileInputStream (“tbname.properties”);
  ps.load (fis);
  fis.close ();
  路径名=ps.getProperty (“pname”);
  ipaddress=ps.getProperty (“ipaddr”);
  超时=Integer.parseInt (ps.getProperty(“超时”));
  System.out.println(“写入路径”+路径名+“t \”+“连接扫描地址:”+ ipaddress);
  }捕捉(IOException e) {
  System.out.println (e.getLocalizedMessage()); </代码> </pre>
  </p> <p>}
  <p>定义数据库连接配置文件:oracle.properties,要有连接字符串,要有用户名/密码</p>
  <blockquote>
  <p> db_url=jdbc: oracle:薄:@(描述=(address_list=(地址=(主机=xx.xx.xx.xx)(协议(tcp)(端口=1521))(load_balance=NO)(故障转移=yes)) (connect_data=https://www.yisu.com/zixun/(service_name=orcl))) <br/> # db_url=jdbc: jtds::状态用户名=测试
密码=测试

     

相关方法:

  
  

公共连接getConnection()抛出ClassNotFoundException, IOException。
SQLException {
ps=new属性();
FileInputStream fis=new FileInputStream (“oracle.properties");
ps.load (fis);
fis.close ();
字符串url=ps.getProperty (“db_url");
字符串用户=ps.getProperty (“username");
字符串pwd=ps.getProperty (“password");
字符串司机=皁racle.jdbc.driver.OracleDriver";
forname(司机);
DriverManager返回。getConnection (url、用户pwd);
}

     

自定义的SQL语句,我这里比较恶心做了图形化,文本框:

  
  

公共空createUI () {
JFrame摩根富林明=new JFrame(“数据导出工具csv");
容器c=jf.getContentPane ();
c。setLayout(新FlowLayout (FlowLayout.LEFT、30、30));
//定义图标
ImageIcon ii=new ImageIcon (“main.gif");
图像图像=ii.getImage ();
JPanel面板=new JPanel ();
jf.setIconImage(图片),
textAreaOutput=new JTextArea(“从v $ instance"选择instance_name, 6、10);
textAreaOutput.setSelectedTextColor (Color.RED);
textAreaOutput.setLineWrap(真正的);//激活自动换行功能
textAreaOutput.setWrapStyleWord(真正的);//激活断行不断字功能
jf.setExtendedState (JFrame.ICONIFIED);
//选择数据库类型
ButtonGroup bg=new ButtonGroup ();

TAF(扫描+ dataguard) JDBC数据源连接排错