RDBに項目追加をしたいのですが、DDFの修正方法がわかりません

1:RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
iga 04/25 13:43
こんにちは。たまに拝見して参考にさせていただいておりますオフコン素人です。
よろしくお願いいたします。

RDBのFILLERに項目追加方法がわかりません。

#DDMで、→表定義→データディクショナリファイル名、

で呼び出して、FILLERに追加して、DDF出力、しました。

が、RDBQで見ても、skylinkにも追加項目が表示されません。
もちろんプログラムでも認識されません。

なにか作業も漏れているでしょうか。

ユーザDDFを修正したのですが、
もしかして、SYS@DDFに併合しないといけないのでしょうか?



2:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
 04/26 09:36
igaさん がんばってますね。

>ユーザDDFを修正したのですが、
>もしかして、SYS@DDFに併合しないといけないのでしょうか

そのとおりですね。
SYS@DDFに併合しないと、RDBQにも、skylinkにも表示されません。

また、私の認識では、
COBOLのプログラムでは、「表定義の有無」は関係しますが、
「表定義の項目名」などは関係なかったように思っています。が、・・・

とにかく、SYS@DDFに併合すれば、解決すると思いますので、
がんばって下さい。


3:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
iga 05/02 13:52
こんにちは。
ご親切にありがとうございます。

やはりSYS@DDFに併合しないとだめなんですね。

#DDFのファンクションに、「併合」というのはあったのですが、
それを実行しても大丈夫でしょうか?
というのも、

・ユーザDDFに項目追加後、併合を実行したら、何か既存の本番データが上書きされて、消えてしまうことはないのでしょうか

・ユーザーDDFに項目追加後、併合は、普通に日中、基幹業務稼働中に実行しても、問題ないでしょうか。SYS@DDFは、RDBQとかskylinkくらいしか影響はないような気がしますが・・。
突然稼働中のプログラムは暴走したり、
障害起きたりしませんでしょうか。

まずはユーザーDDFに追加 → SYS@DDFに併合 してから、じっくり cobolプログラムの修正をしようかと思っているのですが・・。
その際、RDBファイルのcopy句も修正します。



4:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
tahrayan 05/02 20:12
こんにちは。


>・ユーザーDDFに項目追加後、併合は、普通に日中、基幹業務稼働中に実行しても、
>問題ないでしょうか。
>SYS@DDFは、RDBQとかskylinkくらいしか影響はないような気がしますが・・。

業務稼働中はやらない方がよいのではないでしょうか。
WindowsやUNIXでも、日中基幹業務がガンガン動いている最中にOracleの
テーブル作成とかはしないと思います。
併合によって業務に使っているデータが壊れることは無いと思います。
SYS@DDFに併合するということは、SQL文のcreate table xxxに相当するので
単にテーブルの定義を行うだけです。
でも普通はシステムに変更を加えるようなときはバックアップは取っておきますよね。

プログラム開発の順番は自由ですが、普通は以下のような感じで行います。
1.表定義保守(#DDM)の表定義で、ユーザDDFに表&テーブル定義。
2.表定義保守(#DDM)のライブラリ出力で、COBOLのレコード記述項用の
  ソースを出力。
3.COBOLでプログラム作成。このとき2で作ったソースをレコード記述項用と
  してCOPY文記述。
4.表定義保守(#DDM)の併合で、ユーザDDFからSYS@DDFに表定義を併合。
  このとき一緒に実ファイルの領域確保も行う。


1は、これからプログラムを作るので、まだ実業務環境には表定義も実ファイルも作らずに、
準備だけしておく。
2は、1で定義した情報を元にレコード記述項の情報を作る訳で、システム上の情報とCOBOL
プログラム上のレコード記述項の情報を常に一致させるためには必須。レコード定義のCOPYを
手で直したり、直接COBOLソース上に記述したりしていると、プログラムを改修したりした時に、
システムとプログラムのテーブル情報が一致しなくなる原因になります。(とはいえ、レコード
記述項を手で直したりはよくやっていますが。)
実際に実業務環境に組み込んでもOKとなったら、4でユーザDDFの情報をSYS@DDF
に併合することになります。(テスト環境があれば、ユーザDDFからテスト環境のサーバの
SYS@DDFに併合してテスト実施、テスト終了後に実業務環境のSYS@DDFに併合して
運用開始という形になるのかもしれません。)
基本的にこのとき#DDMで実ファイルの領域確保も同時に行います。(#ABCとかで作る
訳ではない)



5:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
EXCHANGE 05/04 05:04
☆ A−VXの場合、
(1)SYS@DDFにマージされたDB定義
(2)COBOLで使用するCOPY句定義
(3)MIX(キーなし複数順編成)で領域確保された実データ
上記3つは別々に作成されます。

☆ AVX以外の他のデータベースの場合、create tableコマンドでレイアウト定義と実領域が同時に作成され、COBOLからもCOPY ALL FORMATS OF DATABASE 式にテーブル定義を直接参照できるようになっています。(もっとも最近はAVXもCOBOLからの直接参照はできるようになっているみたいですが。。)

☆ (1)〜(3)が別々で、仮にズレていても定義時に警告が出ないため、定義間のズレによってプログラム実行時に不具合が起こらないように気をつけて開発する必要があります。


☆ 今回は既存のテーブルの最後尾のFILLER部分に新規項目を追加するということでしたよね。

☆ それでしたら、ローカルの HOGEHOGE-DDF --> SYS@DDFへのマージをおこなっても、修正を施していない既存プログラムの実行には影響は無いはずです。

☆ * COPY句の最後尾に項目を追加してFIILERのバイト数を減らす。
  * プログラムを修正もしくは新規開発する。

  * 項目が追加されたテーブルをSYS@DDFにマージする

  といった一連の開発手順でよいと思います。

☆ ただし、以下の点は重要なので、十分考慮しておいてください。

☆ 追加項目が数字項目の場合、既存のデータのFIILER部分に数字以外の項目が入っている場合があります。修正後のプログラムがこの部分を使用すると、実行時に NON-NUMERICエラーを引き起こす可能性があります。COMP−3項目は特に要注意です。
あらかじめRDBQの一括更新などで、数字0をセットして初期化しておくことをお勧めします。

☆ 追加項目が漢字項目の場合はRDBQでの初期化ができないようですので、簡単な初期化プログラムを作成してあらかじめINITIALIZE命令などで初期値をセットしておくほうがよいでしょう。運用開始後に漢字として正しくないものが入っているレコードのみを抽出して初期化するのはかなり難しいです。

(追伸)RDBQのことを申しましたが、AVXの開発初心者の方でしたら「RDBQ」を使わず、はじめから「RDBQ2」の方をお使いになることをお勧めします。
RDBQ2の方が機能的にも操作的にも格段に優れているからです。
なお、ユーザとして使われる方にはRDBQもRDBQ2もともにお勧めしません。SKYLINKなどをお勧めします。
(AVX −> OPEN移行後のことを考慮して、というのが理由です)








6:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
iga 05/28 13:47
こんにちは。
ご親切にどうもありがとうございます。

ついでに聞いて申し訳ないのですが、

#DDMですが、
2.表定義を選んで
ディクショナリ名で SYS@DDFを選んで、

5.併合を選び、

処理モード:「置換」

入力元: xxDDF(ユーザディクショナリ)

併合表名: xxxファイル

指定確認 1 ok

とやればいいのでしょうか?


あと心配なのは、実データです。
いちおう直前に、バックアップは取りますが、
併合、(置換)したことにより、
実データに影響は一切ないですよね?

(まさか、データが全て初期化されてしまうとか・・・)

filler部は初期値のままです。

領域の確保はしないつもりです。

しつこくてすみません。かなり心配症なもので・・。

よろしくお願いいたします。



7:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
iga 05/28 13:54
ご親切にどうもありがとうございます。

ところで2箇所だけ大変気になる部分があったのですが。


↓↓↓↓↓↓


「4.表定義保守(#DDM)の併合で、ユーザDDFからSYS@DDFに表定義を併合。
  このとき一緒に実ファイルの領域確保も行う」


「基本的にこのとき#DDMで実ファイルの領域確保も同時に行います。(#ABCとかで作る
訳ではない)」


領域確保とはどういうことでしょうか?
今回はFILLERに項目を追加しようとしているだけなのですが、
なぜ実ファイルの、領域確保が必要なのでしょうか?

領域確保というと、
データベースがオーバーフローした際、
再度、領域を確保して、データベースを作り直す
という意味だと思うのですが・・・

素人ですみません、よろしくお願いいたします。






8:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
tahrayan 05/30 01:08
>瘋
>FILLER
>堰





9:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
EXCHANGE 05/30 04:41
☆ SYS@DDFへの併合の方法はそれで問題ありません。
  ただし、この表(テーブル)もしくはこの表を含む仮想表(ビュー)を何らかのプログラムから使用しているときは
  SYS@DDFへの併合そのものができません(エラーになる)ので、使っていないときに併合してください。
  
☆ 併合したことによりMSDにアロケートされている物理的なファイルには何の影響もありません。
 また、igaさんがやろうとされている「COPY句最後尾への項目追加」であれば、追加される新項目を使用していない従来プログラムに対しても動作上の影響はありません。(つまり、この追加項目を使用していない従来ソフトはリコンパイルの必要はありません)




10:Re: RDBに項目追加をしたいのですが、DDFの修正方法がわかりません
EXCHANGE 05/30 04:54
> この表(テーブル)もしくはこの表を含む仮想表(ビュー)を何らかのプログラムから使用しているときは。。

というのは、オープンされている(現在使用中)という意味です。
(単にプログラム内で定義されているという意味ではありません)
 表現が曖昧ですみせんでした。

☆ あらかじめアテンションにて実行中ファイルを確認したとしても
  その直後に誰かが問題のファイルをオープンしに行くかも知れませんから、ご心配でしたら、ユーザの方がすべて業務を終了されてから併合を行ったほうがいいと思います。
  

1-

BluesBB ©Sting_Band