【解決済み】ORACLEデータのインポート、接続、その他の問題まとめ

目次

問題 1: ORA-31684: オブジェクト型 xxxx は既に存在します table_exists_action xxxxx

質問 2: ソース データベース expdp からデータをエクスポートし、それをターゲット データベース impdp にインポートするとエラーが報告される

質問 3 Oracle がエラー ORA-01653 を報告します: テーブル xx を 8192 まで拡張することはできません (テーブルスペース xx_data 内)

 質問 4: Oracle がエラー ORA-12516 TNS:listener could not find available handler with matching protocol stack を報告する

接続数の制限を変更する


 

 


問題 1 : ORA-31684: オブジェクト型 xxxx は既に存在します table_exists_action xxxxx

解決策: impdb をインポートするときに   パラメーターtable_exists_action=replace      を追加します。これは、テーブルが存在する場合に置き換えることを意味します。


質問 2 : ソース データベース expdp からデータをエクスポートし、それをターゲット データベース impdp にインポートするとエラーが報告される

ORA-02374: テーブル "xxxx"."xxxxxx" のロード中に変換エラーが発生しました
ORA-128da99: 列 xxxxxxx の値が大きすぎます (実際: 124、最大: 100)

 分析:

    ソース データベースの文字セット: zhsgbk16

    ターゲット データベースの文字セット: al32utf8

    zhsgbk16 と utf8 ではデータをエンコードした後の格納形式が異なり、中国語の場合、gbk は漢字を格納して 2 バイトを占有し、utf8 は漢字を格納して 3 バイトを占有します。

     例: 元の GBK 文字エンコード データベースの特定のテーブルでは、中国語フィールド: colum001 は varchar 型で、長さは 200 であり、このフィールドのほとんどの行の既存のデータ長は基本的に 180 バイトです。テーブルが UTF8 でエンコードされたデータベースにインポートされると、このフィールドに最初に格納された 180 バイトの漢字のほとんどは、通常格納するには約 180*3/2=270 バイトの文字長が必要であり、このとき、impdpインポート実行 運用中、テーブル構造は変わらず、つまり、元のフィールド定義 colum001 の長さは 200 のままであるため、インポートするとエラーが報告され、上記のエラー メッセージが表示されます。

解決:

1つ目: 再輸出、輸入

ソース ライブラリでエクスポート操作を実行する前に、qbjmes.project フィールドを 103 以上に変更してください。

その後、ターゲット ライブラリにインポートされても、エラーは報告されません。

2 番目の方法: エラー レポート テーブルのデータを消去し、関連するフィールドの長さを変更してから、このテーブルのデータのみを再インポートします。

truncate table V_PS_STAFFPOS_REPTO_PUB_MT;

alter table V_PS_STAFFPOS_REPTO_PUB_MT modify(POST_NAME VARCHAR2(60));

然后再重新导入(只导入数据)。

3番目の方法: ターゲット・データベースのキャラクタ・セットを変更したくない場合は、ソース・データベースのキャラクタ・セットを変更して(データベースのキャラクタ・セットを変更する操作はお薦めしません)、再実行します。エクスポート操作詳細な手順は次のとおりです。


SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT EXCLUSIVE;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE OPEN;
SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SQL>SHUTDOWN immediate;
SQL>startup;

質問 3 Oracle がエラー ORA-01653 を報告します: テーブル xx を 8192 まで拡張することはできません (テーブルスペース xx_data 内)

ORA-39171: 作业出现可恢复的等待。
ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展

 

テーブル スペースを確認すると、テーブル スペースのサイズが 32G に達しているが、テーブル スペースの作成時に無制限の拡張が設定されていること (impdb がデータをインポートするとき、ダンプ ファイルは 16G、初期スペースは 19G)、およびディスクこれは、表スペースを自動的に拡張できないことを示しています。

1 つのテーブルスペース データ ファイルの最大値は、
最大データ ブロック * DB_BLOCK_SIZEです。

Oracle の DB_BLOCK_SIZE を表示する

SQL> v$parameter where name ='db_block_size'; から値を選択します。

      結果: 8192

ローカル データベースのデータ ブロック サイズは 8K で、ローカル Oracle の 1 つのテーブル スペース データ ファイルの最大値は次のように計算され
ます

そのため、テーブルスペースの作成時に autoextend on maxsize unlimited が設定されていても、その最大スペースは 32G を超えません。

注:
表スペース データ ファイルの容量は、DB_BLOCK_SIZE の設定に関連しており、このパラメーターはデータベース インスタンスの作成時に指定されています。DB_BLOCK_SIZE パラメータは、4K、8K、16K、32K、64K などに設定できます。Oracle の物理ファイルでは、最大 4194304 個のデータ ブロックしか許可されません (このパラメータはオペレーティング システムによって決定され、通常はこの数値になるはずです)。 space データファイル 最大対応関係は 4194304×DB_BLOCK_SIZE/1024M で計算できます。
4k の最大テーブル スペースは 16384M です。

8K の最大テーブルスペース: 32768M

16k の最大テーブル スペース: 65536M

32K の最大テーブル スペース: 131072M

64k の最大テーブル スペースは 262144M です。

Oracle はデフォルトで 8K を割り当てますが、これは約 32768M のスペース サイズに相当します。テーブル スペースをさらに増やしたい場合は、alter tablespace name add datafile 'path/file_name' size 1024M; up でデータ ファイルを追加するだけです。

データブロックはオラクルにおける最小の空間割り当て単位で、ここに各種操作のデータが置かれ、オラクルがディスクから読み書きするのもブロックです。データベースを作成すると、db_block_size は変更できません。オラクルはブロック単位でデータを保存するため、どの記憶要素も最低1ブロックは占有するため、db_block_sizeを変更するとどうしても一部のブロックが正常に使用できなくなります。

実際、Unix ライクなオペレーティング システムでは、データベースの実行効率を確保するために、ファイル ブロックとオラクル ブロックの関係は非常に密接です (等しいことが推奨されます)。Windowsにはあまりこだわらないかもしれません。8k 以上のブロックを使用することをお勧めします.誰かがテストを行った.同じ構成で、8k ブロックは 4k ブロックよりも約 40% 高速であり、2k ブロックよりも 3 倍以上高速です.

解決:

2つの処理方法があります。 ①現在のテーブルスペースにデータファイルが1つしかない場合、データファイルのサイズを拡張できます(1つのデータファイルの最大サイズは32Gです。32Gを超える場合は、1つ追加する必要があります)以上のデータ ファイルを現在のテーブル スペースに追加し、メソッド); ② 現在のテーブル スペースにデータ ファイルを追加します。

現在のテーブルスペースに新しいデータ ファイルを追加する方法は次のとおりです。

コマンドラインで、oracle システム管理者ユーザーとして oracle にログインし、次の操作を実行します。

1) 方法 1: 段階的に。指定したテーブルスペースにデータファイルを追加(2ステップ)
① 指定したテーブルスペースにデータファイルを作成し、初期サイズを指定
ALTER TABLESPACE テーブルスペース名
ADD DATAFILE 'D:\Oracle\app\Administrator\oradata\orcl\ newデータファイル名.DBF'
SIZE 32M;

②データファイルの自動拡張をオンにし、各自動拡張のサイズを指定する

ALTER DATABASE DATAFILE 'D:\Oracle\app\Administrator\oradata\orcl\新しいデータ ファイル名.DBF' AUTOEXTEND ON NEXT 200M ;

2) 方法 2: 1 つの手順を実行します。指定した表領域のデータ ファイルを追加します(1 ステップ: 初期サイズを指定し、自動拡張をオンにし、各自動拡張のサイズを設定します)
ALTER TABLESPACE tablespace name ADD DATAFILE 'D:\app\Administrator\oradata\ORCL\DATAFILE\新しいデータ ファイル名.DBF' SIZE 10240M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED;

 質問 4: Oracle がエラー ORA-12516 TNS:listener could not find available handler with matching protocol stack を報告する

エラー シナリオ:通常、多数の人または多数のアプリケーション (Java アプリケーション、R アプリケーションなど) がデータベースに接続するため、接続 (セッション) の数が制限を超えます。

解決

ポジショニングの理由


-- 以sysdba身份登陆PL/SQL 
sqlplus / as sysdba;
-- 命令行下设置行大小,方便查看执行结果
setline 1000;

-- 查看当前连接进程数
SQL>select count(*) from v$process;
-- 查看连接数上限
SQL>select value from v$parameter where name = 'processes';
-- 查询processes数量
SQL> show parameter processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 3
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 2
processes integer 150
-- 查询sessions数量
SQL> show parameter sessions
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
sessions integer 170
shared_server_sessions integer
SQL>
  • 上記のデータベース パラメータをクエリした後、セッション数が十分ではなく、150 のみであることが判明したため、セッション数を増やします。
  • セッション接続の数が上記のプロセス数 150 またはセッション数 170 を超える限り、別のセッション プロセスは 12516 エラーを生成します。したがって、この値を変更できます。セッションとプロセスの関係は、次の関係に従って設定する必要があります。
    sessions=1.1*processes+5;   //これはセッション値とプロセス値の関係で、これに従うのが最善なので、プロセス数を 500 に設定する場合は、セッション数を 1.1 にする必要があります*500+5=555

接続数の制限を変更する

 -- 以sysdba身份登陆PL/SQL 
 -- 查询目前连接数
    show parameter processes;
 -- 修改processes
    alter system set processes=500 scope=spfile;
 -- 修改processes
    alter system set sessions=555 scope=spfile;
 -- 重启Oracle服务或重启Oracle服务器

 -- 然后reboot数据库,使其生效
     -- 关闭数据库
        shutdown immediate;
     -- 启动数据库
        startup

おすすめ

転載: blog.csdn.net/yy4545/article/details/108095186