gorm/dialects/oci8/README.md
2020-02-14 15:23:26 -05:00

165 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# oci8 dialect
- [oci8 dialect](#oci8-dialect)
- [Overview](#overview)
- [Install oracle client (required by go module)](#install-oracle-client-required-by-go-module)
- [Install the Module](#install-the-module)
- [Basic Test](#basic-test)
- [Running Oracle in Docker](#running-oracle-in-docker)
## Overview
This document covers everything you need to install/configure/run to get the oci8 dialect up and running. BTW, oci8 using pkg-config to bind to the Oracle instantclient libraries, so it uses CGO.
You'll find some additional documentation on various challenges and design decisions for the dialect in [doc.go](./doc.go)
## Install oracle client (required by go module)
Download instaclients from: https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html
You need the basic, sqlplus and sdk packages.
Move the zip instaclient files to `~/Library/Caches/Homebrew`
Install the clients with brew
```
$ brew tap InstantClientTap/instantclient
$ brew install instantclient-basic
$ brew install instantclient-sqlplus
$ brew install instantclient-sdk
```
## Install the Module
```
go get github.com/mattn/go-oci8
```
Install pkg-config via brew
```
$ brew install pkg-config
```
Create `/usr/local/lib/pkgconfig/oci8.pc`
Contents:
```
prefixdir=/usr/local/lib
libdir=${prefixdir}
includedir=${prefixdir}/sdk/include
Name: OCI
Description: Oracle database driver
Version: 12.2
Libs: -L${libdir} -lclntsh
Cflags: -I${includedir}%
```
Test pkg-config for oci8
```
$ pkg-config --cflags --libs oci8
-I/usr/local/lib/sdk/include -L/usr/local/lib -lclntsh
```
### Basic Test
Once you've got Oracle up and running and you've created the gorm user with appropriate privs, try to run:
```
# chdir to the oci8 dialect's directory:
$ cd dialect/oci8
# run a basic connection test
$ go test -v -run Test_Connection
=== RUN Test_Connection
--- PASS: Test_Connection (0.06s)
connection_test.go:29: The date is: 2020-02-14T20:09:37Z
PASS
ok github.com/jinzhu/gorm/dialects/oci8 1.609s
```
## Running Oracle in Docker
Download the Oracle Express Edition version 18c (xe) Linux rpm from oracle.com
```
git clone https://github.com/oracle/docker-images.git
```
copy binary you downloaded
```
cp ~/Dowloads/<image-name> ./18.4.0
```
build image
```
./buildDockerImage.sh -x -v 18.4.0
```
start container
```
docker run -dit --name oracledb \
-p 1521:1521 -p 5500:5500 -p 8080:8080 \
-e ORACLE_PWD=oracle \
-v $HOME/oracle/oradata:/opt/oracle/oradata \
oracle/database:18.4.0-xe
```
Check logs and wait for oracle to be ready…
```
docker logs -f oracledb
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
```
Connect via sqlplus as sysdba via container
```
docker exec -it oracledb sqlplus sys/oracle@localhost:1521/XE as sysdba
SQL*Plus: Release 18.0.0.0.0 - Production on Mon Feb 10 16:33:44 2020
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL>
```
Connect via sqlplus as system user via container:
```
docker exec -it oracledb sqlplus system/oracle@localhost:1521/XE
SQL*Plus: Release 18.0.0.0.0 - Production on Mon Feb 10 17:08:04 2020
Version 18.4.0.0.0
Copyright (c) 1982, 2018, Oracle. All rights reserved.
Last Successful login time: Mon Feb 10 2020 17:07:07 +00:00
Connected to:
Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0
SQL>
```
create a gorm user
```
docker exec -it oracledb sqlplus system/oracle@localhost:1521/XE
SQL>
-- creating user in the default PDB
ALTER SESSION SET CONTAINER = XEPDB1;
create user gorm identified by gorm;
-- we need some privs
GRANT CONNECT, RESOURCE, DBA TO gorm;
GRANT CREATE SESSION TO gorm;
GRANT UNLIMITED TABLESPACE TO gorm;
```