• 締切済み

SQL-Loaderが動かないです。

みなさんこんにちは 作成されたデータをSQL-Loaderにてオラクルデータベースに取込み を行います。 下記にソースを書きましたが、まずTEST.batファイルを実行し、 TEST.bat側からTEST.ctlを実行し、TEST_WORKテーブルにデータを 格納します。 *****TEST.batの内容***** SQLLDR USERID=TEST1/TEST1@GUEST CONTROL=TEST.ctl LOG=LOG.txt ************************ *****TEST.ctlの内容***** LOAD DATA INFILE 'D:\test1.dat' TRUNCATE PRESERVE BLANKS INTO TABLE TEST_WORK FIELDS TERMINATED BY "|" TRAILING NULLCOLS (KOUMOKU1, KOUMOKU2, KOUMOKU3, KOUMOKU4) ************************ 実際にこれを実行した所、問題なく正常終了しました。 しかし、これをホスト側からFTPにて実行を行うと、 TEST.batが実行されません。もちろんログも出力されません。 ファイルが実行できてないので、ファイルのコピーを行う簡単 なバッチファイルを作成し、ホスト側から実行を行ってもらった 場合、こちらは問題ありませんでした。 となると、SQL-Loaderのソースに何か問題があるのでは?と 思いますが・・・色んなサイトでLoaderのソースを拝見しましたが、 見当がつかないです。 ソースを見て、気になる点や、同じ経験をされた方いらっしゃい ましたら、お知恵をお貸しください。 ちなみに、SQL-Loaderを実行するマシンのOSはWindows2000Proです。 よろしくお願いします。

  • mk100
  • お礼率81% (35/43)

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

FTPでどうやってバッチファイルを起動させるんですか? その方法を聞きたいくらいなのですが。 あと、ホストというのは何をさすんですか? ホストコンピュータですか?サーバですか? OracleDB自体はどこにあるのですか? もう少し状況を整理された方がいいかと思われますが。

関連するQ&A

  • sql*loader 数値のロード

    SQL*LOADERにて NUMBER(3,0)のフィールドに、小数点以下を含む数値をもったデータをロードすると 四捨五入か何かされて整数でデータがロードされてしまいます。 テーブル、CTLファイル、csvレコード、登録結果は以下のとおりです。 テーブル: CREATE TABLE tbl1 ( CLM001 NUMBER(3,0) NOT NULL, CLM002 VARCHAR2(30) ) CTLファイル: LOAD DATA INFILE 'tbl1.csv' BADFILE 'tbl1.bad' TRUNCATE INTO TABLE tbl1 FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( CLM001, CLM002 ) csvレコード: 0.9,aaaaa 3.1,bbbbb 登録結果(SQL*LOADER実行結果): 1,aaaaa 3,bbbbb 小数点を含むデータをロード時にエラーとしたいのですが、何かいい方法ありますでしょうか? 環境はSQL*Loader: Release 9.2.0.1.0になります。

  • SQL*Loaderについて

    SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはテキストファイルです。 しかし、NUMBER型にマイナスのデータ(-123.45)を格納 するとエラーになってしまいます。 原因としては、多分テキストデータの表示が"123.45-"と なっているからだと思います。 "123.45-"の表示でエラーとならずに"-123.45"と格納 されるようにすることは不可能なのでしょうか? 現在作成のLoaderは下記になっています。 load data truncate into table DEPT fields terminated by X'09' trailing nullcols (DEPTNO ,POSTNO NULLIF POSTNO=BLANKS ,SAL NULLIF SAL=BLANKS ) ちなみにSALがNUMBER型の項目です。

  • SQL Loaderを使いたい

    Oracleのバージョンは8、自分のPCには Oracle8Client(Application User) がインストールされています。 見よう見まねで制御ファイルを記述し、バッチファイルを作成したところ、 ( sqlldr USERNAME/PASSWORD@SID control= test.ctl ) コマンドプロンプトには以下のように表示されました。 「C:\SQL>sqlldr USERNAME/PASSWORD@SID control = test.ctl 'sqlldr' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。」 実行できない原因はどこにあるか教えてください。 1.そもそもSQL Loaderを利用できる環境になっていない (そのままでは使えなくて何かしら設定が必要とか) 2.コマンドがまちがっている (test.ctlのパスを記述しないとだめとか、SIDは要らないだとか) 3.制御ファイルがまちがっている どの可能性が一番高いでしょうか?

  • SQL*Loaderでのデータロード

    SQL*Loaderでデータロードを実行するとき ロードするテキストファイルのある列の部分が スペースのとき、テーブルで設定したデフォルト値 をロードさせたいのですが、どうCTLファイルで記述 すればよいのですか? 教えてください。おねがいします。

  • SQL*Loaderについて2

    SQL*Loaderを用いてOracleのテーブルにデータを格納しようと思っています。 格納するデータはテキストファイルです。 テキストファイルのデータはカンマ区切りになっているのですが、エラーとなってしまいます。 このテキストファイルをタブ区切りにすれば問題なく動くのですが、カンマ区切りでは無理 なのでしょうか? 現在作成のLoaderは下記になっています。 load data truncate into table DEPT fields terminated by X'09' trailing nullcols (DEPTNO ,POSTNO NULLIF POSTNO=BLANKS ,SAL NULLIF SAL=BLANKS ) 現在のデータは下記になっています。 1001,1234567,100000 1002,1234567,200000

  • データ削除とSQL*Loaderでのインポート

    SQL*Loaderを使ってデータをインポートするのですが、既存データが存在するテーブルにインポートするため、実行前に、条件に一致する一部のデータを削除します。 ですが、SQL*Loaderでインポートが失敗した際には、元に戻したいと思っています。 そういう場合に、SQL*PlusからDELETEのSQL文を実行してから、SQL*Loaderを起動してインポートするとなると、SQL*Plusから抜けた時点でCOMMITされてしまいますよね?そのためSQL*LoaderでインポートがエラーになってROLLBACKされても、削除されたデータは元に戻らないですよね・・・。 全件削除なら、CTLファイル内でREPLACEを指定してインポートするのですが・・・ データの一部削除とSQL*Loaderでのインポートを一連の処理として、エラーの際にはROLLBACKさせられる方法はありますでしょうか? よろしくお願いします。

  • SQL*Loaderの中断について

    SQL*Loaderの中断について シェルから子シェルを非同期で多重起動し、子シェルで SQL*Loaderのコマンドをかけています。 (子シェル内でもループで複数回コマンド実施) 実行中に親プロセスをCtrl+Cで殺します。 子シェルは投げられた分だけ実行するのはいいのですが、 Loaderの戻り値を受けて完了ファイルを書くのですが、 Ctrl+Cで中断されたLoaderのログがあるにもかかわらず 正常で帰ってきているものがあります。 ログに中断されたロードと出ているにも関わらず、 正常の戻り値ってありえますか? よろしくお願いします。

  • SQL*Loaderで既存のレコードの更新

    SQL*Loaderで既存のレコードがあったらUpdate処理を行いたいのですが 「Oracle7 Server ユーティリティ」に SQL*Loaderは、既存レコードがNULL列であったとしてもレコードを更新しません。 既存の行を更新するには、次の手順を利用してください。 1.データを一時表にロードする 2.相関副問合わせを持つSQL言語のUPDATE文を使用する 3.一時表を削除する とありますが、上記の1~3が具体的にどうすれば良いのか分りません・・・ 1.データとは、テーブルのデータ?それともロードファイルのデータ??   3.に削除とあるので、作成するのでしょうか?? 2・これはctlファイルに記述するでいいのでしょうか?? 記述の仕方は?? 3.ドロップコマンドはctlに記述でよろしいのでしょうか?? などなど・・ すみません、ご教授お願いできませんか??

  • SQL*Loader Append

    SQL*Loaderのコントロールファイル内のパラメータ設定についてですが、 ネットで調べた結果 ロード方法をAPPENDとすると既存データがある場合は新しい行として追加とあるのですが、 これはテーブルのPKが重複していても新しく行がついかされるということでしょうか? 逆にREPLACEはPKが重複しているデータに上書きされるということでしょうか? よろしくお願いいたします。

  • SQL*Loaderをダイレクトモードで実行

    するにはどうしたらいいのでしょうか? 例えば以下の場合にダイレクトモードでSQL*Loaderするにはどうしたらいいのでしょうか? sqlldr sato/secret control=x.ctl ただし x_table: create table x_table(i number,s varchar(99)); x.ctl: LOAD DATA INFILE 'x.csv' APPEND INTO TABLE x_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( i,s ) x.csv: 1,"it is iti." 2,"it is ni." 3,"it is san."