Oracle TNS配置 与程序连接Oracle数据库

Oracle11g安装完整教程并创建数据库实例

连接数据库

先安装Oracle Client 这会安装Oracle的ODBC驱动。

使用“PLSQL Developer 12绿色汉化版”打开界面,输入连接信息即可。

先要创建一个用于连接用户

权限设置为连接,最好还要设置有创建表的权限,不然这个用户无法创建表也挺扯淡的。

create user zhangsan identified by 123456;
grant create any table to zhangsan; 

表空间权限

no privileges on tablespace 'USERS'

grant  resource to ccrt;

plsql dev中Dynamic Performance Tables not accessible分析解决

Oracle字符集基本原理

查看数据库字符集

select userenv('language') from dual;

C++连接Oracle远程数据库

本机要装Oracle Client客户端,装了客户端以后ODBC数据源里才可以配置连接数据源:

TNS

如果通过TNS连接Oracle,那么客户端必须安装Oracle client程序

TNS no listener无监听程序

解决方法(操作Oracle数据库所在的机器)

    步骤一:配置客户端tnsnames.ora

...\instantclient-basic-win32-11.2.0.1.0\instantclient_11_2\NETWORK\ADMIN
  • 1

这里写图片描述
    步骤二:配置服务端listener.ora

...\product\11.2.0\dbhome_1\NETWORK\ADMIN
  • 1

这里写图片描述

    步骤三:重启一下监听(管理员命令行):lsnrctl stoplsnrctl start 

 

listener.ora配置文件

配置文件位置:

D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora

配置文件主要内容:

IP:这个如果是本机最好写成本机计算机名:carea-PC,不要写成localhost或者具体的IP

查看本机计算机全名:我的电脑,属性,计算机全名

否则会出现如下错误:

“Enterprise Manager配置失败-监听程序未启动或数据库服务未注册到该监听程序解决办法”

 

PORT

SID

对应的服务端服务:

TNSListener

配置文件的主要作用:

  • 用来供远程客户端访问本地数据库,具体过程如下:
    • 远程客户端通过当地的TNS文件:IP/PORT/SID来到本机
    • 本机的TNSListener通过跟本机的listener.ora中的内容匹配:
    • 全局数据库名称= find(ip/port/sid)得到一个唯一的数据库实例
  • 访问方式为IP/PORT/TNS(SERVICE_NAME/SID),SID主要用来映射本地“全局数据库名”

SID配置:

 

监听配置:

 

正常的配置如下:

# listener.ora Network Configuration File: D:\app\product\11.2.0\dbhome_1\network\admin\listener.ora

# Generated by Oracle configuration tools.

 

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = CLRExtProc)

(ORACLE_HOME = D:\app\product\11.2.0\dbhome_1)

(PROGRAM = extproc)

(ENVS = "EXTPROC_DLLS=ONLY:D:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")

)

)

 

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-MM5L6U6)(PORT = 1521))

)

)

 

ADR_BASE_LISTENER = D:\app\carea

tnsnames.ora配置文件

位置:

    • 本机如果装了oracle数据库,则配置文件:
      • D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
    • 如果本机只装了客户端,则配置文件:
      • D:\app\Administrator\product\11.2.0\client_2\network\admin
    • 还可以自己设置配置文件的位置:
      • 设置环境变量:%TNS_ADMIN%

 

作用:

  • 用来本地客户端连接远程Oracle数据库
  • 其中每一个分支里面有对方的IP/PORT/SID(SERVICE_NAME)信息
  • 连接本地数据库也需要此配置文件
  • 修改此文件不需要重启任何服务

 

内容:

远程数据库的基础信息:

  • IP:这个应该写成具体的IP,哪怕是本机,不要写localhost这样的地址
  • PORT
  • SID:SERVICE_NAME

完整示例:

# tnsnames.ora Network Configuration File: D:\app\product\11.2.0\dbhome_1\network\admin\tnsnames.ora

# Generated by Oracle configuration tools.

 

LISTENER_ORCL =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.228)(PORT = 1521))

 

 

ORACLR_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)

(CONNECT_DATA =

(SID = CLRExtProc)

(PRESENTATION = RO)

)

)

 

ORCL = 【这个名字是可以重命名的,用于本地使用】

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.228)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl) 【这个名字是固定的,是对方机器上的数据库服务名】

)

)

TNSListener service无法启动

 

启动不起来的原因:

可能是listener.ora配置文件添加了一些其他IP地址(非本机IP地址)

解决方法:

将非本机IP删掉

Oracle 'no privileges on tablespace 表空间名称' 问题解决

create user bryan identified by bryan;

grant create session to bryan;

grant create table to bryan;

connect  bryan/bryan;

create table bryan_employees

(

     emp_no number,

     emp_name varchar2(50)

);

创建表时会报如下错误:'no privileges on tablespace 'USERS'

原因在于users表空间中没有为bryan用户提供配额空间(在此默认的表空间为users)

有两种解决方案:

1.为bryan用户在users表空间上设置配额就可以了

alter user bryan quota 4M on users;       //quota:配额,限额

2.GRANT UNLIMITED TABLESPACE TO bryan;

 

C++ OTL 读写Oracle数据库

Oracle数据库C++ OTL插入乱码解决:

1 C++程序运行的机器设置注册表计算机\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1 NLS_LANG AMERICAN_AMERICA.ZHS16GBK ;

2 C++代码插入数据使用UTF8编码;

3 Oracle数据库中的编码为 select userenv('language') from dual; 结果 AMERICAN_AMERICA.AL32UTF8

原理请参考:https://blog.csdn.net/calmreason/article/details/108001111

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值