Index
For example: ORA-01659
#> oerr ora 1659
For example: IMP-00032
#> oerr imp 32
建立 Tablespace,將 BLOCKSIZE=16M 時,出現這個錯誤。
Ans: 解決方法是修改系統參數 db_16k_cache_size,DB 不用重啟
SQL> alter system set db_16k_cache_size=16M scope=both;
Ans:
檢查是否使用 ASMM
SQL> show parameters statistics_level VALUE = TYPICAL SQL> show parameters sga_target VALUE > 0 SQL> show parameters shared_pool_siz VALUE = 0 SQL> show parameters db_cache_size VALUE = 0
調整 DB 系統參數
--Backup old spfile first show parameters spfile CREATE pfile='/path/to/pfile.tmp' FROM spfile='/path/to/spfile.ora' CREATE spfile='/path/to/spfile.ora.20140313' FROM pfile='/path/to/pfile.tmp' alter system set sga_max_size=4096M scope=spfile; alter system set sga_target=4096M scope=spfile; shutdown immediate; startup;
ORA-39082: Object type VIEW:"WINSTDB"."V_PROCDEF_FDS_700464" created with compilation warnings
Ans: 匯入資料庫時,如果 source-owner 與 target-owner 不一樣,就可能這個問題,即使匯入指令時使用了 remap,但遇到某些 VIEW 或其他物件,原有 source-owner 識別並不會正確的 remap,所以針對這些物件錯誤,必須手動新增它們,例如重新建立 VIEW 等等
Solution: 由於匯入 log 出現的都是 VIEW 物件的錯誤,所以從 GUI 檢視 VIEW,發現有許多個 VIEW 的狀態出現 invalid,再次檢視這些 VIEW 的內容,發現 OWNER 還是 source 端的,所以執行以下 SQL 修正這些錯誤的 VIEW:
修正 VIEW:
SQL> create or replace view WINSTDB.V_PROCDEF_FDS_700397 as SELECT "SYSID","VARIABLENAME","DEFTABLE","DEFFIELD","COLLAPSABLE" FROM ( SELECT 'MAT03__FDS' AS SYSID FROM DUAL ) IDT, ( SELECT * FROM WINSTDB.PROCDEF_FDS_700397 WHERE VARIABLENAME NOT IN ('Step', 'StepLabel', 'Message') ) VART; SQL> alter view WINSTDB.V_PROCDEF_FDS_700397 compile;
檢查是否有物件的 status 是呈現 INVALID:
SQL> select OWNER,OBJECT_NAME,OBJECT_TYPE,STATUS from all_objects where status='INVALID';
更多物件的編譯指令:
SQL> ALTER PACKAGE <SchemaName>.<PackageName> COMPILE; SQL> ALTER PACKAGE <SchemaName>.<PackageName> COMPILE BODY; SQL> ALTER PROCEDURE my_procedure COMPILE; SQL> ALTER FUNCTION my_function COMPILE; SQL> ALTER TRIGGER my_trigger COMPILE; SQL> ALTER VIEW my_view COMPILE;
Ans: 當執行到這個步驟時,整個系統出現 hang 問題
ORA-39083: Object type INDEX_STATISTICS failed to create with error
Solution:
方法一:impdp 加上 EXCLUDE=statistics
$ impdp system SCHEMAS=<source-owner> REMAP_SCHEMA=<source-owner>:<target-owner> table_exists_action=replace DIRECTORY=dmp_dir DUMPFILE=expdp_SOURCE_OWNER.dmp LOGFILE=impdp_TARGET_OWNER.log EXCLUDE=statistics $ sqlplus / as sysdba SQL> exec dbms_stats.gather_schema_stats('<target-owner>');
Ans: 在 OEM UI(Java)操作下無法刪除 datafile,但可以用指令方式來作
SQL> alter tablespace <tablespace-name> drop datafile '/opt/oracle/oradata/win/STDB03.dbf';
Ans: 解決步驟如下:
如果連 SQL/PLUS 都無法有效被執行時,如何能強制關閉資料庫
$sqlplus -prelim "/ as sysdba" SQL> shutdown abort
移除 User 所屬的物件
set heading off set pages 0 set feedback off set echo off spool ./drop_MYUSER.sql select 'drop table MYUSER.'||table_name||';' from dba_tables where owner='MYUSER'; spool off
移除 User
drop user USER CASCADE;
Ans: Add a option buffer=1000000 in the import command
#> imp system/oracle buffer=1000000 .....
If it's still not working, try to find out the proper value of the SQL_LENGTH with the following command:
In the source DB you need to run
SQL> select dbms_lob.getlength (dbms_metadata.get_ddl('TABLE','<table-name>','<owner-name>')) "SQL_LENGTH" from dual; SQL_LENGTH ---------- 71203
NOTE: the table name can be one of the tables failed on import.
Ans: Solution