2017年10月29日日曜日

[PowerShell] PowerShellからOracleを利用する方法

概要

PowerShellからODP.NETを利用してOracleデータベースにアクセスする。

PowerShellからODP.NETの利用

PowerShellから指定したパスのOracle.DataAccess.dllを読み込み、New-ObjectコマンドレットでODP.NETのオブジェクトを作成し利用する。

[System.Reflection.Assembly]::LoadFile("ORACLE_BASE\ORACLE_HOME\odp.net\bin\4\Oracle.DataAccess.dll") | Out-Null;

[String]$ConnectionString = "Data Source=hogehoge;User ID=ora_user;Password=ora_pass";

try {
    [Oracle.DataAccess.Client.OracleConnection]$oraConn | Out-Null;
    [Oracle.DataAccess.Client.OracleCommand]$oraCmd | Out-Null;
    [Oracle.DataAccess.Client.OracleDataReader]$oraReader | Out-Null;

    $oraConn = New-Object Oracle.DataAccess.Client.OracleConnection($ConnectionString);
    [void]$oraConn.Open();

    $oraCmd = New-Object Oracle.DataAccess.Client.OracleCommand;

    $oraCmd.Connection = $oraConn;
    $oraCmd.CommandText = "select table_name from user_tables";

    $oraReader = $oraCmd.ExecuteReader();
    while($oraReader.Read()) {
        Write-Host $oraReader["table_name"];
    }
} catch {
    Write-Host "error:$($Error[0])";
} finally {
    [void]$oraReader.Close();
    [void]$oraCmd.Dispose();
    [void]$oraConn.Close();
}

参考

  • なし。

2017年10月8日日曜日

[ansible] become_userでタスクの実行ユーザを変更できない場合の解決方法

概要

原則、rootユーザでタスクを実行する環境で、ある特定のタスクのみ実行ユーザを変更するためにbecome_userを使用したが、実行ユーザが変わらずにrootユーザでタスクが実行された。

事象

main.ymlで指定した'root user in ID'、'test1 user in ID'タスクが共に、rootユーザでidコマンドが実行される。

inventoryファイル

[all:vars]
ansible_become=true
ansible_become_method=sudo
ansible_become_user=root
ansible_become_pass=rootユーザのパスワード
ansible_ssh_user=sshユーザ
ansible_ssh_pass=sshユーザのパスワード

main.yml

- name: root user in ID
  shell: id
- name: test1 user in ID
  become: true
  become_method: sudo
  become_user: test1
  shell: id

原因

ansible_become_userで指定されたユーザをタスクのbecome_userでは上書きできないため。

対処

'ansible_become_user=root'をinventoryファイルから削除する。
ansible_become_userのデフォルト値はrootになるため、become_userが指定されていないタスクはrootユーザで実行される。

inventoryファイル

[all:vars]
ansible_become=true
ansible_become_method=sudo
ansible_become_pass=rootユーザのパスワード
ansible_ssh_user=sshユーザ
ansible_ssh_pass=sshユーザのパスワード

main.yml

- name: root user in ID
  shell: id
- name: test1 user in ID
  become: true
  become_method: sudo
  become_user: test1
  shell: id

参考

  • なし。