Method: OCI8#initialize
- Defined in:
- lib/oci8/oci8.rb
#initialize(username, password, dbname = nil, privilege = nil) ⇒ OCI8
Connects to an Oracle database server by username
and password
at dbname
as privilege
.
connecting to the local server
Set username
and password
or pass “username/password” as a single argument.
OCI8.new('scott', 'tiger')
or
OCI8.new('scott/tiger')
connecting to a remote server
Set username
, password
and dbname
or pass “username/password@dbname” as a single argument.
OCI8.new('scott', 'tiger', 'orcl.world')
or
OCI8.new('scott/[email protected]')
The dbname
is a net service name or an easy connectection identifier. The former is a name listed in the file tnsnames.ora. Ask to your DBA if you don’t know what it is. The latter has the syntax as “//host:port/service_name”.
OCI8.new('scott', 'tiger', '//remote-host:1521/XE')
or
OCI8.new('scott/tiger@//remote-host:1521/XE')
connecting as a privileged user
Set :SYSDBA, :SYSOPER, :SYSASM, :SYSBACKUP, :SYSDG or :SYSKM to privilege
, otherwise “username/password as sysdba”, “username/password as sysoper”, etc. as a single argument.
OCI8.new('sys', 'change_on_install', nil, :SYSDBA)
or
OCI8.new('sys/change_on_install as sysdba')
external OS authentication
Set nil to username
and password
, or “/” as a single argument.
OCI8.new(nil, nil)
or
OCI8.new('/')
To connect to a remote host:
OCI8.new(nil, nil, 'dbname')
or
OCI8.new('/@dbname')
proxy authentication
Enclose end user’s username with square brackets and add it at the end of proxy user’s username.
OCI8.new('proxy_user_name[end_user_name]', 'proxy_password')
or
OCI8.new('proxy_user_name[end_user_name]/proxy_password')
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/oci8/oci8.rb', line 97 def initialize(*args) if args.length == 1 username, password, dbname, privilege = parse_connect_string(args[0]) else username, password, dbname, privilege = args end if username.nil? and password.nil? cred = OCI_CRED_EXT end auth_mode = to_auth_mode(privilege) stmt_cache_size = OCI8.properties[:statement_cache_size] stmt_cache_size = nil if stmt_cache_size == 0 attach_mode = 0 if dbname.is_a? OCI8::ConnectionPool @pool = dbname # to prevent GC from freeing the connection pool. dbname = dbname.send(:pool_name) attach_mode |= 0x0200 # OCI_CPOOL else tcp_connect_timeout = OCI8::properties[:tcp_connect_timeout] connect_timeout = OCI8::properties[:connect_timeout] tcp_keepalive = OCI8::properties[:tcp_keepalive] if tcp_connect_timeout || connect_timeout || tcp_keepalive dbname = to_connect_descriptor(dbname, tcp_connect_timeout, connect_timeout, tcp_keepalive) end end if stmt_cache_size # enable statement caching attach_mode |= 0x0004 # OCI_STMT_CACHE end # logon by the OCI function OCISessionBegin(). allocate_handles() @session_handle.send(:attr_set_string, OCI_ATTR_USERNAME, username) if username @session_handle.send(:attr_set_string, OCI_ATTR_PASSWORD, password) if password if @@oracle_client_version >= ORAVER_11_1 # Sets the driver name displayed in V$SESSION_CONNECT_INFO.CLIENT_DRIVER # if both the client and the server are Oracle 11g or upper. # Only the first 8 chracters "ruby-oci" are displayed when the Oracle # server version is lower than 12.0.1.2. # 424: OCI_ATTR_DRIVER_NAME @session_handle.send(:attr_set_string, 424, "ruby-oci8 : #{OCI8::VERSION}") end server_attach(dbname, attach_mode) if OCI8.oracle_client_version >= OCI8::ORAVER_11_1 self.send_timeout = OCI8::properties[:send_timeout] if OCI8::properties[:send_timeout] self.recv_timeout = OCI8::properties[:recv_timeout] if OCI8::properties[:recv_timeout] end session_begin(cred ? cred : OCI_CRED_RDBMS, auth_mode) if stmt_cache_size # set statement cache size attr_set_ub4(176, stmt_cache_size) # 176: OCI_ATTR_STMTCACHESIZE end @prefetch_rows = 100 @username = nil end |