ruby-oci8 2.2.0.2 → 2.2.12
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.yardopts +1 -6
- data/ChangeLog +600 -0
- data/NEWS +426 -35
- data/README.md +27 -9
- data/dist-files +13 -2
- data/docs/bind-array-to-in_cond.md +38 -0
- data/docs/conflicts-local-connections-and-processes.md +98 -0
- data/docs/hanging-after-inactivity.md +63 -0
- data/docs/install-binary-package.md +15 -11
- data/docs/install-full-client.md +18 -21
- data/docs/install-instant-client.md +45 -27
- data/docs/install-on-osx.md +31 -117
- data/docs/ldap-auth-and-function-interposition.md +123 -0
- data/docs/number-type-mapping.md +79 -0
- data/docs/platform-specific-issues.md +17 -50
- data/docs/report-installation-issue.md +11 -8
- data/docs/timeout-parameters.md +94 -0
- data/ext/oci8/apiwrap.c.tmpl +2 -5
- data/ext/oci8/apiwrap.rb +6 -1
- data/ext/oci8/apiwrap.yml +39 -143
- data/ext/oci8/attr.c +4 -2
- data/ext/oci8/bind.c +421 -9
- data/ext/oci8/connection_pool.c +3 -3
- data/ext/oci8/encoding.c +5 -5
- data/ext/oci8/env.c +8 -2
- data/ext/oci8/error.c +24 -16
- data/ext/oci8/extconf.rb +35 -63
- data/ext/oci8/hook_funcs.c +274 -61
- data/ext/oci8/lob.c +31 -75
- data/ext/oci8/metadata.c +8 -6
- data/ext/oci8/object.c +119 -29
- data/ext/oci8/oci8.c +46 -133
- data/ext/oci8/oci8.h +40 -123
- data/ext/oci8/oci8lib.c +178 -46
- data/ext/oci8/ocihandle.c +37 -37
- data/ext/oci8/ocinumber.c +24 -35
- data/ext/oci8/oraconf.rb +168 -337
- data/ext/oci8/oradate.c +19 -19
- data/ext/oci8/plthook.h +10 -0
- data/ext/oci8/plthook_elf.c +433 -268
- data/ext/oci8/plthook_osx.c +40 -9
- data/ext/oci8/plthook_win32.c +16 -1
- data/ext/oci8/stmt.c +52 -17
- data/ext/oci8/win32.c +4 -22
- data/lib/oci8/bindtype.rb +10 -17
- data/lib/oci8/check_load_error.rb +57 -10
- data/lib/oci8/compat.rb +5 -1
- data/lib/oci8/connection_pool.rb +74 -3
- data/lib/oci8/cursor.rb +70 -31
- data/lib/oci8/metadata.rb +9 -1
- data/lib/oci8/object.rb +14 -1
- data/lib/oci8/oci8.rb +184 -58
- data/lib/oci8/ocihandle.rb +0 -16
- data/lib/oci8/oracle_version.rb +11 -1
- data/lib/oci8/properties.rb +55 -0
- data/lib/oci8/version.rb +1 -1
- data/lib/oci8.rb +48 -4
- data/lib/ruby-oci8.rb +1 -0
- data/pre-distclean.rb +1 -3
- data/ruby-oci8.gemspec +4 -9
- data/setup.rb +11 -2
- data/test/README.md +37 -0
- data/test/config.rb +8 -1
- data/test/setup_test_object.sql +42 -14
- data/test/setup_test_package.sql +59 -0
- data/test/test_all.rb +4 -0
- data/test/test_bind_array.rb +70 -0
- data/test/test_bind_boolean.rb +99 -0
- data/test/test_bind_integer.rb +47 -0
- data/test/test_break.rb +11 -9
- data/test/test_clob.rb +5 -17
- data/test/test_connstr.rb +142 -0
- data/test/test_datetime.rb +8 -3
- data/test/test_metadata.rb +2 -1
- data/test/test_object.rb +99 -18
- data/test/test_oci8.rb +170 -46
- data/test/test_oranumber.rb +12 -6
- data/test/test_package_type.rb +17 -3
- data/test/test_properties.rb +17 -0
- metadata +45 -55
- data/docs/osx-install-dev-tools.png +0 -0
- data/test/README +0 -42
@@ -0,0 +1,38 @@
|
|
1
|
+
# @title Bind an Array to IN-condition
|
2
|
+
|
3
|
+
Bind an Array to IN-condition
|
4
|
+
=============================
|
5
|
+
|
6
|
+
Binding an arbitrary-length array to IN-condition is not simple.
|
7
|
+
You need to create an SQL statement containing a comma-separated
|
8
|
+
list whose length is same with the input data.
|
9
|
+
|
10
|
+
Example:
|
11
|
+
|
12
|
+
ids = [ ... ] # an arbitrary-length array containing user IDs.
|
13
|
+
|
14
|
+
place_holder_string = Array.new(ids.length) {|index| ":id_#{index}"}.join(', ')
|
15
|
+
# place_holder_string is:
|
16
|
+
# ":id_0" if ids.length == 1
|
17
|
+
# ":id_0, :id_1" if ids.length == 2
|
18
|
+
# ...
|
19
|
+
cursor = conn.parse("select * from users where id in (#{place_holder_string})")
|
20
|
+
ids.each_with_index do |id, index|
|
21
|
+
cursor.bind_param("id#{index}", id) # bind each element
|
22
|
+
end
|
23
|
+
cursor.exec()
|
24
|
+
|
25
|
+
However this is awkward. So {OCI8.in_cond} was added in ruby-oci8 2.2.2.
|
26
|
+
The above code is rewritten as follows:
|
27
|
+
|
28
|
+
ids = [ ... ] # an arbitrary-length array containing user IDs.
|
29
|
+
|
30
|
+
in_cond = OCI8::in_cond(:id, ids)
|
31
|
+
cursor = conn.exec("select * from users where id in (#{in_cond.names})", *in_cond.values)
|
32
|
+
|
33
|
+
or
|
34
|
+
|
35
|
+
ids = [ ... ] # an arbitrary-length array containing user IDs.
|
36
|
+
|
37
|
+
in_cond = OCI8::in_cond(:id, ids, Integer) # set the data type explicitly
|
38
|
+
cursor = conn.exec("select * from users where id in (#{in_cond.names})", *in_cond.values)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# @title Conflicts between Local Connections and Child Process Handling on Unix
|
2
|
+
|
3
|
+
Conflicts between Local Connections and Child Process Handling on Unix
|
4
|
+
======================================================================
|
5
|
+
|
6
|
+
Background
|
7
|
+
----------
|
8
|
+
|
9
|
+
When a local (not-TCP) Oracle connection is established on Unix,
|
10
|
+
Oracle client library changes signal handlers in the process to reap
|
11
|
+
all dead child processes. However it conflicts with child process
|
12
|
+
handling in ruby.
|
13
|
+
|
14
|
+
Problem 1: It trashes child process handling of Open3::popen.
|
15
|
+
----------
|
16
|
+
|
17
|
+
require 'oci8'
|
18
|
+
require 'open3'
|
19
|
+
|
20
|
+
Open3::popen3('true') do |i, o, e, w|
|
21
|
+
p w.value
|
22
|
+
end
|
23
|
+
|
24
|
+
conn = OCI8.new(username, password)
|
25
|
+
puts "establish a local connection"
|
26
|
+
|
27
|
+
Open3::popen3('true') do |i, o, e, w|
|
28
|
+
p w.value
|
29
|
+
end
|
30
|
+
|
31
|
+
The above code outputs the following result:
|
32
|
+
|
33
|
+
#<Process::Status: pid 19236 exit 0>
|
34
|
+
establish a local connection
|
35
|
+
nil
|
36
|
+
|
37
|
+
`w.value` after a local connection doesn't work because Oracle reaps
|
38
|
+
the child process on the process termination before ruby detects it.
|
39
|
+
|
40
|
+
Problem 2: It creates defunct processes after disconnection if signal handlers are reset.
|
41
|
+
----------
|
42
|
+
|
43
|
+
The `system` function overwrites signal handlers.
|
44
|
+
It fixes the problem 1 as follows.
|
45
|
+
|
46
|
+
require 'oci8'
|
47
|
+
require 'open3'
|
48
|
+
|
49
|
+
Open3::popen3('true') do |i, o, e, w|
|
50
|
+
p w.value
|
51
|
+
end
|
52
|
+
|
53
|
+
conn = OCI8.new(username, password) # Signal handlers are changed here.
|
54
|
+
puts "establish a local connection"
|
55
|
+
system('true') # Signal handlers are reset here.
|
56
|
+
|
57
|
+
Open3::popen3('true') do |i, o, e, w|
|
58
|
+
p w.value
|
59
|
+
end
|
60
|
+
|
61
|
+
The above code outputs the following result:
|
62
|
+
|
63
|
+
#<Process::Status: pid 19652 exit 0>
|
64
|
+
establish a local connection
|
65
|
+
#<Process::Status: pid 19656 exit 0>
|
66
|
+
|
67
|
+
`w.value` after a local connection works.
|
68
|
+
|
69
|
+
However it makes another problem.
|
70
|
+
|
71
|
+
require 'oci8'
|
72
|
+
|
73
|
+
conn = OCI8.new(username, password) # Signal handlers are changed here.
|
74
|
+
# An Oracle server process is created here.
|
75
|
+
puts "establish a local connection"
|
76
|
+
system('true') # Signal handlers are reset here.
|
77
|
+
|
78
|
+
conn.logoff # The Oracle server process exits and become defunct.
|
79
|
+
|
80
|
+
# ... do other stuffs...
|
81
|
+
|
82
|
+
If a program repeatedly creates a local connection and disconnects it,
|
83
|
+
the number of defunct processes increases gradually.
|
84
|
+
|
85
|
+
Solution: BEQUEATH_DETACH=YES
|
86
|
+
----------
|
87
|
+
|
88
|
+
By setting [BEQUEATH_DETACH=YES][] in `sqlnet.ora`, Oracle client library
|
89
|
+
doesn't change signal handlers. The above two problems are fixed.
|
90
|
+
|
91
|
+
Oracle client library reads `sqlnet.ora` in the following locations:
|
92
|
+
|
93
|
+
* `$TNS_ADMIN/sqlnet.ora` if the environment variable `TNS_ADMIN`
|
94
|
+
is set and `$TNS_ADMIN/sqlnet.ora` exists.
|
95
|
+
Otherwise, `$ORACLE_HOME/network/admin/sqlnet.ora`.
|
96
|
+
* `$HOME/.sqlnet.ora`
|
97
|
+
|
98
|
+
[BEQUEATH_DETACH=YES]: https://docs.oracle.com/database/121/NETRF/sqlnet.htm#NETRF183
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# @title Hanging After a Long Period of Inactivity
|
2
|
+
|
3
|
+
Hanging After a Long Period of Inactivity
|
4
|
+
=========================================
|
5
|
+
|
6
|
+
When a database connection hangs after a long period of inactivity,
|
7
|
+
this document may help you.
|
8
|
+
|
9
|
+
When a firewall or a NAT proxy resides between Oracle database server
|
10
|
+
and client, it sometimes drops inactive connections as dead ones. If a
|
11
|
+
client connects to an Oracle server and tries to use the connection
|
12
|
+
after a long sleep (> 1 hour), the client may hang in an effort to use the
|
13
|
+
dropped connection. This issue will be solved by setting TCP keepalive
|
14
|
+
packets whose keepalive time parameter is smaller than the inactive
|
15
|
+
connection timeout.
|
16
|
+
|
17
|
+
TCP keepalive is enabled by [(ENABLE=broken)][] in a connect
|
18
|
+
descriptor. If you use easy connect naming such as `//hostname/service_name`,
|
19
|
+
ruby-oci8 sets the parameter on behalf of you when the `tcp_keepalive`
|
20
|
+
property is set. (This is available since ruby-oci8 2.2.4.)
|
21
|
+
|
22
|
+
OCI8.properties[:tcp_keepalive] = true
|
23
|
+
conn = OCI8.new(username, password, '//hostname/service_name')
|
24
|
+
|
25
|
+
This is equivalent to the following:
|
26
|
+
|
27
|
+
connect_descriptor = "(DESCRIPTION=(ENABLE=broken)(ADDRESS=(PROTOCOL=tcp)(HOST=hostname)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=service_name)))"
|
28
|
+
conn = OCI8.new(username, password, connect_descriptor)
|
29
|
+
|
30
|
+
The default TCP keepalive time is two hours, which may be larger
|
31
|
+
than the inactive connection timeout. The default
|
32
|
+
value in the system is configurable via [procfs and sysctl on Linux][]
|
33
|
+
or [registry parameters on Windows][]. If you have no privilege to
|
34
|
+
customize the system, you can change per-connection keepalive time
|
35
|
+
by the `tcp_keepalive_time` property.
|
36
|
+
|
37
|
+
OCI8.properties[:tcp_keepalive_time] = 600 # 10 minutes
|
38
|
+
|
39
|
+
It is supported on the following platforms since ruby-oci8 2.2.4.
|
40
|
+
|
41
|
+
* Linux i386 and x86_64
|
42
|
+
* macOS
|
43
|
+
* Windows x86 and x64
|
44
|
+
* Solaris x86_64
|
45
|
+
|
46
|
+
When it is set on unsupported platforms, you get `NotImplementedError`.
|
47
|
+
|
48
|
+
This feature is implemented with hackish way. When
|
49
|
+
`tcp_keepalive_time` is set, Oracle client library's
|
50
|
+
procedure linkage table is modified to intercept [setsockopt][] system
|
51
|
+
call. When Oracle client library issues the system call which enables
|
52
|
+
TCP keepalive, [ruby-oci8 changes][] the per-connection TCP keepalive time
|
53
|
+
immediately.
|
54
|
+
|
55
|
+
I hope that Oracle adds a new OCI handle attribute to support this
|
56
|
+
feature natively in the future.
|
57
|
+
|
58
|
+
[(ENABLE=broken)]: https://docs.oracle.com/database/121/NETRF/tnsnames.htm#CHDCDGCE
|
59
|
+
[procfs and sysctl on Linux]: http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html
|
60
|
+
[registry parameters on Windows]: https://blogs.technet.microsoft.com/nettracer/2010/06/03/things-that-you-may-want-to-know-about-tcp-keepalives/
|
61
|
+
[plthook]: https://github.com/kubo/plthook
|
62
|
+
[setsockopt]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/setsockopt.html
|
63
|
+
[ruby-oci8 changes]: https://github.com/kubo/ruby-oci8/blob/ruby-oci8-2.2.4/ext/oci8/hook_funcs.c#L302-L318
|
@@ -1,24 +1,28 @@
|
|
1
1
|
# @title Install Binary Package
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
Install Binary Package
|
4
|
+
======================
|
5
5
|
|
6
|
-
|
6
|
+
Windows
|
7
|
+
-------
|
7
8
|
|
8
|
-
|
9
|
+
You need to install Oracle client in advance.
|
10
|
+
If you don't have installed Oracle client, install {file:docs/install-instant-client.md#Install_Oracle_Instant_Client_Packages instant client}. Only the Basic or Basic Lite package is needed to use ruby-oci8.
|
11
|
+
However it is better to install SQL*Plus also because it is usable to check whether
|
12
|
+
a problem is in Oracle setting or in ruby-oci8.
|
13
|
+
|
14
|
+
Run the following command to install ruby-oci8.
|
9
15
|
|
10
|
-
|
11
|
-
=============================
|
16
|
+
gem install ruby-oci8
|
12
17
|
|
13
|
-
|
18
|
+
If you uses mswin32 ruby, use the following command instead.
|
14
19
|
|
15
20
|
gem install --platform x86-mingw32 ruby-oci8
|
16
|
-
|
17
|
-
|
18
|
-
If it doesn't work, see {file:docs/install-instant-client.md} or {file:docs/install-full-client.md}.
|
21
|
+
or
|
22
|
+
gem install --platform x64-mingw32 ruby-oci8
|
19
23
|
|
20
24
|
Other platforms
|
21
|
-
|
25
|
+
---------------
|
22
26
|
|
23
27
|
We doesn't make binary gems for other platforms.
|
24
28
|
If you need to distribute a binary gem, compile ruby-oci8 and run the following command.
|
data/docs/install-full-client.md
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
# @title Install for Oracle Full Client
|
2
2
|
|
3
|
+
Install for Oracle Full Client
|
4
|
+
==============================
|
5
|
+
|
3
6
|
Introduction
|
4
|
-
|
7
|
+
------------
|
5
8
|
|
6
9
|
This page explains the way to install ruby-oci8 for Oracle Full Client
|
7
10
|
installations.
|
@@ -11,18 +14,16 @@ For Windows, look at {file:docs/install-binary-package.md} unless you
|
|
11
14
|
have a special need to compile ruby-oci8 by yourself.
|
12
15
|
|
13
16
|
Check the environment
|
14
|
-
|
17
|
+
---------------------
|
15
18
|
|
16
|
-
Oracle installation
|
17
|
-
-------------------
|
19
|
+
### Oracle installation
|
18
20
|
|
19
21
|
Run the following command and confirm it works fine. If it doesn't
|
20
22
|
work well, you need to ask to your database administrator.
|
21
23
|
|
22
24
|
sqlplus USERNAME/PASSWORD
|
23
25
|
|
24
|
-
ruby installation
|
25
|
-
-----------------
|
26
|
+
### ruby installation
|
26
27
|
|
27
28
|
Run the following command. If it ends with "can't find header files
|
28
29
|
for ruby" or "ruby: no such file to load -- mkmf (LoadError)", you need
|
@@ -30,8 +31,7 @@ to install ruby-devel(redhat) or ruby-dev(debian/ubuntu).
|
|
30
31
|
|
31
32
|
ruby -r mkmf -e ""
|
32
33
|
|
33
|
-
development tools
|
34
|
-
-----------------
|
34
|
+
### development tools
|
35
35
|
|
36
36
|
You need a C compiler and development tools such as make or nmake.
|
37
37
|
Note that they must be same with ones used to compile the ruby.
|
@@ -39,15 +39,14 @@ For example, you need Oracle Solaris Studio, not gcc, for ruby
|
|
39
39
|
compiled by Oracle Solaris Studio.
|
40
40
|
|
41
41
|
Installation
|
42
|
-
|
42
|
+
------------
|
43
43
|
|
44
44
|
If you get a problem in the following steps, look at {file:docs/platform-specific-issues.md}
|
45
45
|
and {file:docs/report-installation-issue.md}.
|
46
46
|
|
47
|
-
Set the library search path
|
48
|
-
---------------------------
|
47
|
+
### Set the library search path
|
49
48
|
|
50
|
-
|
49
|
+
#### UNIX
|
51
50
|
|
52
51
|
Set the library search path, whose name depends on the OS, to point to
|
53
52
|
$ORACLE\_HOME/lib. If the database is 64-bit and the ruby is 32-bit,
|
@@ -74,27 +73,25 @@ Do not forget to export the variable as follows:
|
|
74
73
|
$ LD_LIBRARY_PATH=$ORACLE_HOME/lib
|
75
74
|
$ export LD_LIBRARY_PATH
|
76
75
|
|
77
|
-
|
76
|
+
#### Windows(mswin32, mingw32, cygwin)
|
78
77
|
|
79
78
|
If sqlplus runs correctly, library search path has no problem.
|
80
79
|
|
81
|
-
gem package
|
82
|
-
-----------
|
80
|
+
### gem package
|
83
81
|
|
84
82
|
Run the following command.
|
85
83
|
|
86
84
|
gem install ruby-oci8
|
87
85
|
|
88
|
-
tar.gz package
|
89
|
-
--------------
|
86
|
+
### tar.gz package
|
90
87
|
|
91
|
-
|
88
|
+
#### Download the source code
|
92
89
|
|
93
90
|
Download the latest tar.gz package from [download page][].
|
94
91
|
|
95
|
-
|
92
|
+
#### Run make and install
|
96
93
|
|
97
|
-
|
94
|
+
##### UNIX or Windows(mingw32, cygwin)
|
98
95
|
|
99
96
|
gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
|
100
97
|
cd ruby-oci8-VERSION
|
@@ -104,7 +101,7 @@ Download the latest tar.gz package from [download page][].
|
|
104
101
|
note: If you use '`sudo`', use it only when running '`make install`'.
|
105
102
|
'`sudo`' doesn't pass library search path to the executing command for security reasons.
|
106
103
|
|
107
|
-
|
104
|
+
##### Windows(mswin32)
|
108
105
|
|
109
106
|
gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
|
110
107
|
cd ruby-oci8-VERSION
|
@@ -1,7 +1,10 @@
|
|
1
1
|
# @title Install for Oracle Instant Client
|
2
2
|
|
3
|
+
Install for Oracle Instant Client
|
4
|
+
=================================
|
5
|
+
|
3
6
|
Introduction
|
4
|
-
|
7
|
+
------------
|
5
8
|
|
6
9
|
This page explains the way to install ruby-oci8 for Oracle Instant Client.
|
7
10
|
|
@@ -13,10 +16,10 @@ have a special need to compile ruby-oci8 by yourself.
|
|
13
16
|
Look at {file:docs/install-on-osx.md} for OS X.
|
14
17
|
|
15
18
|
Install Oracle Instant Client Packages
|
16
|
-
|
19
|
+
--------------------------------------
|
20
|
+
|
21
|
+
### Download Instant Client Packages
|
17
22
|
|
18
|
-
Donwload Instant Client Packages
|
19
|
-
--------------------------------
|
20
23
|
Download the following packages from [Oracle Technology Network](http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html).
|
21
24
|
|
22
25
|
* Instant Client Package - Basic or Basic Lite
|
@@ -25,8 +28,7 @@ Download the following packages from [Oracle Technology Network](http://www.orac
|
|
25
28
|
|
26
29
|
Note: use 32-bit packages for 32-bit ruby even though the OS is 64-bit.
|
27
30
|
|
28
|
-
UNIX zip packages
|
29
|
-
-----------------
|
31
|
+
### UNIX zip packages
|
30
32
|
|
31
33
|
Unzip the packages as follows:
|
32
34
|
|
@@ -79,8 +81,7 @@ Though many instant client pages indicate that the environment varialbe
|
|
79
81
|
configuration files such as `tnsnames.ora` and `sqlnet.ora` are in
|
80
82
|
`$ORACLE_HOME/network/admin/`.
|
81
83
|
|
82
|
-
Linux rpm packages
|
83
|
-
------------------
|
84
|
+
### Linux rpm packages
|
84
85
|
|
85
86
|
Install the downloaded packages as follows:
|
86
87
|
|
@@ -95,24 +96,44 @@ For example:
|
|
95
96
|
$ LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client/lib
|
96
97
|
$ export LD_LIBRARY_PATH
|
97
98
|
|
98
|
-
Windows
|
99
|
-
|
99
|
+
### Windows
|
100
|
+
|
101
|
+
Unzip the packages and set `PATH` to point to the directory where `OCI.DLL` is installed.
|
102
|
+
|
103
|
+
If `require "ruby-oci8"` raises a load error such as "OCI.DLL: 126(The
|
104
|
+
specified module could not be found. )", either `OCI.DLL` or a DLL depended
|
105
|
+
by `OCI.DLL` could not be found in `PATH`.
|
106
|
+
|
107
|
+
If `OCI.DLL` is surely in `PATH`, the missing module is a Visual C++ runtime
|
108
|
+
library in most cases. You need to install "Microsoft Visual C++ Redistributable
|
109
|
+
Package" or copy a runtime library to the directory where `ruby.exe` resides.
|
110
|
+
|
111
|
+
| Oracle Version | Package | Runtime Library|
|
112
|
+
|---|---|---|
|
113
|
+
| 18.3 | [Microsoft Visual C++ 2013 Redistributable Package][2013] | MSVCR120.DLL |
|
114
|
+
| 12.2.0.x | [Microsoft Visual C++ 2013 Redistributable Package][2013] | MSVCR120.DLL |
|
115
|
+
| 12.1.0.x | [Microsoft Visual C++ 2010 Redistributable Package][2010] | MSVCR100.DLL |
|
116
|
+
| 11.2.0.x | Microsoft Visual C++ 2005 SP1 Redistributable Package ([x86][2005SP1_x86], [x64][2005SP1_x64]) | MSVCR80.DLL(The file version must be 8.0.50727.762.) |
|
117
|
+
| 11.1.0.x | [No separate redistributable package][2003] | MSVCR71.DLL |
|
118
|
+
| 10.2.0.x | [No separate redistributable package][2003] | MSVCR71.DLL |
|
100
119
|
|
101
|
-
|
120
|
+
[2013]: https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads
|
121
|
+
[2010]: http://www.microsoft.com/en-us/download/details.aspx?id=26999
|
122
|
+
[2005SP1_x86]: https://www.microsoft.com/en-us/download/details.aspx?id=5638
|
123
|
+
[2005SP1_x64]: https://www.microsoft.com/en-us/download/details.aspx?id=18471
|
124
|
+
[2003]: http://stackoverflow.com/questions/1596167/where-to-download-microsoft-visual-c-2003-redistributable#6132093
|
102
125
|
|
103
126
|
Check the environment
|
104
|
-
|
127
|
+
---------------------
|
105
128
|
|
106
|
-
Oracle installation
|
107
|
-
-------------------
|
129
|
+
### Oracle installation
|
108
130
|
|
109
131
|
Run the following command and confirm it works fine. If it doesn't
|
110
132
|
work well, check `LD_LIBRARY_PATH` or PATH.
|
111
133
|
|
112
134
|
sqlplus USERNAME/PASSWORD
|
113
135
|
|
114
|
-
ruby installation
|
115
|
-
-----------------
|
136
|
+
### ruby installation
|
116
137
|
|
117
138
|
Run the following command. If it ends with "can't find header files
|
118
139
|
for ruby" or "ruby: no such file to load -- mkmf (LoadError)", you need
|
@@ -120,8 +141,7 @@ to install ruby-devel(redhat) or ruby-dev(debian/ubuntu).
|
|
120
141
|
|
121
142
|
ruby -r mkmf -e ""
|
122
143
|
|
123
|
-
development tools
|
124
|
-
-----------------
|
144
|
+
### development tools
|
125
145
|
|
126
146
|
You need a C compiler and development tools such as make or nmake.
|
127
147
|
Note that they must be same with ones used to compile the ruby.
|
@@ -129,13 +149,12 @@ For example, you need Oracle Solaris Studio, not gcc, for ruby
|
|
129
149
|
compiled by Oracle Solaris Studio.
|
130
150
|
|
131
151
|
Installation
|
132
|
-
|
152
|
+
------------
|
133
153
|
|
134
154
|
If you get a problem in the following steps, look at {file:docs/platform-specific-issues.md}
|
135
155
|
and {file:docs/report-installation-issue.md}.
|
136
156
|
|
137
|
-
gem package
|
138
|
-
-----------
|
157
|
+
### gem package
|
139
158
|
|
140
159
|
Run the following command.
|
141
160
|
|
@@ -144,19 +163,18 @@ Run the following command.
|
|
144
163
|
If you get a problem, look at {file:docs/platform-specific-issues.md}
|
145
164
|
and {file:docs/report-installation-issue.md}.
|
146
165
|
|
147
|
-
tar.gz package
|
148
|
-
--------------
|
166
|
+
### tar.gz package
|
149
167
|
|
150
|
-
|
168
|
+
#### Download the source code
|
151
169
|
|
152
170
|
Download the latest tar.gz package from [download page][].
|
153
171
|
|
154
172
|
Note: if you are using Windows and you have no special need to compile
|
155
173
|
it by yourself, look at {file:docs/install-binary-packge.md}.
|
156
174
|
|
157
|
-
|
175
|
+
#### Run make and install
|
158
176
|
|
159
|
-
|
177
|
+
##### UNIX or Windows(mingw32, cygwin)
|
160
178
|
|
161
179
|
gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
|
162
180
|
cd ruby-oci8-VERSION
|
@@ -166,7 +184,7 @@ it by yourself, look at {file:docs/install-binary-packge.md}.
|
|
166
184
|
note: If you use '`sudo`', use it only when running '`make install`'.
|
167
185
|
'`sudo`' doesn't pass library search path to the executing command for security reasons.
|
168
186
|
|
169
|
-
|
187
|
+
##### Windows(mswin32)
|
170
188
|
|
171
189
|
gzip -dc ruby-oci8-VERSION.tar.gz | tar xvf -
|
172
190
|
cd ruby-oci8-VERSION
|
data/docs/install-on-osx.md
CHANGED
@@ -1,132 +1,46 @@
|
|
1
|
-
# @title Install ruby-oci8 on
|
1
|
+
# @title Install ruby-oci8 on macOS
|
2
2
|
|
3
|
-
|
3
|
+
Install ruby-oci8 on macOS
|
4
|
+
=========================
|
4
5
|
|
5
|
-
|
6
|
-
|
6
|
+
**Note: Ruby-oci8 doesn't run on Apple Silicon because Oracle instant client
|
7
|
+
for Apple Silicon has not been released yet.**
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
Prerequisite
|
10
|
+
------------
|
10
11
|
|
11
|
-
|
12
|
-
(The latter includes the former.)
|
13
|
-
|
14
|
-
Run `"cc --version"` in a terminal to check whether they are installed.
|
15
|
-
|
16
|
-
If the cc version is printed, the tools are installed.
|
17
|
-
|
18
|
-
If the follwoing dialog is displayed, click its Install button to
|
19
|
-
install the tools.
|
20
|
-
You have no need to install the Xcode to compile ruby-oci8.
|
21
|
-
It requires command line tools, not an IDE such as the Xcode.
|
22
|
-
|
23
|
-
![dialog](osx-install-dev-tools.png)
|
24
|
-
|
25
|
-
If `"Agreeing to the Xcode/iOS license requires admin privileges,
|
26
|
-
please re-run as root via sudo."` is printed, you need to run
|
27
|
-
`"sudo cc --version"`, enter your password, look at the license
|
28
|
-
and type `"agree"`.
|
12
|
+
* Command line tools for Xcode or Xcode (by executing `xcode-select --install`) or [Xcode]
|
29
13
|
|
30
14
|
Install Oracle Instant Client Packages
|
31
|
-
|
32
|
-
|
33
|
-
Download Oracle Instant Client Packages
|
34
|
-
--------------------------------
|
35
|
-
|
36
|
-
Download the following packages from [Oracle Technology Network][]
|
37
|
-
|
38
|
-
* Instant Client Package - Basic or Basic Lite
|
39
|
-
* Instant Client Package - SDK
|
40
|
-
* Instant Client Package - SQL*Plus (optionally)
|
41
|
-
|
42
|
-
Install Oracle Instant Client Packages via Homebrew
|
43
|
-
---------------------------------------------------
|
44
|
-
|
45
|
-
To install `Oracle Instant Client Basic Lite` via [Homebrew][]
|
46
|
-
|
47
|
-
* Download two instant client packages: `Basic Lite` and `SDK` and put them
|
48
|
-
in `/Library/Caches/Homebrew` (if the environment variable `HOMEBREW_CACHE`
|
49
|
-
is not set and `$HOME/Library/Caches/Homebrew` doesn't exist.)
|
50
|
-
* Run the followining commands:
|
51
|
-
|
52
|
-
brew install InstantClientTap/instantclient/instantclient-basiclite
|
53
|
-
brew install InstantClientTap/instantclient/instantclient-sdk
|
54
|
-
|
55
|
-
To install `Oracle Instant Client Basic` via [Homebrew][]
|
56
|
-
|
57
|
-
* Download *three* instant client packages: `Basic`, `Basic Lite` and `SDK`
|
58
|
-
and put them in `/Library/Caches/Homebrew` (if the environment variable
|
59
|
-
`HOMEBREW_CACHE` is not set and `$HOME/Library/Caches/Homebrew` doesn't exist.)
|
60
|
-
* Run the followining commands:
|
61
|
-
|
62
|
-
brew install InstantClientTap/instantclient/instantclient-basic
|
63
|
-
brew install InstantClientTap/instantclient/instantclient-sdk
|
64
|
-
|
65
|
-
* Set the environment variable OCI_DIR while performing the following installation steps
|
66
|
-
if Homebrew is installed outside `/usr/local`.
|
67
|
-
|
68
|
-
export OCI_DIR=$(brew --prefix)/lib
|
69
|
-
|
70
|
-
Install Oracle Instant Client Manually
|
71
|
-
---------------------
|
72
|
-
|
73
|
-
If you don't use [Homebrew][], do the following:
|
74
|
-
|
75
|
-
Unzip the packages as follows:
|
76
|
-
|
77
|
-
mkdir /opt
|
78
|
-
mkdir /opt/oracle
|
79
|
-
cd /opt/oracle
|
80
|
-
|
81
|
-
Copy downloaded files to /opt/oracle before running the following commands.
|
82
|
-
|
83
|
-
unzip instantclient-basic-macos.x64-11.2.0.4.0.zip
|
84
|
-
unzip instantclient-sdk-macos.x64-11.2.0.4.0.zip
|
85
|
-
unzip instantclient-sqlplus-macos.x64-11.2.0.4.0.zip
|
86
|
-
|
87
|
-
Make a symbolic link to link the library.
|
88
|
-
|
89
|
-
cd /opt/oracle/instantclient11_2
|
90
|
-
ln -s libclntsh.dylib.11.1 libclntsh.dylib
|
91
|
-
|
92
|
-
Fix the library install and identification names using [fix_oralib][] to make them work
|
93
|
-
without `DYLD_LIBRARY_PATH`.
|
94
|
-
|
95
|
-
cd /opt/oracle/instantclient11_2
|
96
|
-
curl -O https://raw.githubusercontent.com/kubo/fix_oralib_osx/master/fix_oralib.rb
|
97
|
-
ruby fix_oralib.rb
|
98
|
-
|
99
|
-
Set the environment variable OCI_DIR while performing the following installation steps.
|
100
|
-
|
101
|
-
export OCI_DIR=/opt/oracle/instantclient11_2
|
102
|
-
|
103
|
-
Installation
|
104
|
-
============
|
105
|
-
|
106
|
-
If you get a problem in the following steps, look at {file:docs/report-installation-issue.md}.
|
107
|
-
|
108
|
-
gem package
|
109
|
-
-----------
|
15
|
+
--------------------------------------
|
110
16
|
|
111
|
-
|
17
|
+
If you have installed [Homebrew], use the following command:
|
112
18
|
|
113
|
-
|
19
|
+
```shell
|
20
|
+
$ brew tap InstantClientTap/instantclient
|
21
|
+
$ brew install instantclient-basic # or instantclient-basiclite
|
22
|
+
$ brew install instantclient-sdk
|
23
|
+
$ brew install instantclient-sqlplus # (optionally)
|
24
|
+
```
|
114
25
|
|
115
|
-
|
116
|
-
|
26
|
+
Otherwise, look at this [page][OTN] and set the environment variable
|
27
|
+
`OCI_DIR` to point the the directory where instant client is installed.
|
28
|
+
Ruby-oci8 installation script checks the directory.
|
117
29
|
|
118
|
-
|
30
|
+
```shell
|
31
|
+
export OCI_DIR=$HOME/Downloads/instantclient_19_8 # for example
|
32
|
+
```
|
119
33
|
|
120
|
-
|
34
|
+
Install ruby-oci8
|
35
|
+
-----------------
|
121
36
|
|
122
|
-
|
37
|
+
Note that `/usr/bin/ruby` isn't available. You need to use [`rbenv`] or so.
|
123
38
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
make install
|
39
|
+
```shell
|
40
|
+
$ gem install ruby-oci8
|
41
|
+
```
|
128
42
|
|
129
|
-
[download page]: https://bintray.com/kubo/generic/ruby-oci8
|
130
43
|
[Homebrew]: http://brew.sh/
|
131
|
-
[
|
132
|
-
[
|
44
|
+
[OTN]: https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html#ic_osx_inst
|
45
|
+
[Xcode]: https://apps.apple.com/us/app/xcode/id497799835
|
46
|
+
[`rbenv`]: https://github.com/rbenv/rbenv
|