OracleDB内の全テーブルの件数を取得するSQLを調べてみたところ
一番簡単なのは下記のSQLでした。
SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES;
但し、このSQLは、統計情報から件数を参照するので
統計情報直後でないと、正確な件数は求められません。
大体の件数が知りたいのであれば、このSQLでいけるけど。。
あまり使えないかな~。
次回は、最新の件数を取得する方法を調べてみたいと思います。
OracleDB内の全テーブルの件数を取得するSQLを調べてみたところ
一番簡単なのは下記のSQLでした。
SELECT TABLE_NAME, NUM_ROWS FROM USER_TABLES;
但し、このSQLは、統計情報から件数を参照するので
統計情報直後でないと、正確な件数は求められません。
大体の件数が知りたいのであれば、このSQLでいけるけど。。
あまり使えないかな~。
次回は、最新の件数を取得する方法を調べてみたいと思います。
先日、OracleDBへの接続で
下記のエラーメッセージが表示されました。
「ORA-12571: TNS:パケット・ライターに障害が発生しました」
初めて見るエラーだったので調べてみると
クライアントとサーバー・プロセス間の接続が切断された場合など
ネットワークが原因のようです。
再接続したところエラーは表示されず、正常に接続でき
それ以降は再現していません。
頻繁に発生するようだったら
何かしら回避策を調査しようと思います。
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))
)
)
ちなみに、リスナーを変更した場合、リスナー再起動が必要です。
オラクル九州支社様でIT技術者向けのコミュニティを開設されていて
定期的に、オラクル製品に関する技術セミナーを無料で
開催されています。
パフォーマンスチューニングやトラブルシュートなど、
奥が深すぎて独学で理解するのは難しいので、
事例を元になどいろいろな技術の情報を直接聞けるので
とても勉強になります。
できれば、毎回(毎月1回)参加したいところですが
開催場所が少し遠方のため、年に1~2回程度しか参加できて
いません。。
先日は、テーマが「性能トラブル対策ガイド!
オプティマイザ/統計情報収集について」ということで
私にはレベルが高い内容でしたが受講してきました。
Oracle内部で、効率がよい実行計画をたてるために
自動的に統計情報が収集されているので
(ある程度、新しいバージョンのOracleでは)
特に気にする必要はないのですが
どのような情報を収集してどのように実行計画に
活用されているのかを理解することで
適切なタイミングで統計情報が収集されているかを考え、
システムによってはメンテナンスが必要な場合もあるようです。
例えば、11gR2ではデフォルトで、統計情報収集の時間帯が
月~金曜は22時~26時,土~日曜は6時~26時で
設定されていますが、
夜間バッチ処理などで26時以降にデータ量が変動する場合は
統計情報収集の時間帯を夜間バッチ処理以降に変更するなど
検討する必要があったり、
ワークテーブル的なテーブルは統計情報を取集しても意味がない
ということであれば、そのテーブルだけ統計情報収集をとめたりなど
検討する必要もあるようです。
統計情報収集もDBに負担をかけますので。
弊社の開発機用DBサーバも夜10時になると、応答が遅くなるな~
と思いつつ、原因を調査するまでに至ってなかったのですが
おそらく統計情報収集が原因なんだろうなというのが
わかってよかったです。
ASP.NET(VS2010)開発のWebシステムを構築している
客先の本番Webサーバにて、突然、下記のエラーが発生し、
Webシステムから別DBサーバのDB(Oracle11g)へ接続できなくなってしまいました。
——————————-
データベースからのデータ取得に失敗しました。
‘OraOLEDB.Oracle’ プロバイダーはローカルのコンピューターに登録されていません。
——————————-
WebシステムからはADO.NETのOledb接続でDBへ接続しています。
Webサーバの環境は以下の通り(Webサーバ管理は別会社)
OS:Windows Server 2008 R2
DB:Oracle11g クライアント32bit
実は、Webシステムを構築した当初は
DBはOracle11gサーバ64bitがインストールされており
その時点では正常に接続できていました。
その後、別会社で使用しているシステムが32bit版のOracleクライアントが
必要になり、 追加でOracle11g クライアント32bitをインストールされたようで
インストール後、エラーが発生するようになりました。
・Oracleホームディレクトリのユーザ権限を確認
(Everyone権限を設定したりなどいろいろ試す)
・Oracleホーム/binフォルダへのPath設定を確認
などいろいろ試してみましたが結果は変わらず。。
Webサーバを管理している会社に、Oracle11g クライアント32bitをアンインストールし
構築当初のOracle11gサーバ64bitに戻してもらいましたが、
それでも結果は変わらず。。
最終的にWebサーバをOSからインストールしなおしていただき
(DBはOracle11gサーバ64bit)
正常に接続できるようになりました。
今回の現象は、Oracleの再イントールが要因でしたが
そのことにより何故このような現象が発生したのか
OS再インストールではなく、何か解決方法はなかったのか
突き止めることができなかったことが残念です。