Linuxシェルでの大量データ投入スクリプト
パフォーマンステスト用の大量(数千万件単位)のデータを
DBに投入したいと思っています。
これをLinuxシェルで作成しようと思っています。
今まではsqlplus(あ、DBはoracleです)でログインしてから
複数のSQL文をベタベタ列挙したテキストファイルを読み込んで実行したり
シェルの中で1回ずつコネクションを作成して処理を行なう
というどちらかの方法しか行なったことがありませんでした。
あと、PLSQLで行なう方法もやったことはありますが、今回は
勉強の意味で、Linuxシェルのみを使用して行ないたいと思っています。
今回は、以下の条件・方針で行ないたいと思っています。とりあえず。
・すべてのSQL文を記述するのではなく、レコードごとに変化する
IDの部分だけをシェルで埋め込む方法にしたい
・コネクションは何度も接続しなおすのではなく、まとめて1回で行ないたい
・ある程度の件数ごと(実質的には500件くらい)にコミットを行ないたい
・とりあえずLinuxシェルでやってみたい
・とりあえずストアドなしでやりたい
途中まで以下のソースを作成しました。
あとはechoの部分を書き換える感じなのですが、
コネクション管理の方法がわからずつまづいています。
まずは、Linuxシェル内でのコネクション管理をすることが出来るのかどうかを
教えてください。もしできるのであればその方法等を教えてください。
出来れば具体的な記述を下記シェルに埋め込む形での解説をお願いしたいです。
よろしくお願いします。
#!/bin/sh
declare -i I=10
echo 【DBコネクション取得】
until [ ${I} -eq 0 ]
do
echo 【ID部分を埋め込んでINSERT文作成】
echo 【INSERT文実行】
if [ `expr ${I} % 3` -eq 0 ]; then
echo 【commit文】
fi
I=${I}-1
done
echo 【commit文】
echo 【DBコネクション切断】
No.1ベストアンサー
- 回答日時:
SQL*Plus で実行するコマンドを標準出力するようにしたものを
パイプを通じて sqlplus に渡せば可能です。
最後に sqlplus の exit コマンドを実行することで
sqlplus から切断されます。
#!/bin/sh
(
I=10
until [ ${I} -eq 0 ]
do
echo 【ID部分を埋め込んでINSERT文作成】
echo 【INSERT文実行】
if [ `expr ${I} % 3` -eq 0 ]; then
echo 【commit文】
fi
I=${I}-1
done
echo 【commit文】
echo exit
) | sqlplus scott/tiger
この回答への補足
このような方法を教えていただいたということは
Javaなどのようにコネクションを取得して
それを扱うということは出来ないのですかね。
>SQL*Plus で実行するコマンドを標準出力するようにしたものを
>パイプを通じて sqlplus に渡せば可能です。
なるほど!
発想の転換みたいな感じですね。
もしかしたら普通のことなのかもしれませんが、
自分の頭になかった考えなので、「なるほど」と思いました。
ものすごく大量のSQL文を送信することになるので
その点は気になりますが、やりたいことは達成できそうです。
大変参考になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Linuxのシェル関数を作成して要件を満たす方法 1 2022/11/19 20:33
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- PHP PHP MySql ページング 2 2022/09/20 06:38
- レディース ロレックスのレディデイトジャストが欲しいです。 ロレックスへたくさん通っていますが 一回も出会えませ 1 2023/07/08 22:15
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- UNIX・Linux Thunderbirdで既読にしても、シェルにログインするとYou have mail.と表示される 3 2022/09/10 08:40
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- SQL Server SQL 期間内の実施数を合計したい 2 2023/03/03 22:28
- その他(パソコン・スマホ・電化製品) LINUXPCに詳しい人に気楽に答えてほしい質問です。 2 2022/10/25 08:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シェルスクリプトに関する問題...
-
Cシェルでのファイルからの入...
-
export と set は違うの?
-
(PC初心者)シェルスクリプト...
-
JAVA_HOMEを設定したい
-
↑で前のコマンドを出したい
-
xtermのファイルの消し方について
-
Thunderbirdで既読にしても、シ...
-
telnetの制限
-
FreeBSDのログインシェルshの$H...
-
シェルとシェルの間で環境変数...
-
SONYの音楽ソフト「x-アプリ」...
-
iqoo neo 9と言うスマホがある...
-
windows10のごみ箱をrd /s /q C...
-
TOPコマンドで表示するCPU使用...
-
Dirコマンドでフォルダ内ファイ...
-
マウントしたUSBメモリに書き込...
-
自動パスワード入力でscpするス...
-
Linux環境 grepで改行コード(CR...
-
スクリプトのエラー「unexpecte...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Cシェル内でBシェルの様な関数...
-
export と set は違うの?
-
ターミナルが全く入力できない
-
ubuntuの端末の左にカレントデ...
-
シェルスクリプトで #!/bin/sh ...
-
.cshrc ファイルについて
-
バックスラッシュの意味がわか...
-
シェル 会話形式でエンターキ...
-
『存在するかどうか分からない...
-
シェルスクリプトに関する問題...
-
lsコマンド部分一致方法
-
シェルスクリプトのbashとperl...
-
シェル(ksh)で変数にある文字列...
-
mac os x10.6.4のターミナルでp...
-
Linuxのファイル禁止文字
-
Solarisでデフォルト環境変数の...
-
ps -aのセッションリーダとは
-
csh (tcsh)での環境変数の長さ...
-
Cシェルでのファイルからの入...
-
tcshなのにスクリプト構文中のs...
おすすめ情報