2016年10月6日木曜日

[Oracle] SQL*Plusで引数にIN句の条件を渡す方法

SQL*Plusで、引数を以下SQLファイルに渡したい、という要件が
発生したので調査を行いました。

・test.sql
SELECT * FROM table WHERE column IN (/*ここを引数として渡したい*/);
exit;


色々試した結果、以下のような形で実行できることを確認。

・test.sql
SELECT * FROM table WHERE column IN (&1);
exit;

・sqlplus実行
sqlplus user/pass@db @test.sql " 'arg1','arg2','arg3'"


仕様がよくわかりませんが、水色部分に
何らかの文字がないとエラーになるようです。
# 状況によってはスペースを「N」に置き換えても実行可能

こんな微妙なことをする機会は今後なさそうですが、念のため覚書。

2016年9月2日金曜日

[つぶやき] Strengths Finderなるものを実施してみた

Strengths Finderという、自分の5つの強みを調べられるテストを
教えていただいたので試してみました。

結果:

1. Harmony(協調性)
2. Analytical(分析思考)
3. Responsibility(責任感)
4. Consistency(一貫性/公平性)
5. Relator(親密性)


まだ説明はちゃんと読んでないですが、なんとなく合ってる気はしますね。
時間のある時に、説明ちゃんと読もう。。。

2016年7月22日金曜日

[つぶやき] しばらく投稿がないようですが

サボってない。サボってない。

ただ投稿できるようなネタと時間がないだけ (言い訳

2016年4月12日火曜日

[PowerShell] 標準出力時に、文字の色を一部分だけ変える

標準出力を行ったとき、1行中の特定のデータを色付きで表示したい
と思ったので、調べた結果を覚書。


PS> Write-Host "a" -NoNewline; Write-Host "b" -ForegroundColor Red -NoNewline; Write-Host "c";
abc

-ForegroundColorで文字色を、-BackgroundColorで背景色を変更できるようです。

あとは"a"、"b"、"c"を適当な変数に変えるとかすれば目的達成ですかね。
なかなか情報が見つかりませんでしたが、とりあえずこんな感じで。

2016年2月25日木曜日

[Oracle] Oracle12cでRMANバックアップの履歴を確認するSQL

Oracle 12cのEnterprise Managerでは、11gまで確認することができた
RMANバックアップの履歴を確認できない(調査不足なだけ?)ようだったので
確認するSQLを覚書。

SELECT
  COMMAND_ID,
  INPUT_TYPE,
  STATUS,
  TO_CHAR(START_TIME, 'yyyy/mm/dd HH24:MI:SS'),
  TO_CHAR(END_TIME, 'yyyy/mm/dd HH24:MI:SS'),
  TRIM(TIME_TAKEN_BY_DISPLAY),
  TRIM(INPUT_BYTES_DISPLAY),
  TRIM(OUTPUT_BYTES_DISPLAY)
FROM
  V_$RMAN_BACKUP_JOB_DETAILS
WHERE
  START_TIME >= ADD_MONTHS(SYSDATE, -1)
ORDER BY
  START_TIME DESC

11gまでのEnterprise Managerと同じく、直近1か月分を表示するように。

2016年2月18日木曜日

[PowerShell & SQL*Plus] 文字化けの対処法

PowerShellからSQL*Plusを起動、英語環境(AMERICAN_AMERICA.WE8MSWIN1252)の
OracleにアクセスしてDBA_OUTSTANDING_ALERTSを確認したとき、
メッセージが文字化けする問題を解決したので覚書。

■対応1
PS> SET NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
PS> sqlplus sys/PASS@SID as sysdba

SQL> SELECT REASON FROM DBA_OUTSTANDING_ALERTS;
⇒文字化け


■対応2
PS> chcp 65001
PS> SET NLS_LANG=AMERICAN_AMERICA.AL32UTF8
PS> sqlplus sys/PASS@SID as sysdba

SQL> SELECT REASON FROM DBA_OUTSTANDING_ALERTS;
⇒文字化け

■対応3
PS> SET NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
PS> sqlplus sys/PASS@SID as sysdba

SQL> ALTER SESSION SET NLS_LANGUAGE=AMERICAN;
SQL> ALTER SESSION SET NLS_TERRITORY=AMERICA;
SQL> SELECT REASON FROM DBA_OUTSTANDING_ALERTS;
⇒文字化けしない!


DOSからの場合はNLS_LANGの変更だけで文字化け発生しなかったんですが。。
とりあえず解決できてよかった。

2016年1月14日木曜日

[Oracle] DBリンクでハマる。。

DBリンクの作成⇒接続確認で、「ORA-01017」にハマるという
何とも恥ずかしい状況を覚書。

■最初に実行したCREATE文
CREATE DATABASE LINK HOGE
CONNECT TO "user" IDENTIFIED BY "password"
USING '接続文字列'

sqlplus user/password@接続文字列 は接続できるのに、
SELECT SYSDATE FROM DUAL@HOGE はエラーになる。。

■いろいろ試行錯誤した結果
CREATE DATABASE LINK HOGE
CONNECT TO user IDENTIFIED BY "password"
USING '接続文字列'


・・・

うん、別にユーザーは小文字で作ってなかったよね。

でも、
 sqlplus user/password@接続文字列
 sqlplus USER/password@接続文字列
のどちらでも接続できるのは、罠のような気がする。。

2015年12月28日月曜日

[Oracle] OEMが停止/起動できない

Oracle Enterprise Managerの停止、起動ができなくなる現象が発生。
調べてみると色々な環境要因があるみたいですが、今回の状況は以下の通り。

・Oracle 11.2.0.4.0 @ Windows
・OEMは普通に参照できる
・OracleDBConsoleSIDは停止している
・net stop、emctl stop dbconsole ともにエラー(詳細忘れた。。)
・net start、emctl start dbconsole もエラー(詳細忘れた。。)

対応は単純で、OEM由来のjava.exeとemagent.exeを特定して
プロセスを終了、emctl start dbconsoleするというもの。


プロセスが残っているとサービスを制御できなくなるみたいですね。
忘れないうちに覚書。

2015年12月3日木曜日

[Windows] Windows Server 2012でイベントID:6038が発生する

Windows Server 2012の環境でイベントID:6038の警告が発生するようになりました。

=====
Microsoft Windows Server とクライアントの間で、現在 NTLM 認証が使用されていることが検出されました。このイベントは、クライアントの起動時に初めて NTLM を使用してこのサーバーに認証するときに 1 回発生します。

NTLM は、他の認証機構と比べてそれほど強力ではありません。次の点を確認してください:

      NTLM 認証を使用しているアプリケーションはどれか
      Kerberos 認証などの強力な認証を使用できない構成上の問題があるかどうか
      NTLM をサポートする必要がある場合、拡張保護が構成されているかどうか

これらを確認する方法の詳細については、http://go.microsoft.com/fwlink/?LinkId=225699 を参照してください。
=====

うーん、調べても参考になるような情報が見つからない。。
情報を見つけたら追記することにします。

2015年10月14日水曜日

[Oracle] 11gから12cにアップグレードしてみた

関連アプリがサポート対象外になるとの連絡があったので
Oracle 11g → 12c へのアップグレードを試してみました。

■前提
 ・OS
  SuSE Linux Enterprise Server SP3 (x86_64) @VMWare

 ・旧Oracle
  Oracle Database 11.2.0.4.0 Standard Edition
  ※DBUAによる直接のアップグレードは11.2.0.2.0以降

 ・新Oracle
  Oracle Database 12.1.0.2.0 Standard Edition

■手順
 (0) 最初に11g止めて、netcaでリスナー消しておくとスムーズ
 (1) 12cをソフトウェアインストール
 (2) 12cのORACLE_HOME/bin/dbuaを実行
 (3) .bash_profile のPATH等を12cのパスに書き換え


さして詰まることなくアップグレードできましたが
いざ本番環境でやると色々問題が出るんだろうなぁ・・・
なんかライセンス体系も変わってるらしいし。

2016.02.23 追記
やっぱり本番環境でハマった...
tnsnames.oraのパーミッションが原因でORA-12154ががが。

素直にファイル単位でパーミッションごとコピペすればよかったo...rz

2015年9月28日月曜日

[Windows] Windows 10 の「クイックアクセス」が気に入らない。。

至極個人的な意見ですが、Windows10の「クイックアクセス」は
いらない機能だなぁ、と思います。
# Win + E で開いたらドライブ一覧が表示されてほしい。

ということで、Win7と(ほぼ)同様の表示にする方法を覚書。


1. フォルダオプションを表示
2. 下図、赤枠内の通りに設定






















↓こんな感じに表示されます。




















手順というほど大したものではありませんが。。

2015年8月26日水曜日

[C# / PowerShell] C#からPowerShellを実行する方法

PowerShellを動的かつ並列実行したかったので、C#で書いてみました。

  private List<string> executePowerShell()
  {
    // PowerShellスクリプト
    string script = @"
      # C#からの引数の受け取り
      $count = 0
      foreach($arg in $input)
      {
        switch ($count)
        {
          0 { $foo = $arg }
          1 { $bar = $arg }
        }
        $count++
      }

      # 何らかの処理

      # C#に返したい変数
      $foo
      $bar
    ";

    List<string> fromPowerShell = new List<string>();

    using (var invoker = new RunspaceInvoke())
    {
      // PowerShellの実行、第二引数がPowerShellに渡す引数
      var psResult = invoker.Invoke(script, new[] { 0, 1 })

      // PowerShellから変数の値を受け取る($foo, $bar)
      foreach (PSObject result in psResult)
      {
        if (result != null) { fromPowerShell.Add(result.ToString()); }
      }
    }

    return fromPowerShell;
  }

こんな感じのメソッドを用意して、 script を動的生成 & Parallel.Forでクルクル回す、と。
例外処理は記載してませんが。。

2015年8月13日木曜日

[Oracle] 正規表現で数値形式以外を取得するSQL

ずいぶん久方ぶりな書込みとなります。。

Oracleの文字列フィールドに数値形式以外のデータがあったら
見たい、という要望があったので正規表現での検索を覚書。

SELECT * FROM table_name
WHERE NOT REGEXP_LIKE(column_name, '^[-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][-+]?[0-9]+)?$')


REGEXP_XXXはOracle10g以降でしたかね。

2015年7月16日木曜日

[Oracle] StatsPackのレポート作成を自動化したい

StatsPackを導入、スナップショットを自動取得している環境で
各スナップショット間のレポートファイルを作成する、という要件がありました。

sqlplus user/password[@connection] @${ORACLE_HOME}/rdbms/admin/spreport.sql

こんな感じで実行すれば作成できるのですが、途中でスナップショットの
IDを聞かれたりするので応答ファイルを作成、読み込ませる方法を覚書。

sqlplus user/password[@connection] @${ORACLE_HOME}/rdbms/admin/spreport.sql < response.txt

response.txtには、以下の内容を記載。
 スナップショットID1
 スナップショットID2
 レポートファイルの出力先
 exit

後は、response.txtを動的に作成、くるくる回すプログラムを書けば自動化できるかな。

2015年6月18日木曜日

[つぶやき] 自宅PCでTVが見られなくなった

自宅PCの中を少し整理していたら、TVを見られるようにしていたはずが
コンポーネント不足的なメッセージが出てくるようになってしまったo...rz

何かアンインストールしてはいけないものを消してしまったか。

# ちょっとサボり気味、というかネタ不足
# もう少ししたら色々書込みできるようになる・・・はず?


2015年6月2日火曜日

[つぶやき] Windows10 配布間近

ふと、アクセス解析のページを見てみたらWindows 10 関連で
検索、当ブログにたどり着いている方がいらっしゃるようですね。


今のところ多いのは、Windows 10 における
.NET Framework3.5のインストール方法でしょうか。


同じ問題にあたるのが自分だけでなくてよかった(安心)

[Windows] Windows10の無償アップグレード 7/29より配信

ニュースサイトにてWindows 10の無償アップグレードが
7/29より開始される、との記事を参照したので覚書。


■マイナビニュース
http://news.mynavi.jp/news/2015/06/02/110/


そういえば、自宅PCのタスクトレイにあのアイコンが出てた気がするな。。
昨日は眠くて放置していたので、帰ったらチェックしよう。

2015年5月7日木曜日

[Windows] Windows10 Insider Preview Build 10074 をインストールしてみた

Windows10 Technical Preview Build 10074 のISOが配布されていると聞いて
さっそくダウンロード、仮想環境に入れてみました。


画面はスタートメニューと噂のSpartan改めEdgeです。

ストア経由での更新ができなかったのでEdgeを試用できていませんでした。
さっそくいじってみることに。

Webノート。 意外と書きやすいかも。

















開発者ツール。 ウィンドウが独立しましたね。ピン止めできない。

















設定画面。 インターネットオプションが呼べない・・・?


使用感は・・・
体感レベルですが、IEより起動速度、描画は速くなってるかな。

時間のある時にもう少しいじってみよう。

2015年4月21日火曜日

[Oracle] 11.2.0.4.0に対してDBLINKを使用してアクセスするとORA-00600が出ることがある

新サーバにOracle Database 11.2.0.4.0を導入し、運用していたところ
外部からのDBLINKアクセス時間帯にORA-00600エラーが発生。

ORA-00600: 内部エラー・コード, 引数: [12224], [], [], [], [], [], [], [], [], [], [], []

外部Oracle側でもORA-00600を含め、ORAエラーが多発していたそうです。
# 管理下にないため詳細は確認できず。。

11.2.0.4.0側にパッチを適用すれば解消されるらしいので
適用してしばらく様子見ということで。


ついでにopatchを初めて使ったので、適用手順をざっくり覚書。

1. DB接続しているアプリ、Oracle関連サービスを停止
2. sh $ORACLE_HOME/OPatch/opatch lsinventory で適用状況確認
3. sh $ORACLE_HOME/OPatch/opatch apply [パッチ展開先Path] で適用
4. Oracle関連サービス、DB接続アプリを起動

Windowsなら、手順2,3はbatファイルになるのかな。
時間があるときに試してみよう。

# 2015/5/25追記
Windows向けのパッチはまだ提供されていない模様。。

2015年4月9日木曜日

[Linux] bashでのインクリメントの記述

bashでインクリメントを行うにはどうすればいいかを調べていたところ、
二重括弧を使ったほうが速いとの記述があったので覚書。


#!/bin/bash

COUNTER=0

while [ $COUNTER -lt 100 ]
do
  echo $COUNTER
  # COUNTER=`expr $COUNTER + 1` # 汎用性が高い
  COUNTER=$(( COUNTER + 1 ))    # 速いがOS依存
done


毎回インクリメントしたいときに調べて、という感じになってるので
いい加減に覚えてしまいたい。