タグ付けされた質問 「oracle」

Oracleデータベースのすべてのバージョン。質問でそのコンテキストが重要な場合は、oracle-11g-r2のようなバージョン固有のタグを追加します。アプリケーションやミドルウェアなどのOracle製品や、MySQLやBerkeleyDBなど、Oracleが所有するその他のデータベース製品には使用しないでください。

5
Oracleでは、複数の挿入で再利用される変数にsequence.nextvalを保存するにはどうすればよいですか?
いくつかのテーブルにテスト用のデータを入力するスクリプトを書いています。 私は次のようなものを書きたいのですが、どうすればいいのかわかりません(私はOracle 11gです) SET ENABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE SET DISABLED_USER_ID = SEQ.NEXTVAL; // PSEUDOCODE INSERT INTO USERS (ID, USR_NAME) VALUES (:ENABLED_USER_ID, 'ANDREW'); INSERT INTO CAR (CAR_ID, CAR_NAME, USR_ID) VALUES (CARSEQ.NEXTVAL, 'FORD', :ENABLED_USER_ID); INSERT INTO USERS (ID, USR_NAME) VALUES (:DISABLED_USER_ID, 'ANDREW'); INSERT INTO CAR (CAR_ID, CAR_NAME, USR_ID) VALUES (CARSEQ.NEXTVAL, 'FORD', …

7
Oracleデータベースが起動していることをどのように確認しますか?
このアプリケーションでは、Oracleデータベースに接続するための構成ファイル(URL、ユーザー名、パスワード)があります。 アプリケーションの起動には2〜5分かかります。データベースに問題がある場合、ログにこれが表示されますが、2〜5分待つ必要があります。これは長い時間です。 そのため、データベースがすべて正常でオンラインであることをすばやく簡単に確認する方法を見つけたいと思います。 どうすればいいのかわかりますか?
13 oracle 

5
すべての行を更新
単一の列の非常に大きなOracleテーブルのすべての行を更新する最も効率的な方法を知りたいです。例えば: update mytable set mycolumn=null; または: update mytable set mycolumn=42; 私の知識は非常に古いかもしれません。テーブルを変更して列を削除します。次に、テーブルを変更して、使用する新しい値のデフォルト値を持つ列を追加します。次に、テーブルを変更して、列のデフォルト値を削除します。これは更新を実行するよりもはるかに高速であることがわかりましたが、より良い方法があると感じています。
12 oracle  update 


3
Oracleで一重引用符を使用せずに文字列から抜け出し、SQLを注入する方法はありますか?
Oracleベースのアプリケーションをテストしていますが、次のコードが見つかりました。 クエリ= "従業員から名前を選択WHERE id = '" + PKID + "';" つまり、クエリ文字列には、URLから直接取得されたPKID値を引用符で囲みます。 明らかに、これは起こるのを待っている古典的なSQLインジェクションです...ただし、アプリケーションはCA SiteMinderの背後にあり、単一引用符で囲まれたURLを(任意の形式で)アプリケーションに渡されないようにブロックします。 文字列から抜け出し、一重引用符を使用せずにSQLを挿入する方法はありますか? 編集:申し訳ありませんが、私は明確にすべきだった-私はそれがどのように書かれるべきか理解していますが、私はそれが悪用可能な問題であることを人々に説得する必要があります。現時点では、単一引用符をブロックするsiteminderの背後にあるため、優先度の低い修正になります。

1
Oracle Databaseのコミットvs高速コミットvsコミットアウト
Oracle Databaseに関連するこれら3つの用語の違いについて、誰かが私の理解を検証できるかどうか疑問に思っていました。 多くの情報源はこれらの用語を混同し、それらを詳細に説明していないため、情報を見つけるのは少し難しいものでした。 私が収集したものから: コミットと高速コミットはまったく同じです。すべてのコミットは高速コミットです。 基本的に、高速コミットは、元に戻す/ロールバックセグメントヘッダーのトランザクションテーブルのフラグを更新するだけで、トランザクションがコミットされたことを示します。ただし、実際のブロックは再検討されません。つまり、データブロックのヘッダーにある対象トランザクションリスト(ITL)のUNDOバイトアドレス(UBA)は、対応するUNDOセグメントのトランザクションテーブルを指します。さらに、対応する行のロックバイトは解放されず、ITLのロックカウントは変更されません(行はロックされたままです)。 コミットクリーンアウトでは、ブロックが再訪され、ITLがコミットSCNで更新されます。ただし、ITLのロックカウントと各行に格納されているロックバイトはまだ更新されず(高速コミットのように行はロックされたままです)、ブロックが変更されても、REDOは生成されません。 正常にコミットされた(==高速コミットされた)ブロックは、次にタッチされたときに遅延ブロッククリーンアウトを実行します(そしてREDOを生成します)。 コミットクリーンアウトが行われたブロックは、次にタッチされたときに遅延ログブロッククリーンアウトが行われます(そして、REDOが生成されます)。 誰かがこれらのポイントを検証できることを願っています!ありがとう!

4
OracleでNULL可能数を使用しない理由は?
私たちの会社は、共同プロジェクトのために他のソフトウェア会社とインターフェイスをとっており、特定の値を表示しない場合は、-5000(任意のセンチネル値)を渡す必要があると言われました。その理由は、(以前の)Oracle開発者の推奨により、Oracleデータベースの数値列がnull値をサポートしていないためです。また、この会社はコードの大部分をVB6で記述しています(VB.NETへの移行はゆっくりと進んでおり、これもまた別の日のトピックです...)。純粋な好奇心から、この推奨事項の正当な理由はありますか?私の側に何も考えられません。 ---編集 すべてのフィードバックをありがとう。CodeProject.com(link)で同じ質問を投げかけ、非常によく似たフィードバックを受け取りました。この方法が外部キーに関連していることを正当化できる可能性があるのは唯一のようであり、システム内のどこでも外部キーを使用しないと述べることができます。この決定をした開発者(私は以前その会社で働いていた)は、私よりもはるかに多くの経験を持っているので、ris笑が起こる前に、これに対する正当な理由がないことを確認したかった。

1
JDBCで明示的なコミットを無効にする、SQLで検出する、またはデータベースを読み取り専用状態にする
背景:私はhttp://sqlfiddle.com(私のサイト)に取り組んでおり、そこで悪用される可能性のある1つの手段を防止しようとしています。私が現在取り組んでいる問題について尋ねることによって、潜在的な虐待を不注意に悪化させないことを望んでいますが、あなたは何ができますか?皆さんを信頼しています。 任意のユーザーが特定のトランザクションブロック内で明示的な「コミット」呼び出しを発行することを防止したいと思います。SQL Fiddleのコンテキストから見ると、トランザクションブロックは右側のパネルで実行されるコードです。基本的に、ループしてプレーンテキストのSQLコマンドのリストを実行し、それらの変更がすべてバッチの最後に確実にロールバックされるようにします。通常、それらの変更はロールバックされますが、テキスト内に明示的な「コミット」ステートメントがある場合があるため、もちろん私のロールバックは機能しません。この明示的なコミットは、SQL Fiddleでスキーマを壊そうとするユーザーによるものである可能性が高いため、他のユーザーがエラーを確認します。 主な望ましい結果:可能であれば、JDBCレベルで明示的なコミットを無効にします。これは、複数のデータベースバックエンドベンダーをサポートする必要があるためです。もちろん、それぞれのベンダーには低レベルの癖があります。 フォールバックオプション:明示的なコミットを無効にするようにJDBCを構成できない場合、SQL Server、Oracle、MySQL、およびPostgreSQLの各バックエンドのバッチを処理中に明示的なコミットを検出するためのソリューションを利用できます。 SQL Serverの場合、このソリューションを考えました。実行する前にステートメントのXMLクエリプランを解析し、このXPathに一致するエントリの存在を確認します。 //*[@StatementType="COMMIT TRANSACTION"] これはSQL Serverでかなりうまくいくと思います。ただし、このアプローチは他のDBタイプでは機能しません。明示的なコミットに関するOracleのXML実行計画の出力は、コミットステートメントを実行しているという事実を参照していません(むしろ、コミットしているクエリから実行計画の出力を単純に繰り返します)。PostgreSQLおよびMySQLは、明示的なコミットに対して実行計画の出力(XMLまたはそれ以外)を一切提供しません。 そのため、「コミット」という単語の実際のステートメントを確認できます。これは機能しますが、可能なすべての種類のバリエーションがある場合を除きます。 declare @sql varchar(50) set @sql = 'com' + 'mit' exec(@sql); 上記はSQL Serverの例です(回避できます)が、Oracle、MySQL、PostgreSQLでも同様のことが可能だと思います。私はその仮定で間違っていますか?たぶん、彼らは「動的な」コミット文を許可しないでしょうか?Oracle、MySQL、PostgreSQLで同様のことができるかどうかを確認するために、SQL Fiddle(できればサンプルスキーマまたは他の誰かが作業している可能性のあるものではない)を自由に使用してください。そうでない場合は、単純な文字列の検出が機能する可能性があります。 さらに別の可能性 別のオプションがありました-これらのデータベースのいずれかを読み取り専用モードに設定する方法を知っている場合、そのモードでは何もコミットできませんが、それも機能します。そのモードで何もコミットできない限り、トランザクションの開始とトランザクション内でのコードの実行を許可する必要があります。それは可能ですか? 更新 私が最近学んだこと-これは実際にはPostgreSQLの問題ではありません。トランザクションブロック内で発行されたコミットは、その同じブロックが最終的に(Postgresで)ロールバックされた場合には適用されないようです。Postgresの皆さん、ありがとう! PhilのSO投稿へのリンクのおかげで、DEFERRABLE INITIALLY DEFERREDハックを使用してOracleを達成できると思います(コミットが発行されるとエラーがスローされますが、それを回避できます)。これはOracleに対処する必要があります。(ネストされたトランザクションがここで機能するかもしれないと少しの間考えましたが、Oracleがネストされたトランザクションをサポートしているようには見えませんか?とにかく、このように機能するものは見つかりませんでした)。 MySQLのソリューションはまだありません。ネストされたトランザクションを使用してみましたが、動作しないようです。右側のSELECT以外は許可しない、または各クエリの後にDBを削除/再作成するなど、MySQLのより抜本的なアプローチを真剣に考えています。どちらも良い音ではありません。 解決 したがって、SQL ServerとOracleについて説明したソリューションを実装しましたが、前述したように、これは実際にはPostgreSQLの問題ではありません。MySQLの場合、クエリパネルをselectステートメントのみに制限するというやや不幸なステップを踏んでいます。MySQLのDDLとDMLは、スキーマパネル(左側)で入力するだけです。これがあまりにも多くの古いフィドルを壊さないことを願っていますが、それは単にデータの一貫性を確保するために行わなければならないことだと思います。ありがとう!

2
複数のクエリ列に同じCASE WHEN条件を使用する
SELECT複数の列が同じCASE WHEN条件を使用して、条件が1回だけチェックされるように句を書き換える「より良い」方法はありますか? 以下の例を参照してください。 SELECT CASE testStatus WHEN 'A' THEN 'Authorized' WHEN 'C' THEN 'Completed' WHEN 'P' THEN 'In Progress' WHEN 'X' THEN 'Cancelled' END AS Status, CASE testStatus WHEN 'A' THEN authTime WHEN 'C' THEN cmplTime WHEN 'P' THEN strtTime WHEN 'X' THEN cancTime END AS lastEventTime, CASE testStatus WHEN …

3
オラクルは私をどうやって知るのですか?
それほど重要ではありませんが、私の好奇心をそそりました。 Oracle SQL Developer Toolsを使用して初めてOracle 10gデータベースにログインしました。 私の名前ではないもの(ズッキーニ)と呼ばれるマシンから、私の名前ではない一般的なユーザーログイン(nottstest2)を使用しました。私の名前はデータベース内のどこにも存在せず、ログインに関連付けられていません。 ただし、サーバーログには「Jon Hopkins」からの接続が表示されます。 私が誰であるかをどのように知るのですか?Windowsログインから何らかの方法で取得されていますか(シングルサインインを使用していません)。

3
キー保存表の概念とは何ですか?
「結合ビューの更新」セクションのキー保存されたテーブルに関するOracleドキュメントを読みました。 ただし、簡単に理解できる方法は見つかりませんでした。 公式のOracleドキュメント以外のいくつかの簡単な概念の詳細を受け取りたいと思っています。
12 oracle 

2
テーブルエラーを変更する原因と解決策は何ですか?
変換テーブルエラーは、設計上の欠陥または問題のあるクエリによって引き起こされることを理解しています。 最近、古いクエリが実稼働環境に導入され、変更テーブルエラーがスローされました。DBAが問題を解決しましたが、方法はわかりません。 変換テーブルエラーの正確な原因は何ですか?DBAはどのように問題を修正しましたか?
12 oracle  trigger  plsql 

2
7億行を同じ値に更新する
データウェアハウス(オラクル)があり、7億行すべてに対して同じ値に列を設定する必要があります。 私は管理者アクセス権も管理者アクセス権も持っていないので、これは基本的なSQLで実現する必要があり、一時テーブルは作成しません。 さらに複雑な問題は、1 = 1の単純な更新を実行しようとすると、REDOスペースが不足することです。 私が今実行している方法は、次のようなループです: loop update mytable set mycolumn = '1' where mycolumn is null and rownum < 50000; commit; end loop しかし、私はこれがおそらく素朴であり、より迅速でよりエレガントなソリューションが必要であることを知っています。

2
LNNVL正当化
LNNVLは、Oracleの組み込み関数であり、FALSEまたはUNKNOWNと評価される条件に対してTRUEを返し、TRUEと評価される条件に対してFALSEを返します。私の質問は、単にNULL値を処理するのではなく、真理条件の反対を返すことの利点は何でしょうか? たとえば、ヌルを含む可能性のあるStartCommission列とCurrentCommission列を持つEmpテーブルがあるとします。次の例では、値がnullでない行のみが返されます。 SELECT * FROM Emp WHERE StartCommission = CurrentCommission; いずれかのコミッションがnullである行を含めたい場合、次のようなことができます。 SELECT * FROM Emp WHERE StartCommission = CurrentCommission OR StartCommission IS NULL OR CurrentCommission IS NULL; この構文を短縮する関数が存在するように思われますが、LNNVLを使用すると、すべての等しくないレコードとNULLを持つすべてのレコードが返されます。 SELECT * FROM Emp WHERE LNNVL(StartCommission = CurrentCommission); これにNOTを追加すると、nullのない行のみが返されます。この場合に望ましい機能は、真の条件を真、偽の条件を偽に保ち、未知の条件を真と評価することです。ここで低ユースケースを実際に作成しましたか?不明をtrueに、trueをfalseに、falseをtrueにしたいというのは本当ですか? create table emp (StartCommission Number(3,2), CurrentCommission Number(3,2)); insert into emp values (null,null); insert …

3
インデックスはクエリのパフォーマンスにどのように影響しますか?
明らかに、いくつかの異なるインデックスを保持することは、挿入および削除のパフォーマンスに悪影響を及ぼします。クエリのパフォーマンスはどうですか:テーブルに多くのインデックスを保持するのは理にかなっていますか?インデックスを追加するとクエリのパフォーマンスが向上しますか(もちろん、インデックスを使用するクエリの場合)、取得するためにすべてのインデックスを調べる必要があるため、インデックスが多すぎるとクエリのパフォーマンスが低下する可能性があります結果? テーブルに異なるインデックスがある場合:それらはすべて考慮されるのか、オプティマイザーの観点からのみ最適なのか?Oracleは多次元インデックスを実装していますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.