package decrypt;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ca.beq.util.win32.registry.RegistryKey;
import ca.beq.util.win32.registry.RegistryValue;
import ca.beq.util.win32.registry.RootKey;
public class TNSNamesReader {
/**
* 得到ORACLE_HOME 此处用到一个第三方组件:jRegistryKey
* @return
* @author zhangzongwang Dec 22,2009
*/
public String getOracleHome() {
String ORACLE_HOME = "";
RegistryKey r = new RegistryKey(RootKey.HKEY_LOCAL_MACHINE,
"SOFTWARE\\ORACLE");
if (r.hasValue("ORACLE_HOME")) {
RegistryValue v = r.getValue("ORACLE_HOME");
ORACLE_HOME = v.getStringValue();
}
return ORACLE_HOME;
}
/**
* 得到tnsnames.ora路径
* @param OracleHome
* @return
* @author zhangzongwang Dec 22,2009
*/
public String getTNSNAMESPath(String OracleHome) {
String oracleHomePath = this.getOracleHome();
String tnsNamesOraFilePath = "";
if (!oracleHomePath.equals("")) {
tnsNamesOraFilePath = oracleHomePath
+ "\\NETWORK\\ADMIN\\TNSNAMES.ORA";
if (!(new File(tnsNamesOraFilePath).exists())) {
tnsNamesOraFilePath = oracleHomePath
+ "\\NET80\\ADMIN\\TNSNAMES.ORA";
}
}
return tnsNamesOraFilePath;
}
/**
* 得到tnsnames.ora文件所有内容
* @param strTNSNAMESPath
* @return
* @author zhangzongwang Dec 22,2009
*/
public String getTNSNamesStr(String strTNSNAMESPath) {
String output = ")";
String fileLine;
InputStream in = null;
BufferedReader sr = null;
try {
in = new FileInputStream(strTNSNAMESPath);
sr = new BufferedReader(new InputStreamReader(in));
while ((fileLine = sr.readLine()) != null) {
if (fileLine.length() > 0 && fileLine.indexOf("#") == -1) {
output += fileLine.trim();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
sr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
output = output.replaceAll(" ", "").toLowerCase();
return output;
}
/**
* 解析
* @return
* @author zhangzongwang Dec 22,2009
*/
public List<Map<String, String>> loadTNSNames() {
String OracleHome = this.getOracleHome();
String tNSNamesStr = this.getTNSNamesStr(this
.getTNSNAMESPath(OracleHome));
Pattern ptn = Pattern
.compile("(\\)\\w+|host|port|service_name)\\=(\\(|\\d+\\.\\d+\\.\\d+\\.\\d+|\\d+|\\w+)");
Matcher match = ptn.matcher(tNSNamesStr);
int start = 0;
int i = 0;
Map<String, String> map = new LinkedHashMap<String, String>();
List<Map<String, String>> list = new ArrayList<Map<String, String>>();
while (match.find(start)) {
String str = tNSNamesStr.substring(match.start(), match.end())
.replace(")", "");
String[] strs = str.split("=");
if ("(".equals(strs[1])) {
if (i != 0) {
list.add(map);
map = new LinkedHashMap<String, String>();
}
map.put("sid", strs[0]);
} else {
if (map.containsKey(strs[0])) {
map.put(strs[0] + "1", strs[1]);
} else {
map.put(strs[0], strs[1]);
}
}
start = match.end();
i++;
}
list.add(map);
return list;
}
/**
* 只要SID
* @return
* @author zhangzongwang Dec 22,2009
*/
public String[] loadTNSNameSID(){
List<Map<String, String>> list = this.loadTNSNames();
List<String> tsnNameSID = new ArrayList<String>();
for(Map<String,String> mp : list){
Set<String> set = mp.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next().toString();
String value = mp.get(key).toString();
if("sid".equals(key)){
tsnNameSID.add(value.toUpperCase());
}
}
}
String[] str = new String[tsnNameSID.size()];
return tsnNameSID.toArray(str);
}
}
分享到:
相关推荐
### 认识Oracle中的sqlnet.ora、tnsnames.ora与listener.ora三个关键配置文件 #### 一、概述 在Oracle安装过程中,我们常常会在安装目录下的`$HOME/network/admin`文件夹中发现三个重要的配置文件:`sqlnet.ora`、...
【tnsnames.ora配置】是Oracle数据库网络配置中的一个重要组成部分,主要负责将易于记忆的TNS名称映射到实际的主机名或IP地址以及相关的服务信息。tnsnames.ora文件通常位于$ORACLE_HOME/network/admin目录下,与...
本文将详细介绍`listener.ora`、`sqlnet.ora`、`tnsnames.ora`这三个核心配置文件的作用及其配置方法。 #### 1. `sqlnet.ora` 文件 `sqlnet.ora`文件的作用类似于Linux或其他Unix系统中的`nsswitch.conf`文件,它...
其中,`tnsnames.ora`是Oracle客户端用于存储连接描述符的重要配置文件之一。本文将详细介绍如何配置Oracle的`tnsnames.ora`文件,尤其是在使用PL/SQL Developer工具时的相关步骤。 #### 一、系统环境变量的配置 1...
Oracle 配置 TNSNAMES.ORA 文件详解 oracle 配置 TNSNAMES.ORA 文件是 Oracle 网络配置的关键步骤。正确配置 TNSNAMES.ORA 文件可以确保 Oracle 客户端与服务器端之间的顺畅连接。本文将详细介绍如何正确配置 ...
`listener.ora` 文件是Oracle数据库系统中至关重要的网络配置文件之一,它负责管理数据库的监听器服务,确保外部应用程序能够通过网络访问到Oracle数据库。监听器的主要职责是接收远程请求并将这些请求分发到正确的...
Listener.ora、sqlnet.ora、tnsnames.ora三个配置文件是Oracle数据库中三个重要的配置文件,每个文件都有其特定的作用和用途。 首先,Listener.ora文件是用于配置Oracle listener的。Listener是 Oracle数据库的监听...
例如,`NAMES.DIRECTORY_PATH=(TNSNAMES, ONAMES, HOSTNAME)`表示首先使用`tnsnames.ora`中的别名配置进行连接尝试,如果失败则依次尝试使用Oracle Name Server (ONAMES) 和主机名 (HOSTNAME) 进行解析。 **3\. SQL...
### Oracle配置文件详解:tnsnames.ora, listener.ora, sqlnet.ora #### 一、概述 在Oracle数据库的网络配置中,有三个重要的配置文件:`listener.ora`、`sqlnet.ora` 和 `tnsnames.ora`。这些文件位于 `$ORACLE_...
同时,修改完配置文件后,通常需要重启监听器服务以使配置生效。 7. Oracle提供的网络配置工具,如Net Manager或命令行工具Lsnrctl,可以帮助管理员更方便地配置和管理tnsnames.ora文件及其监听器,包括启动、停止...
3. 配置环境变量TNS_ADMIN,指向tnsnames.ora文件所在的目录,tnsnames.ora文件定义了数据库连接的详细信息。 4. 重启Navicat for Oracle,尝试重新连接Oracle11g数据库。 "IT猫扑网_百度搜索.url"和"IT猫扑网.url...
2. **环境变量一致性**:在配置文件中指定的所有环境变量必须保持一致。 3. **监听文件的一致性**:`listener.ora`和`tnsnames.ora`文件中的配置需要相互匹配。 4. **操作系统差异**:根据操作系统选择正确的类库...
根据提供的文档内容,我们可以归纳出一系列与Oracle 9i数据库管理相关的网络工作坊场景案例,这些案例主要聚焦于解决配置文件中的常见问题,包括TNSNAMES.ORA、LISTENER.ORA以及SQLNET.ORA等文件中的错误。...
在Oracle 19c的配置文件中,有三个主要的配置文件需要注意:listener.ora、sqlnet.ora和tnsnames.ora。这些文件定义了Oracle数据库服务端的监听器配置、网络访问和服务名称解析设置。 - **listener.ora**文件配置了...
本文将深入解析Oracle命名方法配置的核心要点,帮助读者理解并掌握这一重要技术。 #### 1. Oracle命名方法概览 Oracle命名方法(Name Resolution Methods)用于指定如何解析数据库实例的网络地址,使客户端能够...
- **listener.ora**: 监听器配置文件,用于定义监听器的服务地址、端口和协议。 - **tnsnames.ora**: 定义了客户端如何连接到服务器上的数据库实例。 - **sqlnet.ora**: 用于配置安全性和网络参数。 - **lsnrctl.ora...
### Oracle的网络三大配置文件详解 #### 一、概述 Oracle数据库系统为了支持客户端与服务器之间的通信,设计了一套完整的网络配置方案。其中最核心的三个配置文件是`listener.ora`、`sqlnet.ora`和`tnsnames.ora`...
本文将深入解析Oracle监听器的配置文件以及不同的访问方式。 首先,Oracle网络配置涉及三个主要文件:`listener.ora`、`sqlnet.ora`和`tnsnames.ora`,它们均位于`$ORACLE_HOME\network\admin`目录下。 1. `sql...
9. **检查tnsnames.ora文件**:最后检查`tnsnames.ora`文件中对应服务名的配置信息是否已正确添加。 #### 二、添加监听程序 **知识点概述**: - **监听程序配置**:通过修改`listener.ora`文件来设置监听器的信息...