Skip to content

MS_Oracle11gXEODPNET

nishi_74322014 edited this page Aug 18, 2026 · 1 revision

Oracle11gXE + ODP.NET Managed Driver

概要

詳細

Oracle XEをダウンロードしてインストール

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

  • SQL Developer をダウンロードしてインストールする。

  • システム要件を確認すると、JDK 1.8 以上、
    Windows 10 では、JDK 8u51 or higher が必要になる。

  • 必要に応じて、以下から、JDK nunn をダウンロードしてインストールする。

    • 以下から、ダウンロードして利用可能(OTN ライセンスで利用可能)

    • OTN ライセンスの JDK か?AdoptOpenJDK か?だが、以下を見ると、
      SQL Developer は、Oracle Java のみサポートと言う事らしい。

    • 「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

A5:SQL Mk-2(言語等に依存しない汎用開発支援ツール(DNET_GeneralDevTools.md))

  • 参考

Oracleを起動してアプリケーションから使うまで。

Oracleを起動する。

「Start Menu」に「Start Database」が作成されているのでコレを押下する。

SQL Developerを起動して接続する。

接続を追加する。

  • 接続名:任意

  • ユーザー名:system

  • パスワード:インストール時に入力したパスワード

  • Oracle(既定値のままでイイ)

    • 接続タイプ:基本
    • ロール:デフォルト
    • ホスト名:localhost
    • ポート:1521
    • SID:xe
  • 参考

補足(SID とサービス名): 12c 以降のマルチテナント構成では、
SID ではなくサービス名XEPDB1 など)で接続する。
接続タイプ「基本」の画面で
「SID」ではなく「サービス名」のラジオ ボタンを選ぶ必要がある。
後述の ORA-65049 と同じく、
12c 以降で手順が変わるポイントである。

SQLを発行する(DDLを発行してテーブルを作成する)。

※ 必要であれば、先に、「SCOTT/tiger スキーマを作成する。」を実施しておく。

  • メニューの「SQL ワークシート」を押下して、作成した接続名を選択する。
    若しくは、上記で開いた接続名(で指定した名称)タブのメニューから
    「非共有 SQL ワークシート」を選択。

  • 開いた「SQL ワークシート」タブに SQL を貼り付けて SQL を発行する
    (DDL を発行してテーブルを作成する)。

  • 作成したテーブルに対して SQL を発行してデータが参照できるかどうか確認する。

作成したテーブルに対してSQLを発行してデータを参照

移行メモ(誤字): 元ページの「出指定した名称」は「指定した名称」の誤記。

Visual StudioからODP.NET Managed Driverを使用して接続・実行する。

  • 新規作成 → プロジェクト → コンソール アプリケーションを作成する。

  • 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 は管理者アカウントであり、
アプリケーションからの接続には使わないのが原則である
(検証目的であることを踏まえて読むこと)。

SCOTT/tigerスキーマを作成する。

system スキーマではクリーンナップなどが面倒なので、scott/tiger スキーマを作成する。

プラガブル・データベースの作成(12c以降)

12c 以降では、プラガブル・データベースを使用する必要がある
(後述の ORA-65049 を参照)。

スキーマ作成用のDDLを取得

  • 「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を実行

  • スキーマ作成用の 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 を行うことで、スキーマをクリア(リセット)できる。

  • 前述の 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 を発行してテーブルを作成する)。」に戻って手順を繰り返す。

ORA-NNNNN

ORA-28001: the password has expired.

  • 11g からデフォルトで、パスワードが 180 日期限切れになるらしい。
  • 開発・テスト用途であれば、無期限に指定しておいた方がイイかも。
alter profile default limit password_life_time unlimited;

補足: これは開発・テスト環境限定の対処である。
本番環境でパスワードの有効期限を無期限にするのはセキュリティ上望ましくない。
アプリケーション用アカウントの期限切れによる停止を避けたい場合は、
専用のプロファイルを作って個別に設定するか、
そもそもパスワードを持たない認証方式
(Kerberos、証明書、クラウドのマネージド ID)を検討する。

ORA-01109: database not open

ORA-65049: creation of local user or role is not allowed in CDB$ROOT.

  • 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 ...)。

トラブルシューティング

vendor code (17002) 発生、TNSListenerが起動していない。

ホスト名/IPアドレス変更

  • Oracle は、ホスト名/IP アドレスを変更すると起動しなくなる。
  • 開発環境なので、Oracle のアンインストール・インストールを行った。

補足: これは listener.ora / tnsnames.ora
インストール時のホスト名が埋め込まれていることによる。
再インストールせずとも、
%ORACLE_HOME%\network\admin\ 配下の 2 ファイルの HOST=
新しいホスト名(または localhost)に書き換えて
リスナーを再起動すれば復旧できることが多い。

「ORACLE_HOME」環境変数

  • 環境変数に ORACLE_HOME を追加すると、この現象が発生するらしい。
    (丁度、Apache JMeterの調査と動作確認で
    ORACLE_HOME 環境変数を追加していた。)

  • 必要に応じて、ORACLE_HOME 環境変数を削除する。

補足: Windows 版の Oracle は
レジストリ(HKLM\SOFTWARE\ORACLE\KEY_*)から ORACLE_HOME を解決するため、
環境変数側に別の値があると不整合を起こす。
複数の Oracle Home が同居する環境で起きやすい問題である。

参考

ODP.NET Managed Driver

で、tnsnames.ora を参照する方法

が、サポートするOracleバージョン

Oracle を利用予定ですが、Open棟梁で対応していないバージョン・エディションはある? - Google グループ
https://groups.google.com/forum/#!topic/opentouryoproject/iDxTplIdWVs

Express Editionのその後

12c で廃止と言われていたらしいが、18c で復活した模様。

12c

18c

補足(最新化:現在の XE): Express Edition はその後も継続しており、
21c XE が提供されている。制限は、

  • CPU: 2 コアまで
  • メモリ: 2GB まで
  • ユーザ データ: 12GB まで

といったもの。
現在は、コンテナ イメージ
container-registry.oracle.com/database/express)で
起動するのが最も手軽である。


Tags: 移行, データアクセス, ADO.NET

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally