win7添加oracle数据源(ODBC)

今天有一个VB写的小程序出现了问题,连接是提示[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序.第一反应就是系统没有配置数据源。

20151118151807

在打开系统数据源(ODBC),添加发现并没有oracle的驱动程序。看来得先添加oracle驱动程序。去官网下载.地址:
http://www.oracle.com/technetwork/topics/winsoft-085727.html

instantclient-basiclite-nt-12.1.0.2.0.zip
instantclient-odbc-nt-12.1.0.2.0.zip

1.把下载的好的两个压缩包解压到同一目录下,如D:\instantclient_12_1
2.再创建tnsnames.ora文件
目录如下D:\instantclient_12_1\NETWORK\ADMIN\tnsnames.ora,目录NETWORK\ADMIN是不存在的目录,自己创建。

3.编辑tnsnames.ora文件,HOST 修改为自己的数据库ip,SERVICE_NAME修改为需要连接的数据库名字,格式如下:

barcode =
    (DESCRIPTION =
        (ADDRESS_LIST =
             (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521))
        )
        (CONNECT_DATA =
             (SERVICE_NAME = barcode)
        )
    )

4.添加系统环境变量TNS_ADMIN,值D:\instantclient_12_1\NETWORK\ADMIN,根据自己的具体情况创建.

5.双击instantclient_12_1目录下的odbc_install.exe进行安装.界面会一闪过。

6.打开控制面板\所有控制面板项\管理工具\数据源(ODBC),验证是否安装成功。

 

oracle表空间满

最近一段时间发现程序在晚上同步数据时会假死,程序没有输出异常信息,但是用浏览器访问后页面空白,重启后后正常了,一开始以为是程序晚上同步数据时有2万多个空指针,导致内存溢出,然后卡死,把异常数据清理后发现问题依旧。在同步数据时卡死,那么数据库也嫌疑犯之一。首先查看表空间的使用情况:

 SELECT tbs 表空间名,
       sum(totalM) 总共大小M,
       sum(usedM) 已使用空间M,
       sum(remainedM) 剩余空间M,
       sum(usedM) / sum(totalM) * 100 已使用百分比,
       sum(remainedM) / sum(totalM) * 100 剩余百分比
  FROM (SELECT b.file_id ID,
               b.tablespace_name tbs,
               b.file_name name,
               b.bytes / 1024 / 1024 totalM,
               (b.bytes - sum(nvl(a.bytes, 0))) / 1024 / 1024 usedM,
               sum(nvl(a.bytes, 0) / 1024 / 1024) remainedM,
               sum(nvl(a.bytes, 0) / (b.bytes) * 100),
               (100 - (sum(nvl(a.bytes, 0)) / (b.bytes) * 100))
          FROM dba_free_space a, dba_data_files b
         WHERE a.file_id = b.file_id
         GROUP BY b.tablespace_name, b.file_name, b.file_id, b.bytes
         ORDER BY b.tablespace_name)
 GROUP BY tbs

发现表空间USERS的表空间的已使用百分比是99%.再获取用户的默认表空间:

select username, DEFAULT_TABLESPACE
from dba_users
where username = 'scott';

scott用户的默认表空间刚好是USERS,找到表空间的物理路径:

select * from dba_data_files where tablespace_name ='USERS';

那就把这个表空间进行扩展:

alter database datafile 'D:\ORACLE\PRODUCT\ORADATA\TEST\USERS01.DBF' resize 5120M;

修改USERS表空间时较慢,花了4分多钟.修改完成后再次查询表空间的使用情况,再次查询看否执行成功。

Win7_x64_Oracle11G连接x32 PLSQL_Developer

前些天在CentOS里面搭了11G的环境。今天同事用在Win7_x64用PLSQL_Developer去连接时老是提示ORA-12151:无法处理服务名.解决了这个问题,连接进去一查询就提示

error01

一看就是当前连接用户没有对sys用户下的表v$session,v$sesstat,v$statname的select权限,在服务端以sysdba身份登录、授权:

grant select on v_$statname to username;
grant select on v_$sesstat to username;
grant select on v_$session to username;
grant select on v_$mystat to username;

执行了完事后,新问题:ORA-03114:未连接到ORACLE
error3
再查看本地的oracle客户端版本是81的精简客户端,感觉略老。在官网下了个11g的客户端,因为PLSQL_Developer(貌似这个软件并没有x64的)是x32的所以下了x32的版本。官网的下载地址如下:

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

下载完后解压到D盘根目录下: D:\instantclient_11_2 ,再目录下创建Tnsnames.ora文件:

TEST =
    (DESCRIPTION =
	(ADDRESS_LIST =
	     (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.18.111)(PORT = 1521))
	)
	(CONNECT_DATA =
	   (SERVICE_NAME = TEST)
	)
     )

创建一批处理:

@echo off
set path=D:\instantclient_11_2
set ORACLE_HOME=D:\instantclient_11_2
set TNS_ADMIN=D:\instantclient_11_2
set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
start plsqldev.exe

放到PLSQL根目录下执行,启动PLSQL后直接取消进去设置:

error2

应用、确定,关闭软件,再次打开软件登陆,问题解决.查询正常.把以下变量加系统变量里,不然查询中文会显示乱码.

NLS_LANG=AMERICAN_AMERICA.AL32UTF8