質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

1回答

1098閲覧

Oracle12c UPDATE実施時の奇怪現象(タイムアウト?製品バグ?)

ukaritainaa

総合スコア1

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/12/04 10:45

編集2020/12/04 10:55

お世話になっております。
OracleDB処理について奇怪な事象が発生しているので質問です。

(事象)
下記のようなSQLを実行した際には
カラムAに関しては更新が走っており値が入り、カラムBには値がNullになってしまう事象です。

UPDATE
SET
A = ファンクション(引数1、引数2)
B = ファンクション(引数1、引数2)
From Sample

・この条件下でファンクションへ渡す引数は全く同一のもである
・ファンクション内はDBリンクで別スキーマのテーブルを参照している
・毎回発生しておらず、AM6:00〜AM7:00といったシステムが稼動直後に発生する
・ログ上ではOraエラータイムアウトエラー等の出力はなし
・この時間帯、DBリンク先でDMP取得処理が実施される

再現性がわからず手詰まり状態です。
ネットワークやOracle製品起因で上記の事象が発生することは考えられますでしょうか。
抽象的な質問で恐縮ですが、何か手がかりになるような情報を頂けると幸いです。

----------------(追記) ----------------
DBリンク先のファンクションで参照しているテーブルのデータを参照していますが、そこがデータの洗い替えのために一時的にtruncateされ0レコードになっている可能性があります。ただそのタイミングで処理が走ったとして、カラムAもNullにならないと整合性が合わないので関係ないと推測はしております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2020/12/04 12:25

ここの掲示板では Markdown の使い方を覚えてください。 Oracle12.1, Oracle12.2 共にかなりのパッチが提供されているはずです。 DB LINK元とリンク先のOracle Database の正確なバージョン、 現象が再現できる最低限のCREATE TABLE, エラーが発生するパターンと発生しないパターンのデータをINSERTで、CREATE FUNCTIONとUPDATE文 を https://teratail.com/help/question-tips#questionTips3-7 の [コード] で質問に追加してください。 前回の質問もどう解決できたか提示しないのも掲示板のマナー違反です。
sazi

2020/12/04 20:53

どのようなファンクションでしょうか?PRAGMAとか指定していませんか?
ukaritainaa

2020/12/05 02:08

Orlofsky様 問い合わせのフォーマットのマナー違反であることご指摘ありがとうございます。 次回以降気をつけます。 追加の質問の具体的なコードですが、個人のPGではないため掲載できかねます。 詳細な調査というよりも、DMPエクスポート時や統計処理時、もしくは製品起因でこのような事象が発生する可能性があるか気になったものです。
ukaritainaa

2020/12/05 02:13

Sazo様 ご質問ありがとうございます。 PRAGMAは特に使用をしておりません。 具体性がなく恐縮ですが、特に何も変わったことはしていない下記のようなファンクションです。 Select カラムA from Sample2 Where カラム1 = 引数1 And カラム2 = 引数2 返却値・・・カラムA Sample・・・シノニム、別スキーマのDBリンク先テーブル
sazi

2020/12/05 03:59

トランザクション分離レベルは何ですか? また、「別スキーマのDBリンク先テーブル」とは「別スキーマで使用しているリンクテーブル」という事でしょうか? また、そのリンクテーブルのリンク先は何ですか?
sazi

2020/12/05 04:05

それから、ファンクション内で参照しているテーブルは別なトランザクションでの更新とぶつかることがありますか? また、この現象の発生頻度は?
Orlofsky

2020/12/05 13:15

>次回以降気をつけます。 で次回の質問がある人ってほとんどいません。 Oracleのパッチについては竿ーと契約者のみが知り得る情報ですから、一般の掲示板での質問では得られない情報です。
guest

回答1

0

一つのクエリの中で、2回ファンクションを実行していますが、この2つのファンクションは同時に実行されるわけではなく、同一レコードを確実にSelectするわけではありません。

例えば、一つのクエリの中で複数のタイムスタンプ取得関数を実行すると、わずかに時刻がずれていることが確認できると思いますが、参照先DBのTRUNCATE処理がその間に挟まったと考えると分かりやすいかと思います。
FUNCTIONでは別スキーマテーブルをSelectしているとのことですので、おそらく数ミリ~数十ミリ秒ぐらいはかかっているのではと思います。

ですので、参照先テーブルが丁度TRUNCATEされる頃に実行していると、片側だけNULLということもありえ、不思議な動きではないと考えられます。

投稿2021/01/09 06:35

Jean-Luc

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問