MB blog

こちらは主に自分用のメモです。

JPAのトランザクションについて

JPAトランザクションについてまとめました。

  • エンティティマネージャの種類
    • コンテナ管理
      • EJBコンテナがライフサイクルを管理
      • DI or JNDI lookupにより取得
    • アプリケーション管理
      • アプリケーションのコード上で生成・破棄
      • EntityManagerFacutory # createEntityManager() により生成
      • EntityManager # close() で破棄
エンティティマネージャのタイプ トランザクションのタイプ 環境
コンテナ管理 JTA EJBコンテナ
アプリケーション管理 JTA EJBコンテナ, Webコンテナ
アプリケーション リソースローカル EJBコンテナ, Webコンテナ, Java SE

Apacheを非rootユーザで起動する

httpd.confに指定したapacheユーザ(非root)で、Apacheのリスンポートを81番で起動しようとしたところ、以下のエラー。

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:81

1023番以下の特権ポートはrootユーザ以外はリスンさせられないということなので、httpd.confを編集し、リスンポートを7777に変更。
再度起動しようとすると、以下のエラー。

(13)Permissin denied: httpd: could not open error log file //logs/error_log.
Unable to open logs

logs以下のオーナーがrootになっているため、ログファイルが開けず、起動できないようです。
chown -R hoge:hoge logs してリトライすると、無事動かせました。

ARCHIVELOG/NOARCHIVELOG 確認方法

以下のコマンドで、確認できます。

SQL> archive log list

Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 19
Next log sequence to archive 21
Current log sequence 21

または、V$DATABASEビューのLOG_MODE列。

SQL> select LOG_MODE from V$DATABASE

ARCHIVELOG/NOARCHIVELOGの切り替えは、オンラインREDOログが読み込まれているmount状態で、

SQL> alter database archivelog(/noarchivelog);
SQL> archive log start
Statement processed.
SQL> alter database open;

sql*plusの設定を起動時に自動的に読み込ませる

以下ファイルに設定を記録します。
$ORACLE_HOME/sqlplus/admin/glogin.sql

設定例。

set lines 300 pages 5000 timing on

set sqlp "SQL &_user> "

<&_user>には、ログイン中のスキーマ名が表示されます。

set autocommit off

11gR2から、なぜかautocommitがデフォルトでonになっているので、自動コミットオフにしておくのは重要です。

快適なSQL*Plus生活が送れそうですね。

TRUNCATE, DROP, DELETEの違い

DROPは、セグメント(≒表)構造ごとデータを消し去る。
TRUNCATEは、High Water Markをセグメントの頭に移動させることによる、領域(エクステント)の開放がメイン。表構造は残るが、行データ自体は消える。ROLLBACKできない。
内部的には"HWMの移動"以外の何も行っていないので、DBA_SEGMENTS表のBLOCKSもBYTESも変化なし!
DELETEは、ブロック内の行データを削除するだけ。なので、領域は開放されない。ROLLBACKできる。

ログアウトしても、コマンドを実行し続けるnohup

以下の形でうたれたコマンドは、ハングアップを無視する。コンソール上で実行され続けるコマンドを、teratermなどでリモートから起動するときなどに便利です。

nohup コマンド [引数] &

あるコマンドの出力結果を引数として別コマンドを起動するxargs

対象ファイルが複数あるようなコマンドを実行するシェルを書くときなど、forで回す必要がないので便利!

あるコマンド | xargs 別のコマンド

タイトルに"txt"を含む全ファイルから"hogehoge"をグレップする例。

find . -name txt | xargs grep hogehoge