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

[Oracle初心者運用メモ]Oracle勉強会に参加しました

オラクル九州支社様でIT技術者向けのコミュニティを開設されていて
定期的に、オラクル製品に関する技術セミナーを無料で
開催されています。

パフォーマンスチューニングやトラブルシュートなど、
奥が深すぎて独学で理解するのは難しいので、
事例を元になどいろいろな技術の情報を直接聞けるので
とても勉強になります。

できれば、毎回(毎月1回)参加したいところですが
開催場所が少し遠方のため、年に1~2回程度しか参加できて
いません。。

先日は、テーマが「性能トラブル対策ガイド!
オプティマイザ/統計情報収集について」ということで
私にはレベルが高い内容でしたが受講してきました。

Oracle内部で、効率がよい実行計画をたてるために
自動的に統計情報が収集されているので
(ある程度、新しいバージョンのOracleでは)
特に気にする必要はないのですが

どのような情報を収集してどのように実行計画に
活用されているのかを理解することで
適切なタイミングで統計情報が収集されているかを考え、
システムによってはメンテナンスが必要な場合もあるようです。

例えば、11gR2ではデフォルトで、統計情報収集の時間帯が
月~金曜は22時~26時,土~日曜は6時~26時で
設定されていますが、
夜間バッチ処理などで26時以降にデータ量が変動する場合は
統計情報収集の時間帯を夜間バッチ処理以降に変更するなど
検討する必要があったり、
ワークテーブル的なテーブルは統計情報を取集しても意味がない
ということであれば、そのテーブルだけ統計情報収集をとめたりなど
検討する必要もあるようです。

統計情報収集もDBに負担をかけますので。

弊社の開発機用DBサーバも夜10時になると、応答が遅くなるな~
と思いつつ、原因を調査するまでに至ってなかったのですが
おそらく統計情報収集が原因なんだろうなというのが
わかってよかったです。

 

[VB.NETメモ]SMTP認証でメール送信

.Net FrameworkのSMTPメール送信クラス
(System.Web.Mail.SmtpMail)を使用してのメール送信で

ある日突然、下記のエラーが発生しメール送信が失敗するようになりました。
「メールボックス名は許可されていません。
サーバーの応答: sorry, that domain isn’t in my list of allowed rcpthosts (#5.7.1)」

原因は、SMTP認証設定なしでメール送信していたためでした。

今までは、SMTP認証なしでもメール送信できていたのですが
何故か突然エラーになるように。。
(メールサーバはレンタルサーバを使用)

 

下記のように差出人の認証に使用する資格情報を設定して
メール送信することにより正常に送信できるようになりました。

Dim sc As New System.Net.Mail.SmtpClient()
sc.Credentials = New System.Net.NetworkCredential(“username”, “password”)

※username,passwordは差出人のユーザ名,パスワードを設定

 

[Oracle初心者運用メモ]ADO.NETでOledb接続ができない

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再インストールではなく、何か解決方法はなかったのか
突き止めることができなかったことが残念です。

[Oracle初心者運用メモ]大文字/小文字、全角/半角区別なしであいまい検索

≪Oracle10gR2からの大文字/小文字、全角/半角区別なしであいまい検索≫

大文字/小文字区別なしの検索は、大文字/小文字変換関数を使用することにより
DBの値,検索文字どちらも大文字(又は小文字)に
変換して検索することで区別なし検索ができます。

全角/半角区別なしの検索は、
Oracle10gR2から
UTL_I18N.TRANSLITERATEという日本語のひらがなとカタカナを変換する機能が提供され、
この機能を使用することでDBの値,検索文字どちらも全角(又は半角)に
変換して検索することで区別なし検索ができます。

 

下記SQLは、大文字/小文字、全角/半角区別なしで部分一致検索です。

select name
from 製品マスタ
where
UTL_I18N.TRANSLITERATE(UPPER(TO_MULTI_BYTE(name)),'kana_fwkatakana')
like '%' || UTL_I18N.TRANSLITERATE(UPPER(TO_MULTI_BYTE( 検索文字 )),'kana_fwkatakana') || '%'

※'kana_fwkatakana'はすべてのタイプの仮名文字を全角カタカナに変換します。

[Oracle初心者運用メモ]一時領域サイズ変更Oracle10g

≪Olacle10gの一時領域サイズ変更≫

前回のブログでOracle11gでの一時領域サイズ変更の内容を書いておりましたが
[Oracle初心者運用メモ]一時領域サイズ変更

今度はOracle10gのDBサーバで
同様にディスク使用量が急激に増えてしまいました。

前回のOracle11gの時と同じようにサイズ変更を行えばいいかな
と軽く考えていたのですが
Oracle11gで実施したサイズ変更コマンドを実行すると
エラーになってしまいました。

調べてみると、Oracle10gで一時領域のサイズを縮小するには
一時領域を新しく作り直す必要があるそうです。

下記の手順でコマンド実行により可能です。
(SPLPLUSを起動して実行)

1.TEMP領域に一時領域を追加
alter tablespace TEMP_AREA_NAME add tempfile ‘新規TEMPファイルパス’ size 500M;

2.追加した一時領域の自動拡張制限を設定しておく
alter database datafile ’新規TEMPファイルパス’ autoextend on maxsize 10000M;

3.既存の一時領域をオフラインにする
alter database tempfile ‘既存TEMPファイルパス’ offline;

4.既存の一時領域を削除する
alter database tempfile ‘既存TEMPファイルパス’ drop including datafiles;
↑↑↑
本当は、これで、物理ファイルも削除されるはず(?)だけど
本番DBサーバでは物理ファイルが削除されていなかったので
Oracleサービス停止して、物理ファイルのみ別途削除を行いました。

※Enterprise Managerでも設定可能です。