.NET のOLEDBとODPにてOracle11gに接続する環境を構築した時のメモ

DBサーバ
 Windows Server 2008 R2

 Oracle 11g R2(64bit)

APサーバ(クライアント)
 Windows Server 2008 R2
 .NET Framework 3.5.1
 C#(OLEDB、ODP接続)
 Oracleクライアント ODAC 11.2 Release 4 (11.2.0.3.0)


インストール手順
1.ソフトウェアのみのインストール
2.リスナーの作成
3.データベースの作成
メモリと文字コードの設定は下記
初期化パラメータのタブ「メモリ」「キャラクタ・セット」

サービス名、SIDの設定は下記
データベース識別情報

グローバル・データベース名 が サービス名(インスタンス名)

SID が SID(グローバル・データベース名の頭の
               ドメイン(プレフィックス相当)がデフォルト


サービス名(インスタンス名)はデータベース作成時に要求される
グローバル・データベース名
※Enterprise Manager の データベース・インスタンス にも表示される

.NETの接続文字列の SOURCE に下記のように設定する

 ホスト名:ポート番号/サービス名(インスタンス名)
 ※ポート(:ポート番号)はデフォルト(1521)なら省略可

 例)OLEDBの場合
"Provider=OraOLEDB.Oracle;Data Source=ホスト名/サービス名;User ID=xxx;Password=xxx;
 OLE DB Services=-2"


※SIDではサービスが登録されていないエラーになります。

※DBサーバのtnsnames.oraのSERVICE_NAMEにグローバル・データベース名が設定されています。

※Oracleのインストール時にソフトウェアとDBをインストールで同時にインストールすると
 lisner.oraのホストの値が localhost で作成されローカルのみしか接続できないので
 注意(ソフトウェアとデータベースを別々にインストールでリスナーを別途作成すればホスト
 名が設定されていた。

※DHCP環境なのでDBサーバにループバックアダプタをインストールして
 そのネットワークアダプタに 固定IP(10.10.10.10)とhostsで名前解決させている

インストール手順は下記参照
http://www.oracle.com/technetwork/jp/articles/selfstudy-win-11-131931-ja.pdf
SQL Server2008 R2 で以前別のSQLServer2008R2で作成したデータファイル

のアタッチをしたら失敗した。

読み取り専用の為、開けないとか。

どうやら、 SQL Server (MSSQLSERVER) サービス アカウント に対する

ファイルの権限がたりないらしい。

Everyone または SQL Server (MSSQLSERVER) サービス アカウント に

フルコントロールの権限を与えたらアタッチできた。

予想ではあるが、もともとはAdministratorがSQL Server (MSSQLSERVER) サービス アカウント

だったのかもしれない。

エラーが発生したSQLServerは NETWORK SERVICE ユーザがSQLServerのサービスアカウント

※SQL Server (MSSQLSERVER) サービス アカウントが下記の場合もあった
 ホスト\SQLServerMSSQLUser$Busido02$MSSQLSERVER

どのユーザでSQL Serverが起動しているかでアタッチできるできないがあるので注意。
データの投入はスクリプトにしておいた方が無難なんだろうな。
Oralceのダンプファイルはその手のトラブルはなかったのだが。


.NET(C#)でMS AD(Active Directory)認証を試してみた。

ADはWindows2008 R2にデフォルトインストール

サンプルアプリはWEBサイトとしてプロジェクトを作成


private Boolean auth01()
{

Boolean flg = false;

try{

String adPath = "LDAP://ドメイン(ホスト名は含まない)";
String domainAndUserName = "ドメイン\\ユーザ";
String password = "ぱすわーど";


    //ADに接続できれば、例外は発生しない模様(Pathがあっていれば)
DirectoryEntry entry = new DirectoryEntry(adPath, domainAndUserName, password);


//ここでLdap認証が入る(Exceptionが発生しなければ成功
Object obj = entry.NativeObject;


    指定したユーザ、パスに合致するユーザ(データ)が存在しないとここで例外が発生
)

flg = true;
}
catch
{
flg = false;

}

return flg;
}

注意

ADからDNSにレコード書き込みが必要。また、DNSがADを認識している必要がある。
ADがDNSと同居している場合、認証を実施するアプリのマシンのDNS参照設定に
AD(DNS同居)を指定しておく必要がある。
一般的な企業IPがDHCPになっていて、DHCPが参照対象のDNS情報を持っているので
アプリのマシンのネットワーク設定を意識する必要はないはず