《oracle马拉松》plsql篇

发布时间 2023-04-06 09:22:22作者: Fusio

安装和配置

安装

plsql的安装比较简单,根据系统,安装64位或32位的plsql,一路next即可。

配置(Instant client)

0、安装前注意。
instant client和plsql的版本要对应,64位plsql对应64位的instant client。
否则,报错Initialization error 不能初始化 oci.dl。
image

1.下载,解压Instant Client压缩包,找到配置文件。
image

2.在trsnames.ora文件中添加如下代码:

SERVICE_NAME =
(DESCRIPTION =
	(ADDRESS_LIST =
	  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.131)(PORT = 1521))
	)
	(CONNECT_DATA =
	  (SID = orcl)
	  (SERVER = DEDICATED)
	)
)

注意填写自己的服务名称、地址和端口号。

3.打开plsql,取消登录,选择:“Tools”--“Preferences”-- “Connection”中的Oracle Home处填写oci.dll文件夹的地址,在OCI library中填写oci.dll文件的地址,然后“Apply”--“OK”,重启plsql即可。

image

这里第一个填的是oci.dll所在文件夹,第二个填的是oci.dll的位置。根据instant client的解压情况,可能不一样,根据情况填写即可。也有目录如下
image

4.配置环境变量TNS_ADMIN
image

如果不配置,在plsql中登录会出现如下错误:
image

5.配置环境变量NLS_LANG

变量名:NLS_LANG
变量值:AMERICAN_AMERICA.AL32UTF8

image

如果不配置会出现以下问题:

1.部分查询语句查不到数据
2.进入plsql之后会提示字符不一致。

plsql连接数据库的3种方式

本地pc机上的plsql连接本地Oracle库和其他远程环境的Oracle database库,都必须通过本地pc机上的client配置连接,client连接有三种配置方式:

方式一:只需要在本地安装oracle client的tnsnames.ora文件中,添加TNS(连接串)即可;

tnsnames.ora文件所在的目录,这个要看自己的Oracle安装目录,每个人的安装目录可能不一样,本人的安装目录在F盘,所以在下列目录下:

F:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN
image

在这个文件中,添加TNS信息之后,点击保存即可;

TEST=
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
  (CONNECT_DATA =
   (SERVICE_NAME = testlg)
   (SERVER = DEDICTED)
  )
 )

然后打开plsql登录界面,数据库下拉选中,可以找到刚配置的TNS服务名称,对应关系如下图:
image

方式二:通过oracle client图形界面来配置数据库连接(推荐):

Net Manager图形配置工具对Oracle客户端进行配置,该配置工具实际上是修改Oracle client的tnsnames.ora文件,推荐使用这种图形界面方式。
image

选择服务名称,点击新增:
image

这个网络服务名是自己给数据库连接起的一个名字,就是plsql下拉选中显示的名称,可以自己定义;
image

一般连接的协议都是tcp,如果没有特殊情况,都选择这个协议:
image

这个主机名一般都是主机ip,如果是本地库,就写本地ip,如果是远程库,就写远程ip:
image

服务名是远程数据库名称,当然,这个也可以配置本地数据:
image

最后关闭时,会提示是否保存,一定要保持之后,才能写入到tnsnames.ora文件中生效:
image

查看tnsnames.ora文件如下,然后打开plsql登录,下拉可以看到对应的名称,和直接修改tnsnames.ora是一样的效果:
image

方式三:通过instant client来配置数据库连接:

Instantclient是oracle连接的一个客户端之一,通常只是登录使用,功能比较简单,相比oracle client而言,功能要简单的多,体积小,轻量级;

具体使用如下:

1.下载对应版本的Instantclient(注意32位和64位),有免安装版的,网上都很多教程;

2.然后打开plsql不登录,打开界面,然后配置Instantclient客户端路径:
image

配置连接,将instantclient配置进去,例如我的instantclient的位置如下:

Oracle主目录名:F:\Oracle\instantclientx32\instantclient_12_2

OCI库:F:\Oracle\instantclientx32\instantclient_12_2\oci.dll

image

此处配置好之后,提示下次登录生效,然后关闭plsql;

3.配置TNS连接:

找到instantclient客户端的TNS配置文件,然后将数据库的TNS连接串配置进去:

例如我的TNS配置文件位置:
image

然后将TNS配置到这个文件中:
image

配置好之后,保存就可以了;

4.打开plsql登录:

plsql登录界面登录:
image

这里要注意的是,这个数据库指的是刚配置中的自定义连接名,而且要手动输入,下拉选中没有配置的选项,但是不影响连接;(oracle client客户端可以看到配置的选项;)

5.此外,也可以直接在数据库行输入IP地址,端口号,数据库名。用户名、密码进行登录.
image

上述的三种方式配置实际上是两种,前两种是oracle client的不同配置方式,第三种是instant client的配置,这三种配置可以是本地库,也可以是远程库,配置好之后,在plsql登录的时候可以根据需要来选择;

问题及报错

解决plsql中文乱码问题(查询显示问号???)

问题描述

1、打开 plsql,执行 sql 语句,中文显示乱码:

---查询表中记录
select * from person;

image

解决办法:

1)查看服务器端编码
输入 sql 语句:

select userenv('language') from dual       -- 查看数据库字符集

image

我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK

2)执行 sql 语句 :

select * from V$NLS_PARAMETERS    -- 查看本地字符集

查看第一行中PARAMETER项中为NLS_LANGUAGE 对应的VALUE项中是否和第一步得到的值一样。如果不是,需要设置环境变量,否则PLSQL客户端使用的编码和服务器端编码不一致,插入中文时就会出现乱码.

image

我实际查到的为AMERICAN

3)设置环境变量
计算机->属性->高级系统设置->环境变量->新建
设置变量名:NLS_LANG,变量值:第1步查到的值,(这里的变量值需要与数据库服务器相同)
我的是 AMERICAN_AMERICA.ZHS16GBK

image

4)重新打开 plsql,执行 sql 语句,问题解决
image

过程中遇到的问题:
注:当完成以上4个步骤时,查询原来的记录还是问号????,只有新插入的记录才会正常显示。不知道这个怎么解决?

PL/SQL报错:A query with LOB's requires OCI8 mode, but OCI7 mode is used

在用pl/sql对客户的数据进行查询时,pl/sql给我报了如下的错误 :
image

我使用的pl/sql的版本号为:9.0.0.1601.

解决办法:

1.换个更高版本的pl/sql

2.更改pl/sql的配置

a) tools --> Preferences

b) 将 Oracle --> Connection 里面的 Force OCI7 mode on OCI8 不要勾选
image

c) 保存后重启pl/sql。

注:什么叫做OCI?

ORACLE调用接口(Oracle Call Interface简称OCI)提供了一组可对ORACLE数据库进行存取的接口子例程(函数),通过在第三代程序设计语言(如C语言)中进行调用可达到存取ORACLE数据库的目的。

连接oracle报错,TNS :could not resolve the connect identifier specified

今天老师给了一个数据库,我想先看看,然后又不想破坏我现在的数据库数据(因为表名相同)所以就再新建了一个数据库,本来想着很简单就可以解决了,没想到用plsql连接时报了could not resolve the connect identifier specified的错误
image

解决
1先检查Oracle服务有没有开启
2检查%ORACLE_HOME%\product\10.2.0\db_1\NETWORK\ADMIN里的tnsnames.ora文件是否包含了你的数据库,注意这里需要检查你的新建数据库写法是否正确。
3用sqlplus连一下,如果可以连上,那么就很有可能是你的plsql的tnsnames.ora文件错误啦,找到你的plsql的目录,我的是E:\app\Ruby\product\instantclient_10_2,然后把tnsnames.ora替换为%ORACLE_HOME%\product\10.2.0\db_1\NETWORK\ADMIN目录下的tnsnames.ora文件,重启plsql就成功了!

解决本机127的端口1521通,其他ip不通

1. 问题
  我的环境是oracle11gr2,本地用plsql还是toad连接都没有任何问题,而用别的机器远程连接就提示 无监听程序等错误。

2. 原因
  oracle安装路径 --- 例如: F:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN 下面的 listener.ora 和 tnsnames.ora 这两个文件 打开看一下
image

image

数据库时,本地可以连,而远程连接不了!

3. 解决办法
  将上面两个文件中 高亮的localhost全部替换成本机的计算机名。 然后重新启动oralce服务 和监听就可以了。