土曜日, 9月 26, 2009
[ORACLE]ORA-01659: [数字]を超えるMINEXTENTSを表領域[表領域の名前]に割当てできません。
▼質問
テーブルを作成している途中で次のエラーが出るんだ。
「ORA-01659: [数字]を超えるMINEXTENTSを表領域[表領域の名前]に割当てできません。」
どうすれば解決できるか教えてくれ!!
▼回答
SQL*Plusから、下記のSQL文を実行し表領域(データファイル)を追加さればいいんだ!
「ALTER TABLESPACE [ターゲットにする表領域の名前] ADD DATAFILE
'[ファイルパス(例:C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.ORA)]'
SIZE [999M | 999K] AUTOEXTEND ON MAXSIZE UNLIMITE」
または、MINEXTENTS(エクステント数の最小値)、NEXT(増分値)またはPCTINCREASE(エクステント
サイズの増加率)の値を小さくして再実行する。
■参考サイト
データファイル管理の勘所
▼質問
データファイルの記憶域にある最大サイズの無制限ってどうやって指定するの?
指定しても値が選択されて32767MBが指定される。
どうして?か教えて!!
▼回答
まずは、32767MBの意味を教えよう。
db_block_size=8192の場合の上限になる。
db_block_sizeの上限値は、OSに依存するため、その値にはOSの最小ブロックサイズ(バイト単位)
の倍数(デバイス・レベルでの物理ブロック・サイズの倍数)で指定しなければならない。
Oracleデータベースリファレンスには、物理データベースの制限にdb_block_size * (2^22 - 1)が
上限と書かれている。1データ・ファイル当たりの最大数(データベース・ブロック)は、プラット
フォームによって異なるが、通常 2^22 - 1 ブロックとなっている。
なお、このサイズが大きければI/O効率(パフォーマンス)は向上するが、HDD使用効率は悪くなる。
無制限を選択すると自動的にdb_block_sizeから1データ・ファイル当たりの最大サイズが計算され
その値が最大サイズに表示される。db_block_sizeをデータベース時に変更できれば、1データ・
ファイル当たりの最大サイズを大きくすることができると思いやってみたが、駄目だった。
ブロック・サイズ(db_block_size)を2048にしたが無制限が選択されずに、8192が表示された。
次に、32768や16384を選択したら、データベースの作成と中でエラーになった。
結局、データ・ファイルを追加するしか方法はないようだ。
■参考サイト
データベース記憶域構造の管理
データベースの制限事項
Oracle基本設計
●データファイルのサイズ変更
例)'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF'を5MBに縮小
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' RESIZE 5M;
●データファイルの自動拡張
例)'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF'を1MB単位で10MBまでの範囲で自動拡張
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' AUTOEXTEND ON NEXT 1M MAXSIZE 10M;
●データファイルの場所を変更する
例)表領域のデータファイルを移動する場合
①表領域をオフラインにする
ALTER TABLESPACE [表領域の名前] OFFLINE;
②OSレベルでファイルをコピー
③定義の変更
ALTER DATABASE RENAME FILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' TO 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF';
④オンラインにする
ALTER TABLESPACE [表領域の名前] ONLINE;
テーブルを作成している途中で次のエラーが出るんだ。
「ORA-01659: [数字]を超えるMINEXTENTSを表領域[表領域の名前]に割当てできません。」
どうすれば解決できるか教えてくれ!!
▼回答
SQL*Plusから、下記のSQL文を実行し表領域(データファイル)を追加さればいいんだ!
「ALTER TABLESPACE [ターゲットにする表領域の名前] ADD DATAFILE
'[ファイルパス(例:C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.ORA)]'
SIZE [999M | 999K] AUTOEXTEND ON MAXSIZE UNLIMITE」
または、MINEXTENTS(エクステント数の最小値)、NEXT(増分値)またはPCTINCREASE(エクステント
サイズの増加率)の値を小さくして再実行する。
■参考サイト
データファイル管理の勘所
▼質問
データファイルの記憶域にある最大サイズの無制限ってどうやって指定するの?
指定しても値が選択されて32767MBが指定される。
どうして?か教えて!!
▼回答
まずは、32767MBの意味を教えよう。
db_block_size=8192の場合の上限になる。
db_block_sizeの上限値は、OSに依存するため、その値にはOSの最小ブロックサイズ(バイト単位)
の倍数(デバイス・レベルでの物理ブロック・サイズの倍数)で指定しなければならない。
Oracleデータベースリファレンスには、物理データベースの制限にdb_block_size * (2^22 - 1)が
上限と書かれている。1データ・ファイル当たりの最大数(データベース・ブロック)は、プラット
フォームによって異なるが、通常 2^22 - 1 ブロックとなっている。
なお、このサイズが大きければI/O効率(パフォーマンス)は向上するが、HDD使用効率は悪くなる。
無制限を選択すると自動的にdb_block_sizeから1データ・ファイル当たりの最大サイズが計算され
その値が最大サイズに表示される。db_block_sizeをデータベース時に変更できれば、1データ・
ファイル当たりの最大サイズを大きくすることができると思いやってみたが、駄目だった。
ブロック・サイズ(db_block_size)を2048にしたが無制限が選択されずに、8192が表示された。
次に、32768や16384を選択したら、データベースの作成と中でエラーになった。
結局、データ・ファイルを追加するしか方法はないようだ。
■参考サイト
データベース記憶域構造の管理
データベースの制限事項
Oracle基本設計
●データファイルのサイズ変更
例)'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF'を5MBに縮小
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' RESIZE 5M;
●データファイルの自動拡張
例)'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF'を1MB単位で10MBまでの範囲で自動拡張
ALTER DATABASE DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' AUTOEXTEND ON NEXT 1M MAXSIZE 10M;
●データファイルの場所を変更する
例)表領域のデータファイルを移動する場合
①表領域をオフラインにする
ALTER TABLESPACE [表領域の名前] OFFLINE;
②OSレベルでファイルをコピー
③定義の変更
ALTER DATABASE RENAME FILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF' TO 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ZZZZZ\ZZZZZ01.DBF';
④オンラインにする
ALTER TABLESPACE [表領域の名前] ONLINE;