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 stop
、lsnrctl 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数据库,则配置文件:
作用:
- 用来本地客户端连接远程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