mac下rails项目连接oracle数据库

最近上了一个新项目,需要用oracle数据库,oracle数据库对mac的支持太弱了。本来想在本地装一个oracle数据库,但是mac竟然没有11g版本的oracle,因为生产环境用的是oracle 11g,所以就放弃了在本地装oracle的。然后直接连的测试机的oralce。rails用oracle相比用mysql来说,也复杂了很多。

1.首先,需要去官网下载oracle client,linux基本一致,找到对应自己版本的client下载即可。一共需要下载3个文件。

1
2
mkdir -p /opt/oracle
cd /opt/oracle

将下载下来的三个文件放在 /opt/oracle 下,并解压.

1
2
3
4
5
unzip instantclient-basic-macos.x64-12.1.0.2.0.zip
unzip instantclient-sdk-macos.x64-12.1.0.2.0.zip
unzip instantclient-sqlplus-macos.x64-12.1.0.2.0.zip
cd /opt/oracle/instantclient_12_1
ln -s libclntsh.dylib.12.1 libclntsh.dylib

然后添加环境变量

1
export OCI_DIR=/opt/oracle/instantclient_12_1

2.接下来在Gemfile中添加gem

1
2
gem 'activerecord-oracle_enhanced-adapter'
gem 'ruby-oci8'
1
bundle install

修改database.yml

1
2
3
4
5
6
7
8
development: &development
adapter: oracle_enhanced
encoding: utf8
database: database
host: 192.168.1.100
port: 1521
username: name
password: password

设置 Rails连接Oracle的编码

1
ENV['NLS_LANG'] = 'AMERICAN_AMERICA.UTF8'

3.这个时候如果正常的话就可以执行migrate了,因为这个项目之前用的是mysql,一些migrate写法还有些不同。

oracle的index name默认设置了长度为30,所以创建index的时候要注意命名。还有一些特殊的字段不能用,会引起报错,比如说,integer,desc等关键字的字段,mysql上执行不会报错,oracle会报错。

4.在使用Oracle的时候碰到的问题。

创建临时表空间

1
2
3
4
5
6
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

创建数据表空间

1
2
3
4
5
6
7
create tablespace user_data
logging
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;

创建用户并指定表空间

1
2
3
create user username identified by password
default tablespace user_data
temporary tablespace user_temp;

给用户授予权限

1
grant connect,resource,dba to username;

oracle彻底kill session

1
2
SELECT s.sid, s.serial#, s.status, p.spid FROM v$session s, v$process p WHERE s.username = 'TEST' AND p.addr(+) = s.paddr
ALTER SYSTEM KILL SESSION '<SID>, <SERIAL>'

参考链接
http://www.rubydoc.info/github/kubo/ruby-oci8/file/docs/install-on-osx.md
http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html
http://huzhenjie.blog.51cto.com/863711/1192649
http://stackoverflow.com/questions/15664924/dropping-connected-users-in-oracle-database