最近上了一个新项目,需要用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'
|
修改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 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