かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

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

Docker:基本操作メモ

Dockerは、軽量な仮想化環境を実現するツール。
2017年8月現在、以下のエディションがある。
 - CE(Community Edition):無償
 - EE(Enterprise Edition):有償    
以下、OSは Ubuntu 14.04.5 を使用しています。

Docker CE をインストール

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get -y install docker-ce

バージョン確認

docker --version

Docker Image検索

sudo docker search <検索ワード>

(例:centosのイメージを検索)
sudo docker search centos

Docker Hubからも検索できる。

Imageファイルの取得

sudo docker pull <イメージ名>

(例:centosのイメージを取得)
sudo docker pull centos

ローカルのイメージの一覧を確認

sudo docker images

イメージの詳細を確認

sudo docker inspect <REPOSITORY:TAG>

(例)
sudo docker inspect centos:latest

TAGは省略可能で、その時は latestとなる。
以下のようにIMAGE ID指定でもOK。

sudo docker inspect <IMAGE ID>

(例)
sudo docker inspect 328edcd84f1b

REPOSITORY、TAG、IMAGE IDは、上記のsudo docker imagesにて確認できる。

イメージの削除

sudo docker rmi <REPOSITORY:TAG>

または

sudo docker rmi <IMAGE ID>

コンテナ作成

sudo docker run <REPOSITORY:TAG>

または

sudo docker run <IMAGE ID>

オプション無しで runを実行した場合、起動後にすぐに終了する。
バックグラウンドで動作させたい場合、-tdオプションを使用する。

(よく使うオプション)
-t:疑似ターミナル (pseudo-TTY) を割り当て
-d:コンテナをバックグラウンドで実行(デタッチドモード)
-i:コンテナの STDIN にアタッチ
-p:コンテナのポートをホスト側に公開

実行中のコンテナ一覧を表示

sudo docker ps

実行終了したコンテナ一覧を表示

sudo docker ps -a

コンテナの削除

sudo docker rm <CONTAINER ID>

CONTAINER ID は、上記の docker psにて確認できる。
CONTAINER ID を指定する時は、先頭X文字を入力するだけでも判別してくれる。

実行中のコンテナのログを確認

sudo docker logs <CONTAINER ID>

バックグラウンドで実行中のコンテナを、フォアグラウンドに移動

sudo docker attach --sig-proxy=false <CONTAINER ID>

ctrl+C でコンテナを再びバックグランドに戻す。

バッググラウンドで実行中のコンテナにログイン

sudo docker exec -it <CONTAINER ID> /bin/bash

実行中のコンテナを停止

sudo docker kill <CONTAINER ID>

停止したコンテナを再開

sudo docker start <CONTAINER ID>

コンテナの削除

sudo docker rm <CONTAINER ID>

停止中のコンテナを全て削除

sudo docker rm `sudo docker ps -a -q`

コンテナを起動し、内部で作業する

sudo docker run -it <REPOSITORY:TAG> /bin/bash/bin/bash

イメージ作成

sudo docker commit <CONTAINER ID> <イメージ名>

イメージ名は、「ユーザ名/名称」とするのが慣習だそうな。
ユーザ名は、Docker Hubのアカウント名と同一にしておく。

ビルド

イメージからコンテナを立ち上げ、何らかの変更を加えたものをイメージ化する作業を、スクリプトに記述して自動化できる。
自動化する内容は、『Dockerfile』というファイルを作成して記述する。
(以下、Dockerfile 記述例)

# 何のイメージかを表す
FROM centos
# 誰が書いたかを表す
MAINTAINER kakisoft <sample@gmail.com>
# RUN: buildする時に実行される
RUN echo "now building..."
RUN yum install -y httpd
# ADD: ローカルのファイルをコンテナにコピー
ADD ./index.html /var/www/html/
# EXPOSE: 起動時に指定ポートをLISTEN 
EXPOSE 80
# CMD: runする時に実行される
CMD ["echo", "now running..."]
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

Dockerfile作成後、以下を実行

sudo docker build -t <イメージ名> .

ホストのポートをコンテナのポートにリダイレクト

以下では、ホストのポート8080を、コンテナの80にリダイレクト。

sudo docker run -p 8080:80 -d <イメージ名>

Docker Hubへのログイン

sudo docker login

Docker Hubへプッシュ(アップロード)

ログイン後に実行する。

sudo docker push <DockerHubID/イメージ名>

入力例:sudo docker push kakisoft/httpd
イメージ名の先頭は、DockerHubIDでなければいけないのだろうか。
この辺はまだ良くわからないです。

プッシュしたイメージを取得する場合、 sudo docker pull <イメージ名> でOK。

1分で分かる Vagrant

Vagrant(ベイグラント)とは?

仮想マシンを簡単に立ち上げるためのツールです。

f:id:kakisoft:20170812115035p:plain
Boxファイルから仮想マシンを起動できます。
1つのBoxから、複数の仮想マシンを起動する事も可能です。
(図ではVirtualBoxを使用しています。実際には、ユーザ操作として VirtualBoxを起動する必要はありません。Vagrantが代行してくれます。)
 
 

Boxファイルとは?

仮想マシンのひな形です。
f:id:kakisoft:20170812115038p:plain
Boxファイルは公式サイトや、Vagrantbox.es、またはVagrant Cloudなどからダウンロードできます。
Boxを使用すると、OSのインストールを含め、1から環境を構築する必要はありません。  
 

Boxは、カスタマイズ可能です

f:id:kakisoft:20170812115041p:plain
 
 

ユーザ間で同じ環境を整える事が容易になります

f:id:kakisoft:20170812115045p:plain
Boxファイルは仮想マシンのサイズよりも遥かに軽量です。  
 

Dockerとの違いは?

Dockerは、OS(ここでは「仮想マシン」と読み替えた方が分かりやすいかもしれません)上で稼働します。
Vagrantは、仮想マシンの起動や終了を制御します。