かきスタンプ

福岡で物流系のエンジニアやってます

Oracle:【ORA-00060】デッドロックの発生原因を調査

(エラーメッセージ)
ORA-00060: リソース待機の間にデッドロックが検出されました。

デッドロックの解除は、こんな感じで。

詳しく調べたい場合(デッドロックが発生しやすいSQLはどれか等)は、トレースファイルを確認する。

トレースファイルの保存先は、sql plusにて以下を実行する事で調べる事が出来る。

show parameter user_dump_dest;

ファイル名は、<SID>_ora_<process_id>.trc となっている。

Oracle:【ORA-12514】突然リスナー異常が発生して繋がらなくなった

正常稼働していたが、ある日突然繋がらなくなったので調査。

クライアントから接続した時のエラー内容

ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

サーバから接続した時のエラー内容

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist

あれ?エラーの内容が違う。
よく調べてたら、DBFを保存しているドライブがパンパンになっていて、SGA(共有メモリ)へ正常にアクセスできなかったのが原因だったみたい。

ディスク容量を空けた後、マシン再起動で解決した。

参考情報

DBFの保存先は、以下のコマンドで確認できる。

select TABLESPACE_NAME, FILE_NAME from DBA_DATA_FILES

Oracle:ログの種類と出力先

Oracleのログの種類と出力先についてのメモ。
以下、出力先はデフォルト設定時となっています。

クライアントからDBへの接続が出来ない場合

sqlnet.log を確認する。
パスはバージョンによって異なる。

(10g以前)
$ORACLE_HOME/network/log

(11g以降)
$ORACLE_BASE/diag/clients/user_<OS_USERNAME>/host_<MASHINE_HASH_VALUE>_<ADR_VERSION>/trace/

sqlnet.log の出力先は、sqlnet.ora にて指定可。
sqlnet.ora のパスは、$ORACLE_HOME/network/admin/


リスナーに接続できない場合

リスナー・ログ(listener.log)を確認する。
パスはバージョンによって異なる。

(10g以前)
$ORACLE_HOME/network/log

(11g以降)
$ADR_BASE/diag/rdbms/<ORACLE_SID>/<SID>/trace/alert_<ORACLE_SID>.log
$ADR_HOME/alert/log.xml



各種アラート情報

アラート・ログ(alert_.log)を確認する。
パスはバージョンによって異なる。

(10g以前)
$ORACLE_BASE/admin/<ORACLE_SID>/bdump/alert_<ORACLE_SID>.log

(11g以降)
$ADR_BASE/diag/rdbms/<SID>/<SID>/trace/alert_<SID>.log

または、sql plusで以下を実行しても確認できます。

show parameter BACKGROUND_DUMP_DEST



その他補足情報

Oracle環境変数

ORACLE_HOME、ORACLE_BASE のパスは、コンソールより以下を実行する事で確認できる。(Windows環境)

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE" /s

ADR_HOME、ADR_BASE は、以下のSQLで確認できる。

select * from V$DIAG_INFO where NAME in ('ADR Base','ADR Home')

ADR

ADR(Automatic Diagnostic Repository:自動診断リポジトリ)は、Oracleの診断に使用するファイル群です。

Visual Studio Code:ショートカットキーの一覧

以下の操作で、ショートカットキーの一覧を表示できる。

ファイル→基本操作→キーボードショートカット

検索機能が付いてて便利。

f:id:kakisoft:20171012011559p:plain  
キーバインドが割り当てられていない操作については、keybindings.jsonを編集する事で有効化できる。
(「次を開いて編集:keybindings.json」をクリックするとファイルを開く。)
 
以下、keybindings.json追記例。

[
    //選択範囲を大文字に変換
    { "key": "ctrl+u", 
      "command": "editor.action.transformToUppercase"},

    //選択範囲を小文字に変換
    { "key": "ctrl+shift+u", 
      "command": "editor.action.transformToLowercase"}
]

key: の内容は任意。
commandに設定する内容は、ファイルを開いた時に同時に開かれる、「既定のキーバインド」のタブを参照。

Ubuntu:PyCharmインストール方法

【環境:Ubuntu 16.04.3 LTS】

PyCharm Community Editionをインストールする手順です。
 
 
Javaがインストールされていない場合、インストールしておきます。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

 
Pycharmインストール手順

sudo sh -c 'echo "deb http://archive.getdeb.net/ubuntu $(lsb_release -sc)-getdeb apps" >> /etc/apt/sources.list.d/getdeb.list'
wget -q -O - http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install pycharm

 
起動コマンド

pycharm

 
 


<以下のサイトを参考にさせて頂きました>
tipsonubuntu.com
Ubuntu 16.04 LTSにPyCharmを入れてみた(PPA使えない事件)

無線LAN用語メモ

IEEE 802.11

無線LANの規格。
b/g/n 等があり、bとgは互換性がある。
bとgは通信速度が大幅に違うので、機器が対応していないなどの理由が無い限り、gの使用をお勧め。
bは低速のため、「pingは飛ぶのに、データが取得できない(実際は時間がめちゃくちゃかかっているだけ)」という現象が発生する事があります。  
 

ESSID (Extended Service Set Identifier)

無線LANアクセスポイントに付ける識別子。
SSIDもほぼ同じ意味で使われる。  
 

RSSI(Receive Signal Strength Indication)

受信している電波信号の強さを数値化したもの。
AP(アクセスポイント)からの発信する時の強度ではなく、端末で受信した時の強度。
-30dBm~-40dBmが安定値。マイナスが大きくなるほど悪くなる。
 
 

WEP(Wired Equivalent Privacy)

無線LAN初期の規格。  
 

WPA(Wi-Fi Protected Access

無線LANの暗号化規格の1つ。WEPの脆弱性を改良。Wi-Fi Allianceが制定。  
 

WPA2(Wi-Fi Protected Access 2)

WPAのセキュリティ強化版。  
 

PSKモード(Pre-Shared Key。事前鍵共有)

パーソナルモードとも。
アクセスポイント側に事前にパスワードを設定しておき、端末側でそのパスワードを打つ事で接続を開始する。  
 

EAPモード

エンタープライズモードとも。
RADIUS認証サーバを使ってEAP(Extensible Authentication Protocol)の認証によりPPP接続する。  
 

RADIUS(Remote Authentication Dial In User Service)

ネットワーク利用の可否の判断(認証)と、利用の事実の記録を、サーバに一元化することを目的としたプロトコル。  
 

EAP(Extensible Authentication Protocol。拡張認証プロトコル

どの認証方式を用いるか指定できるプロトコル。  
 

PPP(Point-to-Point Protocol)

2点間を接続してデータ通信を行うための通信プロトコル。  

PPPoE(Point-to-Point Protocol over Ethernet

PPPをEthernet上で使うためのプロトコル。  
 

PoE(Power over Ethernet

LANケーブルから電源供給できる仕組み。
電源の確保が困難な場所(倉庫の天井など)で使用する。  
 

アドホックモード

アクセスポイントを経由することなく端末機器間で直接通信を行う方式。  
 

インフラストラクチャモード

各端末が無線LANのアクセスポイントを経由して通信を行う方式。  
 

ローミング無線LAN

複数の無線LANが設置されていて、現在接続中のアクセスポイントの電波強度が弱くなった場合、自動で別のアクセスポイントに接続する仕組み。
設定方法は機器によって異なる。  
 

BGS(Back Ground Scan)

設定した閾値を基に、ローミングチェックスキャンをする事。
特定メーカーでのみ使用している用語?

Android:スピナーの方向を設定

こんな感じでスピナーが見切れ、残念な結果になった時の対応。
f:id:kakisoft:20170906223627p:plain
スピナーの展開方向を指定するプロパティは無いみたいなんで、何かしらの工夫をして対処しないといけないみたい。
 
 

対策1.オフセットを設定

スピナーの開始位置にマイナス値を設定する。
dropDownVerticalOffsetにて調整できる。

<Spinner
    android:id="@+id/spinner1"
    android:spinnerMode="dropdown"
    android:dropDownVerticalOffset="-210dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

f:id:kakisoft:20170906223638p:plain
要素が動的になる場合は、ソースコードにて対応する。  
 

対策2.ダイアログ形式にする

オフセットの設定が面倒な場合に。
android:spinnerMode=“dialog” と設定する。

<Spinner
    android:id="@+id/spinner1"
    android:spinnerMode="dialog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

f:id:kakisoft:20170906223657p:plain