Log.log(work)

いろんな作業メモ

【Oracle】ダンプのインポート

ダンプのインポートコマンドにセミコロンをつけてしまったのだが、
要らないので入れてはいけない。

ちなみにセミコロンを入れるとセミコロン付きのスキーマにインポートされてしまう。

IMPDP user/pass@xe DIRECTORY=DATA_PUMP_DIR DUMPFILE=DMP.dmp LOG=imp.log remap_schema=before:after;

⇒”after;”というスキーマにインポートされる

IMPDP user/pass@xe DIRECTORY=DATA_PUMP_DIR DUMPFILE=DMP.dmp LOG=imp.log remap_schema=before:after

⇒OKな例。”after”というスキーマにインポートされる

Eclipseの機嫌が悪い

Eclipseを起動したら

java was started by returned exit code=1
というエラーが出て、立ち上がらなくなってしまった。

※ちなみに開発環境の関係上、やむなく32bitのHeliosを使っている…

ググってみたら
Javaが(ネットから自動で)インストールされていないか
JREJDKバージョンが違うとか
・違うバージョンのJDKが入っていないか
・Path、JAVA_HOMEなどの環境変数が間違っている

などなど出てきたが、どれも当てはまらない。

先週までは元気に動いていたのに…。何故…。

と、うちの先輩社員に相談したところ、
色々調べて下さってどうにか動くようになった。
原因は分からんが、eclipse.iniの下記の記述を削ったらできた。

-vmargs
-Dosgi.requiredJavaVersion=1.5

しかし起動できたはいいが、Pleiadesが入っているのにすべて英語になっている。
もしかしたらPleiades内部の別のファイルを見ているのかもしれないが、とりあえず良しとするか…

 PythonからOracleに接続し、データを登録&更新する

昨日の続き。

INSERTは複数行の登録が一度にできるけど、UPDATEは複数回execute呼ばないといけないらしい。

# Insert default rows
rows = [(1, 'Bob', 35, 'I like dogs'), (2, 'Kim', 27, 'I like birds')]
cur.bindarraysize = 2
cur.setinputsizes(int, 20, int, 100)
cur.executemany("insert into cx_people(id, name, age, notes) values (:1, :2, :3, :4)", rows)
con.commit()


#Update
cur = con.cursor()
statement = 'update cx_pets set owner = :1 where owner = :2 and type = :3'
cur.execute(statement, (2, 1, 'dog'))
con.commit()

Update (crUd) using cx_Oracle | Learn Code Share

オラクルにつないでデータを取得する

仕事で表題のスクリプトを作成することになったのでその時のメモ。

環境:
Windows8.1 (64bit) /
Anaconda (Python 3.6.4) / Oracle 11g

Oracleに接続

cx_Oracleを使うと良いらしい。ということでOracle Clientも併せてインストール

※Anadondaのpipが古い場合はバージョンアップしておく

cx_Oracleのインストール

python -m pip install cx_Oracle --upgrade

参考:
GitHub - oracle/python-cx_Oracle: Python interface to Oracle Database conforming to the Python DB API 2.0 specification.

Oracle Instanct Clientのインストール

Instant Client for Microsoft Windows (x64) 64-bit

Pythonから接続

import cx_Oracle
conn = cx_Oracle.connect(user='user', password='pass', dsn='localhost:port/xe')
cur = conn.cursor()

UnicodeDecodeError

接続先のOracle11gはshift-jis(JA16SJISTILDE)なのでPythonで扱えない文字が入っているとエラーになる。
解決方法が見つからない…

追記

UnicodeDecodeErrorはおまじないを唱えておけば大丈夫そう。

# -*- coding:utf-8 -*-

import cx_Oracle
import os

os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE" #おまじない

oracle10gアンインストール[Windows版]

開発機に入れたOracle10g。 実は11gでした、ということでアンインストールして入れ直ししたときのメモ。

Oracle10gのアンインストール

  • データベースの削除
    ふつうDBCAが入っているのでそれを使って削除します。
    今回は文字コードの変更の関係でコマンドでデータベースを作成していたので、
    コマンドで削除します(やり方が正しいかどうかは不明)

    まず、排他モードでマウントする必要があるため、サービスを停止する。

    set ORACLE_SID=XE
    sqlplus / as sysdba
    startup mount exclusive restrict;

    一応確認

    select * from v$instance;

    削除
    drop database;

  • データべースを削除したらOracle本体を削除
    →ソフトウェアのアンインストール

  • レジストリを削除
    参考 削除および再インストール

x*0.8の値を0.5単位で算出したい(Excel)

単体テストの工数から結合テストの工数を算出したいけど、
0.5ずつにしたいと思ったのでエクセルで探した時のメモ。

=IF(ISNUMBER(A1),CEILING(A1*0.8,0.5),A1)

一応文字かどうか判別し、数値の場合に係数0.8を掛けてみた。
CEILINGを使うと指定の値の倍数になるようにして切り上げてくれるということでうまくいきました。

RubyでSQLServerへつなぎたい2

前回失敗したRDBIじゃなくてtiny_tdsで行けるらしいので試してみた。

環境:Windows8.1 (64bit)
Ruby:2.4.4p296
Bundler:1.16.2
DB:SQL Server 2017

①接続準備

ruby

require 'tiny_tds'
require 'bundler/setup'

と書くとつながるらしいので、これが動くように必要なものをインストール&準備する。

gem install tiny_tds
gem install bundler
bundle init
bundle install --path vendor/bundle

SQLServerのポートの確認
デフォルトで動的になっているので1433固定にしておく。

◆スタート 
→ Microsoft SQL Server 2017
→ 構成ツール
→ SQL Server 構成マネージャー

sql Server Configuration Managerを開いたら、左のメニューの「SQL Server ネットワークの構成」を開き、
[インスタンス名] のプロトコルをクリック。
TCP/IP」をクリックして「IPアドレス」タブを選択し、一番下のIPALLを設定しておく。

③いざ接続

require 'tiny_tds'
require 'bundler/setup'

client = TinyTds::Client.new host: '[my_hostname]', port: 1433, database: '[db]', azure: false

results = client.execute 'SELECT * FROM my_table'

results.each do |row|
  puts row['columname']
end

で出力されたのでOK.