Oracle 質問総合スレ13 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
◆My Oracle Support
ttp://support.oracle.com/ 7から使っている僕が一番Oracleを上手く使えるんだ...。
折角見つけたバッドノウハウはブログで書かないとダメなんだ...。 バージョンごとにいろいろ違うのにOracle 7から使っていると言ってるあとりがもうあれ。 Oracle7の知識のなんていまとなっては不要。昔のバージョンの知識を新しいバージョンにもあてはめたり、間違った知識で言われるのも迷惑なんだよな。 DEFERRED_SEGMENT_CREATION=TRUEでエクステントが作られていなくって
exp出来なかったというオチだなw それと勘違いされそうだったからテーブルにレコードは入ってるって書いたんだよ
あとその設定は元からfalseにしてあるよ はいはい、ブログが書けて良かったね( ´,_ゝ`)プッ いちいち否定するのも面倒だからブログに帰るわ
おまいらの知識はその程度と分かったし >>14
もう二度とこんな所来るんじゃねぇぞwww ブログ特定したら全然大した事じゃなかったてバレるから今頃((((;゚Д゚))))ガクガクブルブル GIインストールしたあと、クラスタ名を確認するのって、どーすりゃいいんだ? $GRID_HOME/bin/cemutlo -n でもイケる。
Usage: ./cemutlo.bin [-n] [-w]
where:
-n prints the cluster name
-w prints the clusterware version in the following format:
<major_version>:<minor_version>:<vendor_info> 適当にマテリアライズドビューログクリエイトしたらEXPでora-1455でしっぱいするんやがなんで?expdpならいく… ここのところOracle関係でワクワクするニュースが聞こえてこない。
うちの会社じゃOracleは今やリスク要因になってるよ。ライセンス体系に関して
バージョンアップやクラウド対応で顧客に迷惑を掛けるケースが増えてきた。 >>23
11g以降の通常業務でのexpはサポート外。 俺は開発ベンダだけど、通常の案件はOracleで提案はしない
Oracleを使うのは顧客から指定がある場合のみ
従って何か問題があった場合は、基本的に顧客の責任 質問させてください。
ASM上のファイルをPL/SQL(ファンクション)からファイルに対して存在確認やファイル名変更をしたいです。
ASM上のファイルをPL/SQL(ファンクション)からUTL_FILE.FRENAMEでファイル名変更などを行ってみたところエラーで出来ませんでした。知見のある方いわくASM上のファイルをUTL_FILE.FRENAMEなどで変更処理するのは無理なようですよ。と言われました。
本当に無理なのでしょうか?その場合、何か策はないでしょうか?
よろしくお願いします。 セキュリティを理由にOracle入れたがる奴に限って非推奨な構文使ってたり構成自体が古かったりガバガバなのはなんで? >>28
自分で面倒見るの辛くなって高機能DBMSなら楽できるだろうという思い込みじゃね >>29
ググッたけど結局できるのかがパッと判断できませんでした(`д´;)クアッ
引き続き調べますが、もうちょっとヒント頂けると助かります。 >>27
そもそもASM上のファイルをリネームするってどんな状況よ?
ACFSでも使っているのか?
素のASMならasmcmdからやる方が遥かに楽。 >>32
情報を足しますと、expdpで作られるダンプをasm上に置くことが決まってます。なぜasm上に置くかは正直わかってなく、環境側からの指定です。クラスタしてますがacfsを使っているのかはわかりません。要件の関係で存在確認やリネームが必要です。
unixサーバなのですが、シェルでやっちゃうしかないですかね〜って話になりつつありますが、出来るだけオラクルの機能でどうにかしたいです。 >>33
そもそもACFSでない素のasm上のファイルはリネーム効かないぞ?
単にaliasが代わるだけだ。
そんな使い勝手の悪いものの上に良くダンプファイル置く気になんかなるな。 >>34
コメントありがとうございます。
まじですか・・・オラクル詳しいであろう環境の人が決めたこともありそれがベターなんだろうと思っていましたが。。素人なりに調べ直してみますm(_ _)m >>35
素直にACFSもしくはNFSファイル上に置け。
そんなシステム要件、クソだ。 >>35
オラクル社の人間はASMを使わせたいからそういう展開になる。 >>36
NFSはセキュリティ要件的に微妙ってことで使用NGになり、ASMならOKって流れがあった記憶があります。ACFS調べてみます! >>38
ACFSが嫌ならDBFSだな。
PL/SQLとの親和性も高いぞ。 >>39
根本的な疑問なのですが、acfsやdbfsを使わないとasm上のファイルは操作できないものなのでしょうか?
asmはソフトなので、asmの管理配下はインターフェースがあるacfsやdbfsじゃないと操作できないということですか?
逆に言うとasmかdbfsを使うか、asmをやめるかのどちらしかないということなのでしょうか。 >>40
そもそもasmが特殊なrawデバイスみたいなもんだから、ファイルのリネームなどに対応していない。
削除や移動ならまだ何とかなるけどな。
acfsやdbfsはO/Sレベルでマウント出来るから、後は普通にO/Sコマンドが通る。 dbfs使ったことないけど、自身の中に自身のバックアップ置くって推奨されるやり方じゃない気がするね。 リネームは、dumpファイルを2世代持っておきたいためにexpdpして正常終了したらリネームして・・・みたいなことをやっています。教えて頂いた内容を候補にして、相談してみますm(_ _)
m
すみません、平行して別の質問させてください。バッチ処理の性能改善で特定のInsertとSelectをパラレル処理するように変更してみようと思い、まずはsqlplus上で試してみました。
1.alter session
2.select実行
3.SELECT * FROM v$pq_sesstat で1以上になっているか確認
→3.でQueryのところが1になっていたためパラレルで動いたぽい
1.alter session + ヒント句
2.insertやupdate実行
3.SELECT * FROM v$pq_sesstat で1以上になっているか確認
→3.でDMLのところが1以上にならなくて、パラレルで動けていないぽい
PARALLEL_MAX_SERVERSは1以上になっています。1.は調べた限りの数パターン試しました。なぜDMLの方は3.で1以上になってくれないのでしょうか? ちなみにパラレル化させた方が早くなるのかなと考えてるinsertは、values句を使った単純insert文です。 >>43
どうしても二世代をASM上でキープしたいのなら、別ディレクトリ切ってそっちにファイルを
移動とかだろうね。
パラレルDMLはトランザクションの最初でなおかつ唯一である必要がある。
つまり先にupdateなりしていたら、コミットしていなければ後続は全てシリアルになる。 >>42
そうだろうね。
後はテープなり何なりにダンプを落とすかだね。 >>45
ググって見直してみたら確かにそう書いてありました。何となくなるほどと思っても、Javaの実装にどう当てはめて考えれば良いか難しいです。。
JavaWebアプリ(springframework,mybatis使用)で何千万のinsertを送るのを早くしたいのですが、無理なのでしょうか?それともうまいこと実装できれば可能なのでしょうか。トランザクション管理はspringframeworkの@DBTransactionとConnection.commitでやってます。
>>46
今日相談した結果、セキュリティ要件の問題はあるかもしれないけどやっぱりNFSでやらせてもらえないか確認しようってことになりました。NFSでやることになると、apサーバのシェルからsqlplusでログイン後クライアント経由でファンクションを呼ぶことになります。 >>48
それは既にやってまして、mybatisのbatch insert(リストに貯めてflush呼ぶと一気に投げる)というのを使ってます!
正直それを使ってると、どう投げていてどういう理由で早いのかは理解できてないのですが。。(調べたけど見つからず) >>47
DBA的には嫌だけど、12cだったらAPPENDヒント使って、常に使用ブロックの上側に
書き込ませる様にすれば、言ってみればダイレクトインサートを使った時と同じ動きと
なるから、パフォーマンスが改善する事もあるみたいだな。 Webアプリで何千万ものインサートって
なかなかアクロバティックなシステムだね 何千万のインサートなら、バッチ処理として、sqlloaderでダイレクトパスインサートするのが一番早い気がする >>51
しかも出来上がってるものを性能改善しろだなんて、えーって感じです笑
>>52
sqlloaderも検討しました。それをやるやめにはまず完成されたinsert文をcsv出力する必要があると思っているのですが合ってますでしょうか?
DBアクセスはmybatisにお任せしていて、完成されたinsert文をcsv出力できないのではないかと思ってます。(調べてもログに出せるくらいのことしか見つからず)
csv出力できたとして、values句を使ったinsert文なのでcsvに書かれているinsert文にヒント句付ければ良いのでしょうか。。でもヒント句が出てくるとなるとパラレル処理の話が出てくる、、? いや、insert文じゃなくて普通のcsvファイルが必要。
csvのどの項目がどの列かってのは、sqlloaderの制御ファイルで指定する。ダイレクトパスとかの指定は、sqlloaderにオプションで渡すか、制御ファイルに記載する。 >>54
一度だけ試したことはあったのですが、、全然違いましたね笑
やるとしたらinsertしたいテーブル分、csvファイルと制御ファイルのセットが必要でしょうか。。?
昨日一昨日ご相談した、asm/acfsについては環境の人に聞くとNFSにさせてもらうしかなさそうだねと言われました。
acfsがベターなのですが、今は暗号キーを置く場所として存在してるだけでapが何ギガものファイルを置く想定などないため、大きめの再構築が必要になるし無理!とのことでした。
ちなみにasmにはdb構成ファイルやdbバックアップ用?のダンプファイルなどを置くので領域はたくさんあるとのことでしたが、dba側の大事なファイルが入ってるasmをapが使うのは違うかねぇという話でした。 >>51
ちなみに、、画面のあるwebアプリと同じようにspringframework-javaで作っているので話をわかりやすくするためにwebアプリといいましたが、実際はバッチです。apサーバとは異なるバッチサーバで動作してます。シェルでもありません。
>>45
サーバにsqlplusでログイン
alter session
update文
select from v$pq_sesstat
だけやってもダメなのですが、なにがダメなのかわかりません。余計な更新行に対するselectなどはしてません。
教えて頂けませんかm(_ _)m パラレルになるかどうかは
まずはEXPLAINで確認したら? >>57
まだお試しなので1行でやってます!
>>58
実行計画とったところno pdml because no partitionみたいなエラーが出てました!実行計画はこういうのも教えてくれるんですね☆
このテスト環境は無理なんだと判断し、本番環境で試したらpdmlの結果が1になりました\(^^)/ありがとうございます!明日処理を組み込んで次の段階を試してみます! >>59
>まだお試しなので1行でやってます!
おいーーーー!!! >>59
一行をどうやってパラレル処理するんだよ? >>60
え(’o’)
>>61
えーーーーーーー!Σ(;゚д゚ノ)ノ─ッ!!
えーと、、ひとつで意味あるのか!?とは思ってはいたんですけど、今はpdml結果が1以上になるかをまず確認したかったのでひとつでやってました!
昨日ひとつでやってやっと1になったので、今日まず100くらいのデータからやってみようと思ってます!sqlplusからと実際Javaプログラムに組み込むのと両方試す予定です。
ちなみにですが、
1.sqlplusでログイン
2.alter session
3.insertやupdate実行
4.SELECT * FROM v$pq_sesstat でpmdlがいくつになっているか確認
この3.のときは、例えばinsert into - values(...);を100行コンソールに貼り付けてドンドン送る。というやり方で問題ないでしょうか?
それでも良いけど100じゃ少ないよ、insert allやこういうやり方の方が一気に送れて効果をみやすいよ、などあればコメントお願いしますm(_ _)m なんかそれだとjava的には一行ずつ渡してる感じじゃね?
そもそもinsertのパラレル化処理なんて、別テーブルから一気に読み込んだりするぐらいしないと効果は体感出来ないと思うぞ? >>63
Java側でmybatisのバルクインサートを使用しており、以下の要領でSQLは投げているようです。(一つ一つ投げているわけではないと思ってます)
insert into person
(id, name, address)
values
(1, 'John', 'Kyoto'),
(2, 'Mike', 'Tokyo');
昨日pdml結果が1になったと言ったのですが、その時はupdateで1でした。今日本来やりたいinsertで試したら1以上になってくれずオール0でした。
実行計画をとると以下の内容ですが、どうすればinsert /*+ APPEND_VALUES */ into values ...がpdmlになってくれるのかわかりません。。
「Degree of Parallelism is 1 because of session」「PDML disabled because
insert values was used」
Degreeって自動パラレル設定のことぽくてあまり関係なさそうだし、もう自分の中で打つ手がない状態です・・・。自動パラレル設定を検討した方が良いということなのでしょうか。 >>614
insert valuesは一行インサートだからパラレル化できないよっていってるんじゃないの?
insert selectじゃないとパラレル化できないよってことね。 >>65
11gからvalues句のinsertもパラレル対応されて、append_valueヒント句を使えるようなこと書いてあるんですよね(><) 何か条件を満たしていないんでしょか。。
このままだとパラレル化は一旦諦めることになりそうです。
次はinsertをsqlloaderでやる検討になるかな。。 今更かもですがパラレル処理って、既に登録されているデータにアクセスするアクセス方法を効率化させること、が主にやりたいことなのでしょうか??
だから、insert〜selectだったりただのselectだったりupdate〜whereだと、パラレル処理で動くが、insert〜valuesだと検索が必要ないのでパラレルにならない。
ということなのでしょうか?
それがそうだとしたら、なぜ11gからはinsert〜valuesも対応しはじめたのか。。これが出来るとしても検索ありのものとは、違う理屈で早くなったということなのかなと思いはじめました。 メモリに一時テーブル作ってからINSERT SELECTしてみればいいんじゃないの
あとテーブルのパーティショニングはちゃんとやってるのかな? >>68
◇ケース1:pdml結果が0でダメ(本来やりたいのはこちらのins〜values)
ALT SESSI FORCE PARALLEL DML PARALLEL 3
ins /APPEND_VALUES / into tablename (culuma,culumb) value ('aaa','bbb')
※上記のようなinsを1000行一気に貼り付けて流した ※上記ins文のexpl plan結果は報告済み ※ヒント句なしも試した
SEL STATISTIC,LAST_QUERY,SESSION_TOTAL FRO vpq_sesstat
◇ケース2:pdml結果が1(insertができないからupdateでお試し)
ALT SESSIO FORCE PARALLEL DML PARALLEL 3
upd tablename set culuma 'aaa' where culumb 'bbb'
SEL STATISTIC,LAST_QUERY,SESSION_TOTAL FRO vpq_sesstat 恐らくセキュリティ対策でSQLは書き込めませんでした。色々文字を削ってやっと書き込めましたので、ご了承ください。重要な所がわからなくなったいたら聞いて頂けたらと思います。
>>69
パーティションがどうなってるかなどはわかってないです。。複数パーティションに及ぶような更新にならないとパラレルにならないっていう話でしょうか?
正直そこそこ時間かけたのに出来ていないので、この先に必ずinsert〜valuesをパラレル化出来る保証があるのであれば良いのですが、、もう諦めムードになってきたのが正直なところです。
私が67で書いたことについてコメント頂けると助かりますm(_ _)m >>70
そのソースじゃなくて、11gで対応されたという情報のソース >>73
いやそれ、パラレルじゃなくて、ダイレクトパスやん。。 >>74
すみません、おっしゃってることがわかりますん。。
パラレルとダイレクトパスインサートはニアイコールなのかなくらいに思ってるんですけど、どう違うんでしょうか??
ということは、select〜values文のパラレル処理はできないということですか? とにかくわたしは大量のinsert〜values文を早く処理させたいです。 パーティションの話を出したのはチューニングするなら
高い効果が見込めるところから検討すべきって話
もちろんいろんな事情で出来ないとかやっても効果が限定的になりそうって場合もあるけどね
チューニングに必要な情報をまず集めて
最初にいろんな選択肢を出した上でどれから試すか決めないと
パーティションがどうなってるかはわからないけどとりあえずクエリだけ並列化してみるってのは
すぐ試せるだけの力があればいいけど、そうじゃないならアプローチとして微妙
まあ、がんばって みんな丁寧に相手し過ぎ。
素人過ぎて話にならんレベルだろ。 皆さまお付き合いありがとうございます。昨日は投げやりなコメントをしてしまいました。言われていることがわかってきたかもしれません。わたしの理解を書かせて頂きます_(._.)_
パラレル処理「alter session後のSQL文が並列にデータにアクセスして処理される」、ダイレクトパスインサート「データベースバッファを経由せずデータファイルへ直接データを登録すること」
わたしがやりたいことは「大量のinsert〜values文を2倍程度早く処理させたい」ので、76さんのサイトに書いてあるように「パラレル処理はむり」で、「insert /append_values/の書き方でダイレクトパスインサートはできる」と理解しました。
>>77
パーティション構成次第でパラレルできるできないという話かと思ってましたが、別の話でパーティション構成を変えることで改善されることもあるという話だったんですね。
わたしはJavaAP開発者なのでインフラ側までは口出すことができず、SQL改修などでできる性能改善をやろうとしてます。1table1000万recordをselectしたりするのでパラレルクエリもいつかは実装できたらなとは思ってます。 >>80
だからsqlldrでやれや。
ダイレクトもパラレルも比較的簡単にできるから。 >>81
はい!sqlloaderを検討します。月曜日からsqlloaderを試せるように下調べしてみます。 >>81
わざわざWebアプリでやってるんだからsqlldrは要件に合わんのだろ
やるにしてもExternal Tableだけど、そういうLOAD系が使える話じゃないんじゃね? マジカ。。
それでいいならINSERTとか最初から選択しなくてもよかったんじゃ。。。 シフトザオラクルなんかソースとして持ち出すとか、よくわからないけど日々ググってコピーして仕事してます臭がくっさいくっさい。 sqlloaderは難しいですかね・・・。もし実現できるとしても結構な改修量になる上に懸念点も出てくる気がしてるので、避けたい選択肢ではあります。
sqlloaderが難しいとなると、insert文に/append_value/を付加したダイレクトパスインサートにできるくらいでしょうか
>>84
すみません、どこの話に対してのコメントですか?
>>85
否定はしません。。皆さんは公式マニュアルなどを見ながらって感じですか? >>86
つっこむデータをcsv等のファイルに落とせるんだったら、後は簡単だろ。
改修する前に、早くなるかどうかの検証するくらいならすぐできるだろ >>87
だよな。
こんな簡単なこともできないのか、とただ呆れるばかりだよ。
改修も簡単。 >>88
それな!
読まないでネットで質問したり、誰が書いたのかわからんホームページの落書きをよく仕事で使おうとするわ。
客や上司になんて説明すんだろね。 皆さまありがとうございます。ではsqlloaderを検討してみようと思います。
エラーハンドリングがどうなるのかは気になるところではありますが、まずJavaからsqlloaderを呼び出して正常処理させることを目標に進めてみようと思います。 みんな最初は素人なんだからもう少し優しくしてやれよ
Orableはマニュアルが間違ってること多々あるんだし
試してみないことには分からないこともよくある 間違ってることが多々あるのと、見ないのとではかなり違う >>92
勘違いにも気づかせてもらい、十分優しく対応して頂けていると思っていて感謝してます_(._.)_
AP開発側にこのような経験ある人はなかなかいなかったり、インフラ側に聞いてもAP実装レベルの話は知らん、という感じだったりで身近に聞ける人がいないのでとても助かってます。
>>93
パット見読みやすい方に逃げている?状態なので、少しずつマニュアルとお友達になっていけるようにします! Oracle用語で Google 検索したときに、公式マニュアルの結果が上位に来ないことも問題。
この辺はOracleの努力が足りないと言わざるを得ない。 バックアップ・リカバリとかの運用設計はインフラ担当がやるのが普通かもしれんが
テーブルをどういう風にパーティショニングすべきかみたいなDB設計は
アプリケーション開発者がやるのが普通だと思ってるんだがそうでもないのかな? >>95
そもそもOTNの所から探せってスタンスだしね 今回はうちの関係者がインフラにいてやりとりできますが、AP開発側とインフラは完全に分かれていてどんな人がインフラやっているかわからなかった時もざらにあります。
現状は・・・インフラ側:こっちが考えた環境設計に文句あんの?AP側:AP作るだけで精一杯だし、APはデプロイとDBにデータ突っ込むだけで良いでしょ?が多いかなと思っていますが、皆さまのところはいかがでしょう?笑
でもOracleは自由度が高いからAPももっと理解して使ってよっていう考えが出てくるのかなとも思ってます。Oracle現場は今回はじめてなもので(^^; SQLLoaderで主キー違いで並列実行すればいいのに。外部表でファイルのめめまテーブルのように見える機能もある。 アプリのことをAPと略す会社からは
プログラマーのことをPGと略す会社と同じブラック臭がする
(あくまで個人の感想です) ■ このスレッドは過去ログ倉庫に格納されています