カテゴリー別アーカイブ: プログラム

[LDAP認証初心者]LDAPとは・・・?

C#にてLDAP認証を実装することになり
テスト環境のLDAPサーバも構築しないといけなくなり、
今までLDAPについては認証をするものということくらいか
知らなかったので、先ずはLDAPとは何かについて調べてみました。

■LDAP(Lightweight Directory Access Protocol)
ディレクトリ・サービスに接続するために使用されるプロトコルの一つ

■ディレクトリ・サービス
コンピュータネットワーク上にあるユーザ情報、マシン名などの資源を管理するサービス
ユーザ名などのキーとなる値から様々な情報を検索することが可能

・ディレクトリーサービスとして代表的なものとして
DNS(Domain Name Syetem),オープンソースのOpenLDAP,
MicrosoftのWindows2000以降のサーバ製品に標準搭載されているActive Directory

・ディレクトリサービスは特殊なデータベースを用いるため、一般的なデータベースとは
異なった特徴がある

読み取りが高速
分散型の情報格納モデル
高度な検索機能を持つ

 

本番環境では、NECのESD(EnterpriseDirectoryServer)を使用するということでしたが
テスト環境ではオープンソースのOpenLDAPを使用して構築することになりました。

次回は、OpenLDAPでのLDAPサーバ構築について書いてみたいと思います。
(サーバ構築が順調に進んでいれば。。)

 

[Oracle初心者運用メモ]全テーブルの件数を取得

OracleDB内の全テーブルの件数を取得するSQLを調べてみたところ
一番簡単なのは下記のSQLでした。

SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES;

但し、このSQLは、統計情報から件数を参照するので
統計情報直後でないと、正確な件数は求められません。

大体の件数が知りたいのであれば、このSQLでいけるけど。。
あまり使えないかな~。

次回は、最新の件数を取得する方法を調べてみたいと思います。

 

[Oracle初心者運用メモ]初めて見るエラー

先日、OracleDBへの接続で
下記のエラーメッセージが表示されました。

「ORA-12571: TNS:パケット・ライターに障害が発生しました」

初めて見るエラーだったので調べてみると
クライアントとサーバー・プロセス間の接続が切断された場合など
ネットワークが原因のようです。

再接続したところエラーは表示されず、正常に接続でき
それ以降は再現していません。

頻繁に発生するようだったら
何かしら回避策を調査しようと思います。

DataTable間の操作について

今回はC#で開発した際の話です。

あるDataTableから必要なフィールドのみを選択し、
新規のDataTableを作る必要が有りました。

そこで、今回は以下の様に対応しました。

元となるDataTable:table1
必要なフィールドのみを持つ新規DataTable:table2
必要なフィールドのインデックス:0,1,3,4,7


// 必要なフィールドの列名を配列化します。
string[] requiredColumns = {dt.Columns[0].ToString(),
                            dt.Columns[1].ToString(),
                            dt.Columns[3].ToString(),
                            dt.Columns[4].ToString(),
                            dt.Columns[5].ToString(),
                           };

// 元のテーブルから必要なフィールドのみを抽出して、テーブルを新規作成します。
System.Data.DataTable table2 = table1.DefaultView.ToTable(true, requiredColumns);

ToTableの最初の引数は、重複する行を含むかどうかをBool値で指定します。
Trueなら重複しない行のみ格納され、Falseでは重複する行も格納されます。
二つ目の引数は、抽出する列名を指定します。
ここでは、事前に配列化しておいた変数をセットしました。

場合によっては、新規作成したテーブルの構造と値をそのまま別のテーブルで使用したい場合には、
以下の様に行います。


// table2の構造と値をtable3へコピーします。
System.Data.DataTable table3 = table2.Copy();

//table2の構造のみをtable4へコピーします。
System.Data.DataTable table4 = table2.Clone();

Cloneは構造のみをコピーするので、
table2と同じ構造を持ち、値は異なる、といったデータの保持が可能になります。

また、元のテーブルと同じ構造を持ち、元のテーブル特定行のみを移したい場合、
ImportRow()メソッドを使用します。


System.Data.DataTable table4 = table2.Clone();
table4.ImportRow(table2.Rows[0]);

とすることで、table2の1行目のデータをtable4へインポートできます。

[Oracle初心者運用メモ]リスナーのHOST名変更

Oracle DBサーバとして使用しているPCをドメイン参加に変更したところ、
Oracle DBへ接続できなくなってしまいました。

よく考えたら、ドメイン参加にしたことで
コンピュータ名が下記のように変わったためでした。
「pcname.testdomain.local」

DBサーバのリスナー(listener.ora)で指定しているHOST名を変更し
接続できるようになりました。

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = pcname.testdomain.local)(PORT = 1521))
)
)

ちなみに、リスナーを変更した場合、リスナー再起動が必要です。