通过 plsql 连接远程 Oracle数据库的多种方法
方法一:通过 plsql 工具和 oracle client(不是即时客户端 instantclient) 的方式来连接 Oracle
一、 安装 oracle client,(本教程已经下载并解压)
二、 选 择 管 理 员 安 装 ,如图:
三、剩下的就是一路下一步就 OK,安装完成后在 doc 窗口执行,sqlplus 如 果 出 现 如 下 输 入 用户名 , 就 表 示 安 装 成 功
四、安装 plsql(本教程 Oracle 为 11gr2,所以 plsql 也安装了版本 11,其余版本相同),并安装语言包 ,安装说明省略。
五、安装完成后现在开始配置连接,安装 Oracle client 后已经自动将安 装 目 录 添 加 到 环 境 变 量 中 , 如图:
六、下面配置 plsql ,点击软件先不登陆然后弹出全局界面然后找到工 具 – 首 选 项 – 如图:
七、 配置完 plsql 之后现在配置连接 Oracle 数据库的信息,进入 oracle dlient 安装目录找到 network 下的 admin 下的 tnsnames.ora 文件, 如图:
打 开 此 文 件 加 入 如 下 内 容 :
八、 本地需要配置的已经完成,接下来检查服务器上的相关文件,首先查看 Oracle 服 务 器 安 装 目 录 下 的 tnsnames.ora 文 件 和 listener.ora 文 件 ,如下 :
listener.ora文件主要是为了 配置listener.ora静态监听。
# listener.ora Network Configuration File: D:\soft\oracle\base\product\11.2.0\dbhome_1\network\admin\listener.ora# Generated by Oracle configuration tools. SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(SID_NAME = ORCL)(ORACLE_HOME = D:\soft_install_route\oracle_install\product\11.2.0\dbhome_1))(SID_DESC =(SID_NAME = HSUN)(ORACLE_HOME = D:\soft_install_route\oracle_install\product\11.2.0\dbhome_1) )) LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))ADR_BASE_LISTENER = D:\soft_install_route\oracle_install
详解各个属性:
第一:LISTENER部分包含协议地址列表,每个实例一个入口,监听名称,可以配置多个监听,多个监听的端口号要区分开来
第二:SID_LIST_LISTENER部分标识全局数据库名称、标识监听程序正在服务的每个实例的Oracle软件主目录以及实例或SID。
第三:SID_LIST描述用于静态数据库注册、保持和以前的版本兼容性以及供Oracle Enterprise Manager使用,因为我本地有三个数据库,如图:
所以需要配置SID_LIST是一个数组如:
SID_LIST =(SID_DESC =(SID_NAME = ORCL)(ORACLE_HOME = D:\soft_install_route\oracle_install\product\11.2.0\dbhome_1) )(SID_DESC =(SID_NAME = HSUN)(ORACLE_HOME = D:\soft_install_route\oracle_install\product\11.2.0\dbhome_1))
第四:SID_NAME :服务器端(本机)的SID
如果配置文件中的 host 后面的值和本机名不一样那么启动监听会报错或者无 法连接,window 也是一样要和本机名一样,如果是 Linux 系统还要如果修改 了本机 名 字 还 要 保 证 /etc/hosts 下 有 添 加 记 录 , 如 图 , ( 本 机 IP 为 192.168.240.139)
九、 此处修改完剩下的就是查看端口 1521 是否开启,window 可以在防火墙中开 放端口 ,linux 也 可 以 通 过 命 令 firewall-cmd –zone=public –add-port=1521/tcp –permanent 来开启,并重启防火墙, 然后可以查看 1521 端 口 信 息 , 使 用 命 令 netstat –n –a
十、 前面如果是 127.0.0.1 那只能本地连接,不可以远程连接端口,前面只有都是 0 的时候才可以使用远程连接,可以使用 telnet 来测试 1521 端口是否开启, window 也是一样上述都搞定之后打开 plsql
十一、 输 入 用户名密码进行连接 ,如图:
方法二:通过 plsql 和 oracle 即时客户端(instantclient)来连接 oracle 数据库 下 载 即 时 客 户 端 ( 基 本 版即可 )
一、解压后在目录下创建 network 目录,在 network 目录下创建 admin 目录,然后创建 tnsnames.ora 文件,并加入内容(上面有示例),然后配置 plsql,配置方法和方法一相同 接下来需要配置环境变量,安装版的环境变量已经配置好了,但是此免安装版的需要配 置下环境变量, 将这个目录添加到环境变量 path 中 ,如图:
二、将 tnsname.ora 所在位置加入环境变量中,如下:
三、如果出现乱码则可以在在环境变量中添加如下内容:
四、 本地 plsql 和环境变量以及 tnsname.ora 都配置完毕,接下来还是和方法一的步骤一样检 查 oracle 所在服务器的信息,包括端口是否开启,监听是否开启,oracle 实例是否启动 以及配置文件 listener.ora 以及 tnsname.ora 配置是否正确(host 和本机名要一样) 所有的检查没问题后可以使用 plsql 进行链接,方法和上面一样 注:查看监听是否启动要首先进入 oracle 用户下,su – oracle 然后执行命令 lsnrctl status 可以查看,如果为启动则执行命令 lsnrctl start 启动监听,然后执行 sqlplus /as sysdba 登录(已 dba 的权限登录) 然后执行 startup 来开启数据库实例,如果关闭数据库实例可 以执行 shutdown immediate(也要 dba 权限才可以其余不行),windows 方法一样,window 也可以去服务里开启监听 。
三、连接报错 ORA-12154: TNS:could not resolve the connect identifier specified
标识符。这说明缺少了一个环境变量,TNS_ADMIN 。
解决方法:
windows:
右击 我的电脑 -> 属性 -> 高级 -> 环境变量->系统变量->新建
变量名:ORACLE_HOME
变量值:D:\app\Administrator\product\11.2.0\dbhome_1
右击 我的电脑 -> 属性 -> 高级 -> 环境变量 -> Administrator 的用户变量 -> 新建 ,
变量名为:TNS_ADMIN
变量值为:%ORACLE_HOME%/NETWORK/ADMIN/
其中 %ORACLE_HOME% 即 Orcale 的安装路径,
其实,设置的该环境变量的值为 tnsnames.ora文件所在路径,特别是重装后或其它操作,忘了设置
TNS_ADMIN 变量,PL/SQL 登陆就会报“无法解析指定的连接标识符”的错误 ,而设置TNS_ADMIN变量是为了能够找到 tnsnames.ora。如果本机上安装了ORACLE,并且设置了 ORACLE_HOME 环境变量,那么会自动在 %ORACLE_HOME%/NETWORK/ADMIN/位置查找 tnsnames.ora 文件。
这里是Linux的配置
vim ~/ .bash_profile# .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then. ~/.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/binexport PATHTMP=/tmp; export TMPTMPDIR=$TMP; export TMPDIRORACLE_HOSTNAME=yidongapptestdb; export ORACLE_HOSTNAMEORACLE_UNQNAME=MIBD11G; export ORACLE_UNQNAMEORACLE_BASE=/u01/app/oracle; export ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOMEORACLE_SID=MIBD11G; export ORACLE_SIDPATH=/usr/bin:$PATH; export PATHPATH=$ORACLE_HOME/bin:$PATH; export PATHLD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATHCLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATHexport TNS_ADMIN=/u01/app/oracle/product/11.2.0/db_1/network/admin