muyoshid の回答履歴
- インデックスの階層数によるパフォーマンスの差
Bツリーのインデックスで、階層数が増えるとパフォーマンスが悪化するとありますが、なぜでしょうか。 データ量が膨大な場合は、むしろパフォーマンスが上がるような気がしてならないのですが・・・ 例えば階層が3から4に増えた場合、検索時に単にIOが1回増えるだけのように思えますが、その1回のコストを問題にしているということなのでしょうか? 基本的な質問ですみませんが、よろしくお願いします。 (削除リーフ数はゼロという前提で)
- スナップショット取得について教えてください
ある、スクリプト内にスナップショット取得するコマンドを加えたいです。 引数を7つ指定します。 書き方を教えてください。 スペース、記号等に注意して色々試しましたが上手くいきません。。 指定したい引数は以下です。 i_snap_level= i_execution_th= i_disk_reads_th= i_parce_calls_th= i_buffer_gets_th= i_sharable_mem_th= i_version_count_th= どうぞ、宜しくお願いします。
- oracle 11g複製
現在本稼働しているDBを開発環境構築の為、テーブルを複製したいと考えております。 本環境:Oracle Database 11g 開発環境:Oracle Database 11g Express Edition 全てのテーブルを複製する必要はありません。 SQLのテストのため、Userテーブルを複製したいと考えてます。 必要なテーブルが、30テーブルほどあり内10テーブルは、200万件程度のレコード数があります。 安全かつ、本サーバーに負担の少ない方法はどうしたらよろしいでしょうか? 本環境のSQL sql developerのエクスポート機能で、テーブルを1個づつ出力し、開発環境のSQL developerでインポートを実行すれば、正常に稼働するのでしょうか? MS SQL Serverなら、上記の方法で問題無いのですが、Oracleは初心者の為、全く分かりませんので、ご教授頂けましたら幸いです。
- PL/SQLでフェッチでNULLの項目について
PL/SQLで質問があります。 たとえば複数レコードがあり、フェッチで1件ずつ処理する場合、 1件目で値あり、2件目NULLの場合、2件目のフェッチでINTOした変数はNULLが保証されるでしょうか? それとも1件目の値が残ってしまうでしょうか? サンプルでフェッチのループ内で変数の初期化をしない場合でも、NULLで上書きされているようにみえますが、PL/SQLではありませんが以前ProCでNULLの場合は前のレコードの値が残ってしまったため、PL/SQLは上書きが保証されるのかが気になっています(どちらもオラクルなので似た仕様になるのではと懸念)。 グーグル先生に聞いてみましたが、明記されているサイトがみつからず・・・。 ProCはインディケータでNULLを判定するので値の変数にはNULLの場合、何もしないだけでPL/SQLでは特に初期化を気にすることはないのかもしれませんが、仕様として記述されている箇所が見つからないためご存知の方がいらっしゃいましたら教えて頂けると助かります。 具体的には仕事でそういうコーディングになっている箇所があり、直すべきかそのままで問題ないかを検討しています。 現段階ではあまり修正できる状況ではないため、問題にならなければそのままとしたいと考えています。 サンプルの実行結果上は問題なさそうなのですが、できればプラスアルファの情報が欲しく。
- select for updateのロック
オラクルのselect for updateでロックをするタイミングがいつですか? こんなPL/SQLのコードがあったとします。 ---↓↓↓ソースコードここから↓↓↓------------------------- select * from テーブル1 where id = 1 for update; ・・・・・(a) ~ update テーブル1 set kingaku=100 where id = 1 ・・・・・(b) ~ commit; ---↑↑↑ソースコードここまで↑↑↑------------------------- id = 1のレコードがロックされるのは(a)、(b)どちらのタイミングですか? また、このロックは ・他トランザクションから読めるけど更新できない ・他トランザクションからは読むことすらできない のどちらでしょうか? よろしくお願いします。
- select for updateのロック
オラクルのselect for updateでロックをするタイミングがいつですか? こんなPL/SQLのコードがあったとします。 ---↓↓↓ソースコードここから↓↓↓------------------------- select * from テーブル1 where id = 1 for update; ・・・・・(a) ~ update テーブル1 set kingaku=100 where id = 1 ・・・・・(b) ~ commit; ---↑↑↑ソースコードここまで↑↑↑------------------------- id = 1のレコードがロックされるのは(a)、(b)どちらのタイミングですか? また、このロックは ・他トランザクションから読めるけど更新できない ・他トランザクションからは読むことすらできない のどちらでしょうか? よろしくお願いします。
- シーケンス取得について
AスキーマとBスキーマがあり AにはSというシーケンスが作成されて、GRANTでBに権限付与されています。 BのUSER_SEQUENCESにはもちろん存在しないため、 SELECT MAX_VALUE FROM USER_SEQUENCES WHERE SEQUENCE_NAME でMAX_VALUEの取得でエラーになります。 これを回避する方法ってありますでしょうか?? もしくはBのUSER_SEQUENCES に追加する方法がありますでしょうか? どなたかお願い致します。
- ベストアンサー
- Oracle
- tresure7878
- 回答数1
- 端末識別子、セッション識別子、クライアント識別子
監査について調べています。 監査証跡への出力項目として上の用語が出てくるのですが、いまいち違いがはっきりしません。 具体的にこれらの違い、それぞれ何を指すのか、どのような値が入るのか教えていただけませんでしょうか。また自動的にはいるのか、何か設定していないと入らないのかなど。 差し支えなければ、実際のログの例などから教えていただければ理解しやすいかと思います。 よろしくお願いします。 なお関係するようでしたら、oracle11gサーバはsolaris 端末はwindowsで動作させた場合と想定していただいても結構です。
- AUDIT TABLE
AUDIT TABLEは特定のテーブルに対する監査ではなく、全部のテーブルに対する特定の処理(DDL)を監査するものだという記述を見ました。 しかし、別のところで AUDIT TABLE ON <テーブル名> というSQL文の例を見ました。 これだと特定のテーブルに対する監査になると思うのですが、このSQLはそういう解釈で正しいのでしょうか? また、特定のテーブルに対するすべての操作の監査をするには AUDIT SELECT,INSERT,UPDATE,DELETE,LOCK ON <Schema>.<Object> BY ACCESS; だけではDROPやCREATEが監査できないので不十分でAUDIT TABLEと組み合わせないと無理ということになるのでしょうか? 出展が明記できてなくて申し訳ありません。個人的なblog等ではないので執筆者に問い合わせるなどはできないようです。
- Oracle audit trail
auditのログが出力先されません。 パラメータは次の通りです。 SQL> show parameter audit audit_file_dest string C:\TEMP audit_sys_operations boolean FALSE audit_syslog_level string audit_trail string OS auditを設定しました。 SQL> audit select on TESTUSER.TESTTABLE; 監査が成功しました。 しかし、次のSQLを実行しても、ログが出力されません(C:\TEMPの中を探しましたが見つかりません)。 SELECT * FROM TESTUSER.TESTTABLE;
- 締切済み
- Oracle
- takeshi860107
- 回答数1
- NLS_LENGTH_SEMANTICS変更の影響
既にデータベースをOracle 11gR2にて構築していて、初期化パラメータ「NLS_LENGTH_SEMANTICS」をデフォルトのByteベースからCharベースに変更しようとしています。この手順と影響範囲が知りたいです。 (1) 手順 私の理解では単純にSYSユーザにて以下を実行する。データベースの再起動は不要で有効になる。 SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS='CHAR'; 正しいでしょうか? (2) 影響範囲 SID上に構築しているすべてのスキーマ上のテーブルに適用される、で正しいでしょうか? また、既存テーブルと新規テーブルという意味では、既存テーブルには影響を与えない、らしいのですが、そうなのでしょうか? 新しくテーブルを作成した場合にのみCharベースになるということでしょうか。その場合、既存テーブルもCharベースに変更するにはどのような手順を踏めばよいのでしょうか?(例)テーブルのエクスポート→テーブルのドロップ→テーブル再作成→データのインポート?など、思いつきですがよい方法があれば教えてください) 以上、宜しくお願いします。
- ベストアンサー
- Oracle
- rio_grande
- 回答数1
- Oracle12cでユーザのSQLPLUSログイン
基本的な質問ですみません。Oracle 12cを初めて使うのですが、すごく単純に、ユーザを作成し、そのユーザでデータベースオブジェクト(テーブルなど)を作成する拡張子が.sqlのスクリプトを流したいです。 11gまでの場合、システムユーザでCREATE USERしたのちに、コマンドプロンプトを立ち上げて C:\Scripts> SQLPLUS <USER>/<PASSWORD> @createtables.sql とするだけで良かったと思います。 今回、12cではユーザの考え方が変わっており、CDBとPDBを作成しました。 > SQLPLUS /NOLOG SQL> CONN SYS AS SYSDBA (上記のようにローカル接続するとCDBに接続される) SQL> ALTER SESSION SET CONTAINER=PDB1; // PDBへ移動 SQL> SHOW CON_NAME // 念のため現在接続中のPDBの名前確認 SQL> STARTUP; (これでマウント状態だったPDB1がOPENしてREAD WRITEになる) この状態でCREATE USER文を実行してPDB1上でユーザを作成。 ここからなんですが、PDBやCDBへのログイン方法はわかたのですが、PDB上で作成したユーザにはどのようにしてログインするのでしょうか? ログインしてテーブル作成をしたいです。また、テーブル作成のスクリプト文(.sql)があるのでそれを流したい場合は、コマンドプロンプトからどのように実行すればよいでしょうか? 基本的な質問で恐縮ですが、宜しくお願いします。
- ベストアンサー
- Oracle
- rio_grande
- 回答数3
- Oracle12cでユーザのSQLPLUSログイン
基本的な質問ですみません。Oracle 12cを初めて使うのですが、すごく単純に、ユーザを作成し、そのユーザでデータベースオブジェクト(テーブルなど)を作成する拡張子が.sqlのスクリプトを流したいです。 11gまでの場合、システムユーザでCREATE USERしたのちに、コマンドプロンプトを立ち上げて C:\Scripts> SQLPLUS <USER>/<PASSWORD> @createtables.sql とするだけで良かったと思います。 今回、12cではユーザの考え方が変わっており、CDBとPDBを作成しました。 > SQLPLUS /NOLOG SQL> CONN SYS AS SYSDBA (上記のようにローカル接続するとCDBに接続される) SQL> ALTER SESSION SET CONTAINER=PDB1; // PDBへ移動 SQL> SHOW CON_NAME // 念のため現在接続中のPDBの名前確認 SQL> STARTUP; (これでマウント状態だったPDB1がOPENしてREAD WRITEになる) この状態でCREATE USER文を実行してPDB1上でユーザを作成。 ここからなんですが、PDBやCDBへのログイン方法はわかたのですが、PDB上で作成したユーザにはどのようにしてログインするのでしょうか? ログインしてテーブル作成をしたいです。また、テーブル作成のスクリプト文(.sql)があるのでそれを流したい場合は、コマンドプロンプトからどのように実行すればよいでしょうか? 基本的な質問で恐縮ですが、宜しくお願いします。
- ベストアンサー
- Oracle
- rio_grande
- 回答数3
- Oracle12cでユーザのSQLPLUSログイン
基本的な質問ですみません。Oracle 12cを初めて使うのですが、すごく単純に、ユーザを作成し、そのユーザでデータベースオブジェクト(テーブルなど)を作成する拡張子が.sqlのスクリプトを流したいです。 11gまでの場合、システムユーザでCREATE USERしたのちに、コマンドプロンプトを立ち上げて C:\Scripts> SQLPLUS <USER>/<PASSWORD> @createtables.sql とするだけで良かったと思います。 今回、12cではユーザの考え方が変わっており、CDBとPDBを作成しました。 > SQLPLUS /NOLOG SQL> CONN SYS AS SYSDBA (上記のようにローカル接続するとCDBに接続される) SQL> ALTER SESSION SET CONTAINER=PDB1; // PDBへ移動 SQL> SHOW CON_NAME // 念のため現在接続中のPDBの名前確認 SQL> STARTUP; (これでマウント状態だったPDB1がOPENしてREAD WRITEになる) この状態でCREATE USER文を実行してPDB1上でユーザを作成。 ここからなんですが、PDBやCDBへのログイン方法はわかたのですが、PDB上で作成したユーザにはどのようにしてログインするのでしょうか? ログインしてテーブル作成をしたいです。また、テーブル作成のスクリプト文(.sql)があるのでそれを流したい場合は、コマンドプロンプトからどのように実行すればよいでしょうか? 基本的な質問で恐縮ですが、宜しくお願いします。
- ベストアンサー
- Oracle
- rio_grande
- 回答数3
- Oracle 11g R2の監査ログのフォルダ
よろしくお願いします。 【環境】 RHEL 5 Oracle 11g R2 【質問】 AUDIT_FILE_DESTパラメータ に /opt/oracle/app/diag/AUDIT を指定して ファイルとして出力しています。(必須監査も含めて)通常は正常に動作していますが、なぜか まれに以下のフォルダに監査ログが出力されてしまいます。 $ORACLE_BASE/admin/adump 出力されるログは今のところ以下の1種類の監査ログのみです。 ACTION:[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE:[6] 'SYSBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL][13] 'Not Available' 質問ですが、なぜこの監査ログのみ adump 以下の記録されるのでしょうか。
- ベストアンサー
- Oracle
- mamiko19870314
- 回答数2
- ORACLE 索引検索について
ORACLE初心者で索引について勉強しています。 そこでORACLEの索引(Bツリー)検索について2点程質問させていただきます。 (1)索引を用いるとI/O処理が少なくなりアクセスが高速になるということはわかったのですが、そのI/O処理とはプロセスとメモリ間のやりとりに関するI/O処理という認識で間違いないのでしょうか? (2)索引付きと索引なしのカラムを抽出条件にして検索した場合、まず索引付きのカラムから検索を行い、そのROWIDを元に索引なしのカラムのデータを取得して対象データかどうかの判断を行うのでしょうか?
- oracle 文字列 01:45 を時間に変換した
こんにちは。 現在 oracle11を使用しています。 作業時間 を 文字型で '01:45' として格納したデータを Date型の'1.75'というデータに変換したいのですが、どうしたらできるでしょうか。 ご教授ください。
- ベストアンサー
- Oracle
- ko_m_R2050
- 回答数1
- SQLコマンドの「TO_DATE」について
SQLコマンドで、下記を実行すると「2014/04/03」などが取得できると思ったのですが、 「14/04/03」で取得してしまいます。 (aaa_dateは、DATE型で、「2014/04/03」などが入ってます) select TO_DATE(aaa_date,'YYYY/MM/DD') from AAA_TBL YYYYをYYにして、下記を実行すると、なぜか、「2014/04/03」と正常に取得します。 select TO_DATE(aaa_date,'YY/MM/DD') from AAA_TBL 逆の気がするのですが、なぜでしょうか。
- SQLで複数列のデータを複数行にしたい
以下のようなテーブルがあるとします。 column1 a,b,c <- カンマの数は最大50 b,d c,x SQLを実行し以下のような結果を返したいです。 以下の3つのことをすればできそうなのですが複数列を複数行にする方法がわかりません。 1.strtokenで50カラムに分割(カンマ分割) 2. 50カラムを1カラムにする 3.DISTINCTで重複データの削除 結果 a b c d x カンマの数が50あるので、かなり長いSQLになるのですが SELECT文50個をUNIONしてやればできるかなとも考えているのですが 何か良い方法はないでしょうか。 よろしくお願いします。
- ベストアンサー
- Oracle
- poppo002544
- 回答数1
- Oracle: PACKAGE BODY の分割
業務用に10個以上作成したストアドプロシージャ/ファンクションをパッケージとしてまとめようとしています。保守性の観点から、PACKAGE BODY内の各ストアドを、以下のようなイメージで別々のファイルで管理したいと思っています。 が、PACKAGEとBODYの分割はできたものの、BODY内のストアドを別々にすると、エラーとなってしまいます。 そういうことはできないのでしょうか? [xxx_pkg.SQL] CREATE OR REPLACE PACKAGE xxx_pkg IS PROCEDURE procedure_a; PROCEDURE procedure_b; PROCEDURE procedure_c; END xxx_pkg; [xxx_pkg.procedure_a.SQL] PROCEDURE procedure_a IS -- aの処理 END procedure_a; [xxx_pkg.procedure_b.SQL] PROCEDURE procedure_b IS -- aの処理 END procedure_a; [xxx_pkg.procedure_c.SQL] PROCEDURE procedure_c IS -- aの処理 END procedure_c;