【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が(ネットから自動で)インストールされていないか
・JREとJDKのバージョンが違うとか
・違うバージョンの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()
オラクルにつないでデータを取得する
仕事で表題のスクリプトを作成することになったのでその時のメモ。
環境:
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
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本体を削除
→ソフトウェアのアンインストールレジストリを削除
参考 削除および再インストール
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.