★応援クリック
↓励みになります
にほんブログ村 株ブログ サラリーマン投資家へ 「【株】漫画」記事へ
CATEGORIES
ARCHIVES
LIBRARY
[株の本を探す]
RECOMMEND
情報処理教科書 プロジェクトマネージャ 2017年版
情報処理教科書 プロジェクトマネージャ 2017年版 (JUGEMレビュー »)
ITのプロ46,三好 康之
参考書はこれ一冊で一発合格可能。
詳しくは【ビジネス・資格】記事で。
RECOMMEND
投資で一番大切な20の教え―賢い投資家になるための隠れた常識
投資で一番大切な20の教え―賢い投資家になるための隠れた常識 (JUGEMレビュー »)
ハワード・マークス
易しすぎず、難しすぎず。
読み物でもなく、学術書でもなく。一番ためになる株の教科書かもしれない。
RECOMMEND
ウォール街のランダム・ウォーカー <原著第10版>―株式投資の不滅の真理
ウォール街のランダム・ウォーカー <原著第10版>―株式投資の不滅の真理 (JUGEMレビュー »)
バートン・マルキール
ファンダメンタルかテクニカルか?バリューかグロースか?そんな悩みを一気に解消。ただちょっと厚め。
RECOMMEND
敗者のゲーム〈原著第6版〉
敗者のゲーム〈原著第6版〉 (JUGEMレビュー »)
チャールズ・エリス
「ウォール街のランダム・ウォーカー」以上に、インデックス投資を選択する動機になった本。
RECOMMEND
仕事と幸福、そして人生について
仕事と幸福、そして人生について (JUGEMレビュー »)
ジョシュア・ハルバースタム
サラリーマンなら、株の本より前に読む価値のある一冊。
RECOMMEND
決算書がスラスラわかる 財務3表一体理解法 (朝日新書 44)
決算書がスラスラわかる 財務3表一体理解法 (朝日新書 44) (JUGEMレビュー »)
國貞 克則
ビジネスにも株式投資にも使え、
資格試験の参考書にもなる良書。
RECOMMEND
なぜか日本人が知らなかった新しい株の本
なぜか日本人が知らなかった新しい株の本 (JUGEMレビュー »)
山口 揚平
分厚い洋書を読むのがしんどいなら、まずこれから。
RECOMMEND
ピーター・リンチの株で勝つ―アマの知恵でプロを出し抜け
ピーター・リンチの株で勝つ―アマの知恵でプロを出し抜け (JUGEMレビュー »)
ピーター リンチ,ジョン ロスチャイルド
勝ち組?の思考と嗜好がわかり、読み物としても面白い。
RECOMMEND
フィッシャーの「超」成長株投資―普通株で普通でない利益を得るために
フィッシャーの「超」成長株投資―普通株で普通でない利益を得るために (JUGEMレビュー »)
フィリップ・A. フィッシャー,荒井 拓也
訳者の訳は十分成功していたのに、監修者が余計な編集を加えたのが裏目に。内容はある。
RECOMMEND
へうげもの(1) (モーニングKC (1487))
へうげもの(1) (モーニングKC (1487)) (JUGEMレビュー »)
山田 芳裕
古田織部を主人公にセレクトしたところがミソ。斬新な歴史解釈と人間観察力で、戦国ファンとサラリーマンの共感を鷲掴めるクオリティに仕上がっている。
RECOMMEND
まぐれ―投資家はなぜ、運を実力と勘違いするのか
まぐれ―投資家はなぜ、運を実力と勘違いするのか (JUGEMレビュー »)
ナシーム・ニコラス・タレブ
統計情報が出てこない分、読み物として「ウォール街のランダム・ウォーカー」より読み易い。
RECOMMEND
 (JUGEMレビュー »)

ユーティリティ・ツールの活用法だけでなく、バックアップ・リカバリやチューニングの手順などが、実務担当者の視点に立って具体的にまとめられており、ベストの名に偽りなし!DBA必携の一冊であると思う。
【Oracle】Datapumpのパフォーマンス改善
ダ・パンプだかデータ・ポンプだか正式名称は知らないが、
パフォーマンスが悪い。
今週の日本株並と言っても言い過ぎではあるまい。

exp/impユーティリティのパフォーマンス強化版らしいが、
結構不具合が多い印象がある。

Datapumpでインポート中のテーブルをselect してみるといい。
インポートもselectの検索も猛烈に性能劣化する。

排他制御が出来てないのがいけないと言われそうだが、
SQL*Loaderだったらそんなことはない。

さて、脱線してきたので話を戻そう。

データ量が大して増えたわけでもないのに、
Datapumpのパフォーマンスが落ちた、
遅くなった、重くなった、スローダウンした、
性能劣化した、よくあることだ。

ただ、ググっても誰も端的に答えてくれなかった。
インスタンスを再起動すると、
少し良くなるので凌いでいたのだが、
効き目が薄くなってきて本気で調べた。

結論としてはSGAの中のStreamsPoolという
メモリ領域の割り当てが小さすぎるのだ。

表領域に余裕があるからといって、
一つのインスタンスに複数スキーマ作ったりしてると、
そういうことになる。

領域不足のエラーが出るんで、
表領域の容量は見積もったけど、
初期化パラメータなんていい感じに
自動調整してくれると思ってた。

なんとデフォルトはゼロ。
show parameters streams_pool_size
で確認してみよう。

ゼロだとどうなるのか?
共有プール(SharedPool)の10%が割り当てられるらしい。

show parameters shared_pool_size
で調べてみよう。
自分の環境はこれもゼロ。
SGAの一部がいい感じで?割り当てられるらしい。

結論から言おう。
システムというのは所詮人間が作ったものだ。
ITストラテジストの自分が言うんだから間違いない。
パラメータ指定出来る時点で、
いい感じで調整出来ないってことだろう。

明示的に指定しよう。

alter system set streams_pool_size=10M;

SGAが2GBらしいから10MBくらい全然問題ない。
・・・
こうかはばつぐんだ!
(テスト環境は10分の1、
本番環境も3分の1に時短した)

責任は一切持てないが、
困ってる人は是非試して欲しいと思う。

自分は世界の痒みを少しでも癒したい。

ただ、参考までの備忘記録として、以下3点挙げておく。

1. alter文はすぐに返ってこない。
 割り当て容量にもよるのだろうが、
 10MBなら5〜10分は覚悟しよう。
2. alter文の結果が返ってきた後、
 show parameters で確認しても直ぐには反映されない
(どのタイミングで反映されるかは不明)
3. 10Mと指定したのに16Mになっている。
 BlockSizeみたく8MB刻みかなんかだろう。

考えてる暇があったらググるのがいい。

この記事で救われる人が居ることを願っている。

| IT (ツール&Oracle) | 20:48 | comments(0) | trackbacks(0) |
【Oracle】インスタンス指定SYSDBA接続
TeraTermからLinuxのDBサーバに接続し、
SQL*Plus を起動してOracle インスタンスに接続。

$ sqlplus /nolog
SQL> conn スキーマ名/パスワード@インスタンス名

何度となくやってきた動作である。

$ sqlplus スキーマ名/パスワード@インスタンス名

でもいいが、パスワードがLinux の履歴(historyコマンド)で
簡単に漏洩するのはいただけない。

ただ、OS認証なら気にすることはない。
Linuxにログイン出来た時点で、
Oracle へのログインも認められるから、

$ sqlplus / as sysdba

でいい。
SQL*Plus を起動した後でも同じで、
インスタンス指定は出来ないからだ。

$ sqlplus /nolog
SQL> conn / as sysdba

と、OS認証はデータベース上、
init.oraあたりの設定ファイルで指定した
特定のインスタンスでしか出来ないと思っていた。

それで仕方なく、インスタンス毎にSYSスキーマのパスワードを覚えて

SQL> conn sys/change_on_install@インスタンス名

とかやっていたわけだ。

でも、今日ふと、
ググれば何でも出来る気がして調べたら、
普通にインスタンスを指定出来ることが判った。

$ ORACLE_SID=インスタンス名 sqlplus "/ as sysdba"

テスト環境では1つのデータベースに
複数インスタンスなんてザラなので、
これが普通に出来ないと不便で仕方ない。

出来ないと思い込んでるだけで、
ググるだけで出来るようになることはかなり多いと思う。

自分が痒かった経験はブログ記事にする。
例え何処かに同じことが書かれていようと、
認知率が低そうなら記事にすべきだ。

同じ痒みを持っている人が、ググることで
痒みから解放される可能性が増すからだ。

世界から痒みを除いたという錯覚は、
いい仕事をしたときに似た気持ち良さがある。

| IT (ツール&Oracle) | 21:22 | comments(0) | trackbacks(0) |
【Oracle】EXISTS句によるDELETE文の弱点改善SQL

あまり需要はないかもしれないが、
苦し紛れに編み出した技を書いておく。
ググっても、出てこなかったソリューションになるので、
救われる人がいたら嬉しい。

【EXISTS句を使ったDELETE文の注意点】

まず、レイアウトが同じテーブル、
TBL_A と TBL_B があったとする。

TBL_A が TBL_B の内容を包含しているとき、

DELETE FROM TBL_A
WHERE EXISTS
(SELECT * FROM TBL_B);

COMMIT;

の後の状態は、

SELECT * FROM TBL_A
MINUS
SELECT * FROM TBL_B;

で返る結果と同じになるかと思っていた。

が、上記は同じにならないときがある

内容が同一の、重複レコードが含まれる場合である。
WHERE EXISTS句 は、WHERE IN句 のように、
条件が一致するデータ値を、全て消してしまうのだ。

EXISTS句を使ったDELETE文では、
「重複レコードを排除して、1行だけ残したい」といった、
割とよくあるニーズを実現することはできない。


【ケーススタディ】

TBL_A から、特定のデータのみ削除するニーズが生じた。
このとき、特定のデータを抽出する条件は、ものすごく複雑だとする。

万一に備え、消したデータだけを、すばやく戻せるようにするため、

CREATE TABLE TBL_B AS 
SELECT * FROM TBL_A
WHERE 超複雑な抽出条件;


と、削除対象データを、TBL_B として退避することにした。

こうしておけば、

INSERT INTO TBL_A
SELECT * FROM TBL_B;
COMMIT;


で、すぐに戻せる。

(DataPumpを使う手もあるが、
同一テーブルに対する、impdp と SELECT が競合すると、
双方ともにパフォーマンスが落ち、
パフォーマンスが落ちているところに、更なる SELECT と、
競合度合いが増していき、ついに、
全く応答が返らなくなるということを経験したので、
DataPumpは使わない。)


データの抽出条件が複雑すぎたせいだと思うが、
TBL_Bの作成に、9時間もかかってしまったとする。 次に、

DELETE FROM TBL_A
WHERE 超複雑な条件;


と、やるつもりだったが、そんなことをしたら、
終電で帰れなくなってしまうし、
中途半端な状態で放置したら、
翌日、いろんな迷惑がかかるおそれもある。

すばやく、効率的に消す方法として、

DELETE FROM TBL_A
WHERE EXISTS
(SELECT * FROM TBL_B);


を思いついたが、
前述のとおり、結果は意図したとおりにはならない。



【ソリューション】

―侏莨紊りの状態を、TBL_C として作成する
 ( A − B = C )。

CREATE TABLE TBL_C AS
(SELECT * FROM TBL_A
MINUS
SELECT * FROM TBL_B);


TBL_A を 空(カラ)にする

TRUNCATE TABLE TBL_A;


TBL_C のデータを、カラのTBL_A に挿入して出来上がり。

INSERT INTO TBL_A
SELECT * FROM TBL_C;

COMMIT;


TBL_B が作成済ということが条件になるが、
この手順だと、1分もかからずに、意図した状態にできた。

表領域に余裕があるなら、間違いない手かと思う。

| IT (ツール&Oracle) | 02:15 | comments(0) | trackbacks(0) |
Facebook始める

Twitter同様、結構カンタンに始めることができた。

なんだ? このシチュエーション

登録までは自力でできたものの、
その後どうすればよくわからないでいたが、
以下の入門動画の【第三章】、
交流のところを観たら、なんとなく前進した。

 「フェイスブックの使い方

Twitterとの連携、ブログとの連携、
今後の拡張性に期待する部分が強いが、
この動画の【第一章】をみるかぎり、
まだあまり普及していない今のうちにインフラを整備しておけば、
それなりにメリットがあるように思う。

| IT (ツール&Oracle) | 17:12 | comments(0) | trackbacks(0) |
【Oracle】SQL*Plusでタブ区切りのCSVを出す方法
ここのところ、株式投資(株闘)のことしか書いてませんが、
アクセスログをみると、"oracle タブ区切り"で
このブログを検索している方が多かったので、
昔、自分が痒かったところと、その解決方法を書きます。 

Oracle(DB)のデータを、メールで送ったりするとき、
SQL*Plusのスプール機能で、
カンマ区切りのCSVファイルに出力すると、
Excelで開いたとき、列(カラム)が区切られて便利です。

SQL> set linesize 999
SQL> set pagesize 9999
SQL> set colsep ','
SQL> spool C:¥temp¥fhiyoshi.csv

SQL> select COL_1,COL_2,COL_3 from TBL_0;
SQL> spool off

ただ、Oracle と Microsoft は敵対関係にあるので?
普通にやると、下記のような補正ニーズが生まれてきます。


1.タブ区切りにしたい

2.可変長レコードにしたい
 (列間・行末のスペースを削りたい)

3.見出し行をキレイに出したい
 (見出し行とセットで出る、----------------- を無くしたい)


以下、"⇒" の後が、解決方法(ソリューション)です。

1.タブ区切りにしたい

⇒クォート(')とクォート(')の間で、タブ(Tabキー)を入力する。

SQL> set colsep ''

Windowsではこれでイケたのですが、
Linuxでやったら出来ませんでした。
力技ですが、2.△諒法をお試し下さい。
※Windows と Linuxでは文字コードが異なるため、
 タブの入力は、必ずviエディタ等、Linux上で行ってください。


2.可変長レコードにしたい

⇒々塰のスペースをトリミング(削除)する。

SQL> set trimspool on

⇒select句のカラムの間を、カンマ(')ではなく、
   2つのパイプ(||) にして、連結させ、
   更にその間に区切り文字を入れる(||''||) 。

SQL> select COL_1 ||''|| COL_2 ||''|| COL_3 from TBL_0;

クォートとクォートの間で、タブを入力すれば、タブ区切り。
オーソドックスに、カンマ区切りなら、||','|| のようにします。


3.見出し行をキレイに出したい


これも力技ですが、SQL*Plusからの自動出力をやめ、
見出し行だけ、コメントとして別に出すようにします。

⇒ー動出力をやめる。

SQL> set head off

⇒見出し行をコメント出力した後、selectする。

SQL> prompt COL_1,COL_2,COL_3
SQL> select COL_1 ||','|| COL_2 ||','|| COL_3 from TBL_0;


以上、仕事にも株式投資にも共通する、成功の秘訣は、
シンプルに考え、ロジカルに行動し、
経験を次に活かせるカタチで蓄積することかと思います。

それでも躓くことがあるわけですが、Oracleについていえば、

。隠以くらいあがいてみる(マニュアルみたり、ググったり)
知ってそうな人に聞く
サポートに問い合わせる

これで大体解決するはずです。

尚、このブログでは質問は受け付けませんので悪しからず
| IT (ツール&Oracle) | 00:01 | comments(0) | trackbacks(0) |
| 1/5PAGES | >>