-
Notifications
You must be signed in to change notification settings - Fork 0
MS_Oracle11gXEODPNET
- 戻る(ADO.NETデータプロバイダ)
- Oracle11gXE + ODP.NET Managed Driver
- PostgreSQL + NpgSql
- 久々に Oracle をインストールしたので手順をメモしておく。
- 古い、ODP.NET からは、なるべく早く移行したほうが良い。
https://www.oracle.com/database/technologies/xe-downloads.html
※ SYS, SYSTEM のパスワードは「system」にしておく。
(seigi@123 だと @ の問題で SQL*Plus からログインできなくなる)。
補足(
@が問題になる理由): SQL*Plus の
sqlplus user/password@接続識別子という記法では、
パスワード中の@が接続識別子の区切りと解釈されてしまう。
本番環境でこの制約に引きずられないよう、
実運用ではsqlplus user@tnsと入力してから
パスワードは対話的に入力する(コマンド ラインに残さない)のが定石である。
-
SQL Developer をダウンロードしてインストールする。
- Oracle SQL Developer ダウンロード
https://www.oracle.com/database/sqldeveloper/
- Oracle SQL Developer ダウンロード
-
システム要件を確認すると、JDK 1.8 以上、
Windows 10 では、JDK 8u51 or higher が必要になる。 -
必要に応じて、以下から、JDK nunn をダウンロードしてインストールする。
-
以下から、ダウンロードして利用可能(OTN ライセンスで利用可能)
- Java SE - Downloads | Oracle Technology Network | Oracle
https://www.oracle.com/java/technologies/downloads/
- Java SE - Downloads | Oracle Technology Network | Oracle
-
OTN ライセンスの JDK か?AdoptOpenJDK か?だが、以下を見ると、
SQL Developer は、Oracle Java のみサポートと言う事らしい。- AdoptOpenJDK/openjdk-support > Issue #91
Adopt OpenJDK latest not working with Oracle SQL Developer
https://github.com/AdoptOpenJDK/openjdk-support/issues/91
- AdoptOpenJDK/openjdk-support > Issue #91
-
「Windows 64-bit with JDK 8 included」をダウンロードすれば
別途 JDK をダウンロード&インストールする必要は無いとのこと。 -
参考:Java 有償化(正確には Oracle Java の有償化)
(Java有償化について調べてみた。(DNET_JavaLicensing.md))
-
補足(最新化): AdoptOpenJDK は現在
**Eclipse Temurin(Adoptium)**に改称されている。
また、Oracle JDK のライセンスは
**NFTC(2021 年)→ 従業員数ベースのサブスクリプション(2023 年)**と
変遷しているため、利用前に条件の確認が必要である。
A5:SQL Mk-2(言語等に依存しない汎用開発支援ツール(DNET_GeneralDevTools.md))
- 参考
- A5:SQL Mk-2 でかんたんに Oracle へ接続する手順・方法 | Oracle 初心者でもスッキリわかる
https://sql-oracle.com/?p=1744
- A5:SQL Mk-2 でかんたんに Oracle へ接続する手順・方法 | Oracle 初心者でもスッキリわかる
「Start Menu」に「Start Database」が作成されているのでコレを押下する。
接続を追加する。
-
接続名:任意
-
ユーザー名:system
-
パスワード:インストール時に入力したパスワード
-
Oracle(既定値のままでイイ)
- 接続タイプ:基本
- ロール:デフォルト
- ホスト名:localhost
- ポート:1521
- SID:xe
-
参考
- Oracle Database への接続および検索 > SQL Developer から Oracle Database への接続
https://docs.oracle.com/cd/E16338_01/appdev.112/b56265/tdddg_connecting.htm
- Oracle Database への接続および検索 > SQL Developer から Oracle Database への接続
補足(SID とサービス名): 12c 以降のマルチテナント構成では、
SID ではなくサービス名(XEPDB1など)で接続する。
接続タイプ「基本」の画面で
「SID」ではなく「サービス名」のラジオ ボタンを選ぶ必要がある。
後述のORA-65049と同じく、
12c 以降で手順が変わるポイントである。
※ 必要であれば、先に、「SCOTT/tiger スキーマを作成する。」を実施しておく。
-
メニューの「SQL ワークシート」を押下して、作成した接続名を選択する。
若しくは、上記で開いた接続名(で指定した名称)タブのメニューから
「非共有 SQL ワークシート」を選択。 -
開いた「SQL ワークシート」タブに SQL を貼り付けて SQL を発行する
(DDL を発行してテーブルを作成する)。- OpenTouryo/TestTable.txt at develop · OpenTouryoProject/OpenTouryo
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/files/resource/Sql/oracle/TestTable.txt
- OpenTouryo/TestTable.txt at develop · OpenTouryoProject/OpenTouryo
-
作成したテーブルに対して SQL を発行してデータが参照できるかどうか確認する。

移行メモ(誤字): 元ページの「出指定した名称」は「で指定した名称」の誤記。
-
新規作成 → プロジェクト → コンソール アプリケーションを作成する。
-
NuGet から ODP.NET Managed Driver を検索してインストールする。
-
以下のコードを記述してデバッグ実行するとレコード件数が返る。
(接続文字列のアカウントは、system とインストール時に入力したパスワードなど
環境に合わせて変更すること。)
using Oracle.ManagedDataAccess.Client;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
OracleConnection cn = new OracleConnection("User Id=system;Password=xxxx;Data Source=localhost/XE;");
cn.Open();
OracleCommand cmd = new OracleCommand("SELECT COUNT(*) FROM SHIPPERS", cn);
Console.WriteLine(cmd.ExecuteScalar().ToString());
Console.ReadKey();
}
}
}補足(最新化:NuGet パッケージの選択): 対象ランタイムによって
導入するパッケージが異なる。
ランタイム NuGet パッケージ .NET Framework Oracle.ManagedDataAccess.NET(Core 3.1 / 6 以降) Oracle.ManagedDataAccess.Core接続文字列の
Data Sourceは、上記の EZ Connect 記法
(ホスト/サービス名)のほか、tnsnames.oraのネット サービス名や
接続記述子そのものも指定できる
(ADO.NETデータプロバイダの接続文字列)。また、
systemは管理者アカウントであり、
アプリケーションからの接続には使わないのが原則である
(検証目的であることを踏まえて読むこと)。
system スキーマではクリーンナップなどが面倒なので、scott/tiger スキーマを作成する。
- Oracle 11g の環境で、scott/tiger のサンプル スキーマを作成 | cyberarchitect
http://replication.hatenablog.com/entry/2015/02/16/093000
12c 以降では、プラガブル・データベースを使用する必要がある
(後述の ORA-65049 を参照)。
- 「C:\oraclexe」がインストール・ディレクトリとして、
以下に SCOTT/tiger スキーマ作成用の DDL を発見できた。
"C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\utlsampl.sql"
(utlsmtp.sql と間違いやすいと思うので注意する。)
- 18c の場合は、以下にある。
"C:\u01\app\product\18.0.0\dbhomeXE\rdbms\admin\utlsampl.sql"
-
スキーマ作成用の DDL を SQL Developer を使用して実行する。
-
プラガブル・データベース+SQL Developer 無しの場合は、
sqlplus を使用して以下のようにutlsampl.sqlを実行する。
>cd ...\rdbms\admin\utlsampl.sql
>sqlplus system/system as sysdba
SQL> show con_name
SQL> alter session set container=XEPDB1;
SQL> show con_name
SQL> @utlsampl.sql
※ A5:SQL Mk-2 で utlsampl.sql を実行できなかったので sqlplus を使用。
- 「SQL Developer を起動して接続する。」に戻って手順を繰り返す。
-
CASCADE付きのDROP USERを行うことで、スキーマをクリア(リセット)できる。- スキーマ作成・削除 (oracle)|淡々たんのメモ
https://ameblo.jp/tan3/entry-10013104664.html
- スキーマ作成・削除 (oracle)|淡々たんのメモ
-
前述の
utlsampl.sql内では、冒頭で、下記のCASCADE付きのDROP USERが
呼ばれているので、再実行すれば、これをクリア(リセット)できる。
開発・テストの際に便利。
DROP USER SCOTT CASCADE;
DROP USER ADAMS CASCADE;
DROP USER JONES CASCADE;
DROP USER CLARK CASCADE;
DROP USER BLAKE CASCADE;注意:「SCOTT/tiger」への接続がある場合、DROP USER に失敗するので、
Oracle を再起動して、system ユーザーから utlsampl.sql を再実行する。
- 「SQL を発行する(DDL を発行してテーブルを作成する)。」に戻って手順を繰り返す。
- 11g からデフォルトで、パスワードが 180 日期限切れになるらしい。
- 開発・テスト用途であれば、無期限に指定しておいた方がイイかも。
alter profile default limit password_life_time unlimited;- 参考
- 急に oracle に繋がらなくなった!?~ORA-28001:パスワードが期限切れです~ - Qiita
https://qiita.com/maruyama42/items/cb3177f8701f1679669a
- 急に oracle に繋がらなくなった!?~ORA-28001:パスワードが期限切れです~ - Qiita
補足: これは開発・テスト環境限定の対処である。
本番環境でパスワードの有効期限を無期限にするのはセキュリティ上望ましくない。
アプリケーション用アカウントの期限切れによる停止を避けたい場合は、
専用のプロファイルを作って個別に設定するか、
そもそもパスワードを持たない認証方式
(Kerberos、証明書、クラウドのマネージド ID)を検討する。
- oracle - How do I resolve this "ORA-01109: database not open" error? - Stack Overflow
https://stackoverflow.com/questions/27280405/how-do-i-resolve-this-ora-01109-database-not-open-error
-
12c 以降ではプラガブル・データベースを使用する必要がある。
-
既定で、XEPDB1 なるプラガブル・データベースがあるのでコレを利用可能。
-
(ネット上に様々な情報があるが、正直、よー解らんので。)
「Database Configuration Assistant」を使用して管理(作成・削除)するのが楽。
補足(マルチテナント構成): 12c 以降の Oracle は
**CDB(コンテナ DB)と PDB(プラガブル DB)**の 2 層構造になった。
役割 CDB$ROOT インスタンス共通のメタデータを保持。業務ユーザは作らない PDB(XEPDB1 等) 実際のアプリケーション用データベース
CDB$ROOTに接続したままCREATE USER SCOTTを実行すると
ORA-65049になる。
これを避けるには、本文にあるとおり
ALTER SESSION SET CONTAINER=XEPDB1;で PDB に切り替えるか、
最初からサービス名で PDB に直接接続する。なお、CDB$ROOT に共通ユーザを作る場合は
C##プレフィックスが必要である(CREATE USER C##ADMIN ...)。
- Oracle は、ホスト名/IP アドレスを変更すると起動しなくなる。
- 開発環境なので、Oracle のアンインストール・インストールを行った。
補足: これは
listener.ora/tnsnames.oraに
インストール時のホスト名が埋め込まれていることによる。
再インストールせずとも、
%ORACLE_HOME%\network\admin\配下の 2 ファイルのHOST=を
新しいホスト名(またはlocalhost)に書き換えて
リスナーを再起動すれば復旧できることが多い。
-
環境変数に
ORACLE_HOMEを追加すると、この現象が発生するらしい。
(丁度、Apache JMeterの調査と動作確認で
ORACLE_HOME環境変数を追加していた。) -
必要に応じて、
ORACLE_HOME環境変数を削除する。
補足: Windows 版の Oracle は
レジストリ(HKLM\SOFTWARE\ORACLE\KEY_*)からORACLE_HOMEを解決するため、
環境変数側に別の値があると不整合を起こす。
複数の Oracle Home が同居する環境で起きやすい問題である。
-
意外と簡単!? Oracle Database 11g Release 2 データベース構築編
http://www.oracle.com/technetwork/jp/articles/selfstudy-win-11-131931-ja.pdf -
SQL Developer の使い方~ダウンロード、インストール、DB 接続、SQL 実行
Oracle オラクルエンジニア通信
https://blogs.oracle.com/oracle4engineer/
- Managed な ODP.NET で tnsnames.ora を参照する (Windows, Visual Studio 2015) - Qiita
https://qiita.com/monta31538/items/b31382e98ae03f5d9c3c
Oracle を利用予定ですが、Open棟梁で対応していないバージョン・エディションはある? - Google グループ
https://groups.google.com/forum/#!topic/opentouryoproject/iDxTplIdWVs
12c で廃止と言われていたらしいが、18c で復活した模様。
- Oracle XE(Express Edition)は 12c で廃止! | Oracle 初心者でもスッキリわかる
https://sql-oracle.com/?p=1738
-
Oracle Database 18c Express Edition がそろそろ出るようです! | DBXAP
https://dbxap.sixsquare.co.jp/oracle-database-18c-express-edition/ -
Oracle Database 18c Express Edition の紹介 - Qiita
https://qiita.com/nakaie/items/2e383d4916530dce6a4f
補足(最新化:現在の XE): Express Edition はその後も継続しており、
21c XE が提供されている。制限は、
- CPU: 2 コアまで
- メモリ: 2GB まで
- ユーザ データ: 12GB まで
といったもの。
現在は、コンテナ イメージ
(container-registry.oracle.com/database/express)で
起動するのが最も手軽である。
Tags: 移行, データアクセス, ADO.NET
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。