System Management
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

DAT読出しエラー

H_Ka
時折のアドバイザー

DAT読出しエラー

いつも参考にさせて頂いております。

巻き戻しなしのデバイスファイルを使用してDAT(DDS3)を介したデータ移行を行おうとしているのですが、移行先でデータの読出しがうまくいかずに困っております。

データはOracleのエクスポートファイルで、エクスポート時のログと共にテーブル単位で吸い上げます。複数のテーブル(100テーブル程度)を処理するため、下記のコマンドをスクリプトでループさせています。

<移行元>

tar cvf /dev/rmt/0mn "テーブル名"*

テーブル名はスクリプトに引数で与える

<移行先>

tar xvf /dev/rmt/0mn

DATに格納したテーブルの数だけ繰り返す

現象としては移行先で2回目以降のtarを実行したときに"tar: /dev/rmt/0mn がオープンできません。"とメッセージが出力されてエラーになります。

ややこしいことに、すべてのデータをうまく読み出せたり、エラーの発生する場所もまちまちなので、原因が分かりません。

対策として以下の事は試してみましたが、いずれの場合も解決に至りませんでした。

・テープドライブのクリーニング

・新品のDATを使用

・スクリプトで実行せず、手動でtarコマンドを実行

エラーになる原因と解決策についてご教示願います。よろしくお願いします。
4 件の返信
oops
貴重なコントリビューター

DAT読出しエラー

ご質問に対する回答にはなりませんが、1本のDDSに保存する方法として、複数のテーブルのファイル(?)を tar でアーカイブし、それを dd で DDS に送り込んだらどうでしょうか?

書き込み側

# tar cvf - ./* | dd of=/dev/rmt/0m bs=10k

読み込み側

# dd if=/dev/rmt/0m bs=10k | tar xvf -
nadachi
レギュラーアドバイザー

DAT読出しエラー

> 現象としては移行先で2回目以降のtarを実行

> したときに"tar: /dev/rmt/0mn がオープン

> できません。"とメッセージが出力されてエラー

> になります。

変な点に注目するようですが、スクリプトでループ

させて、tarコマンドを繰り返し実行しているわけ

ですよね。その中で、"2回目以降" にエラーになる...

てことは、同じDDSドライブを使って、スクリプト中で、1回目のtar はたいていうまく行く、と読みました(誤解ですか?)

それと、エラーが"オープンできません" ということ。デバイスファイルは "0mn" (no rewind) ですから、1巻に複数のarchiveを書いているようです。そうすると、一つ目のtar archiveを読み終わったところで、テープのヘッド位置がどこにあるか、が関係しているのでは?

( これはバークレーモードか、BELL互換モードか、でちょっとだけ異なるはず。 また、DDSテープですから、tar archiveの切れ目に、"mt"コマンドでセットマークをテープに書いておいて、読むときには、セットマークを目安にヘッドを明示的に移動させて(これもmtコマンドを使う)... という手もあるのでは。)

 

H_Ka
時折のアドバイザー

DAT読出しエラー

oopsさん、nadachiさん返信ありがとうございます。

oopsさん、確かに保存したいデータをひとまとめにするのが確実なのですが、今回はシステムディスク容量の都合上、エクスポートファイルをDDSに書き込んですぐに削除するという方式を検討しております。エクスポートファイルの明確なサイズが今後明らかになったらoopsさんのおっしゃる方法も検討したいと思います。

nadachiさん、

>同じDDSドライブを使って、スクリプト中で、1回目のtar はたいていうまく行く、と読みました(誤解ですか?)

ご推察の通り、1回目のtarは100%成功します。

>( これはバークレーモードか、BELL互換モードか、でちょっとだけ異なるはず。 また、DDSテープですから、tar archiveの切れ目に、"mt"コマンドでセットマークをテープに書いておいて、読むときには、セットマークを目安にヘッドを明示的に移動させて(これもmtコマンドを使う)... という手もあるのでは。)

セットマークを使うという事は考えていませんでした。ファイル毎の終端を明示するということでしょうか?こちらの環境でも試してみたいと思います。
H_Ka
時折のアドバイザー

DAT読出しエラー

nadachiさん

manページを再度確認し、セットマークを以下のようにアーカイブの合間に入れてみました。

<書き込み時>

tar cvf /dev/rmt/0mnb "ファイル名"

mt -t /dev/rmt/0mnb smk

<読出し時>

tar xvf /dev/rmt/0mnb

mt -f /dev/rmt/0mnb fss

mt(1)のmanページにバークレイ・タイプのrawデバイスのみ指定可能とあったので、デバイスファイルも変更しました。

申告し忘れていましたが書き込みを行うのはHP-UX10.20、読出しを行うのはHP-UX11.11のサーバを使用しています。

現象としては変わらず、やはりエラーになってしまいます。

スクリプトのログを見ると、tarがループしている途中でテープの先頭が読出されているようです。つまり、テープの終端まで行き着いていないのに(アーカイブが残っているのに)テープが巻き戻っているように見えます。一定時間操作されないと先頭に巻き戻るという仕様でもあるのでしょうか?