oracle編譯無效對象腳本
1. oracle 編譯無效的對象 sqlserver 沒有
oracle 和sqlserver的sql語句是不能通用的
2. 如何重編譯ORACLE資料庫的無效對象
如果無效對象的數量很少,那麼你可以逐個編譯這些對象.
ALTER PACKAGE my_package COMPILE;
ALTER PACKAGE my_package COMPILE BODY;
ALTER PROCEDURE my_procere COMPILE;
ALTER FUNCTION my_function COMPILE;
ALTER TRIGGER my_trigger COMPILE;
ALTER VIEW my_view COMPILE;
3. 如何重編譯ORACLE資料庫的無效對象
一些ORACLE中的進程被殺掉後,狀態被置為"killed",但是鎖定的資源很長時間不釋放,有時實在沒法,只好重啟資料庫。現在提供一種方法解決這種問題,那就是在ORACLE中殺不掉的,在OS一級再殺。1.下面的語句用來查詢哪些對象被鎖:selectobject_name,machine,s.sid,s.serial#fromv$locked_objectl,dba_objectso,v$sessionswherel.object_id=o.object_idandl.session_id=s.sid;2.下面的語句用來殺死一個進程:altersystemkillsession'24,111';(其中24,111分別是上面查詢出的sid,serial#)【注】以上兩步,可以通過Oracle的管理控制台來執行。3.如果利用上面的命令殺死一個進程後,進程狀態被置為"killed",但是鎖定的資源很長時間沒有被釋放,那麼可以在os一級再殺死相應的進程(線程),首先執行下面的語句獲得進程(線程)號:selectspid,osuser,s.programfromv$sessions,v$processpwheres.paddr=p.addrands.sid=24(24是上面的sid)4.在OS上殺死這個進程(線程):1)在unix上,用root身份執行命令:#kill-912345(即第3步查詢出的spid)2)在windows(unix也適用)用orakill殺死線程,orakill是oracle提供的一個可執行命令,語法為:orakillsidthread其中:sid:表示要殺死的進程屬於的實例名thread:是要殺掉的線程號,即第3步查詢出的spid。例:c:>orakillorcl12345
4. oracle存儲過程對象無效
以下逐行寫,不要一寫復制進去
begin
demo1;
end;
/
第四行的反斜杠不能省略
5. EXP-00056: 遇到 ORACLE 錯誤 932 ORA-00932: 數據類型不一致: 應為 BLOB, 但卻獲得 CHAR 導出失敗
是個bug,metalink解釋如下
Full Export From 10.2.0.1 Aborts With EXP-56 ORA-932 (Inconsistent Datatypes) EXP-0 [ID 339938.1] Modified 30-MAR-2009 Type PROBLEM Status PUBLISHED In this Document
Symptoms
Cause
Solution
References
Applies to:Oracle Server - Enterprise Edition - Version: 10.1.0.2 to 10.2.0.3
Oracle Server - Personal Edition - Version: 10.1.0.2 to 10.2.0.3
Oracle Server - Standard Edition - Version: 10.1.0.2 to 10.2.0.3
This problem can occur on any platform.
SymptomsA full database export from a Oracle10g database aborts with:...
. exporting cluster definitions
EXP-00056: ORACLE error 932 encountered
ORA-00932: inconsistent datatypes: expected BLOB, CLOB got CHAR
EXP-00056: ORACLE error 932 encountered
ORA-00932: inconsistent datatypes: expected BLOB, CLOB got CHAR
EXP-00000: Export terminated unsuccessfully
EXP-00000: Export terminated unsuccessfully
If export was started with SYS schema, a table level export may also fail with:...
Current user changed to TEST
. . exporting table DOC_ARCHIVE 16 rows exported
Current user changed to SYS
EXP-00011: SYS.; does not exist
Export terminated successfully with warnings.CauseOne possible cause (note there might be others):Script $ORACLE_HOME/rdbms/admin/catmeta.sql has been run recently.There are several invalid SYS.KU$_% views in the dictionary:-- invalid objects:
SET lines 120 pages 2000
COL status FOR a9
COL object_type FOR a20;
COL owner.object FOR a50
SELECT status, object_id, object_type, owner||'.'||object_name "OWNER.OBJECT"
FROM dba_objects
WHERE status != 'VALID' AND object_name NOT LIKE 'BIN$%'
ORDER BY 4,2;
STATUS OBJECT_ID OBJECT_TYPE OWNER.OBJECT
--------- ---------- --------------- --------------------------------
INVALID 7105 PACKAGE BODY SYS.DBMS_METADATA
INVALID 6683 VIEW SYS.KU$_10_1_COMMENT_VIEW
INVALID 6788 VIEW SYS.KU$_10_1_IND_STATS_VIEW
INVALID 6778 VIEW SYS.KU$_10_1_PIND_STATS_VIEW
INVALID 6752 VIEW SYS.KU$_10_1_PTAB_STATS_VIEW
INVALID 6770 VIEW SYS.KU$_10_1_SPIND_STATS_VIEW
INVALID 6748 VIEW SYS.KU$_10_1_TAB_ONLY_STATS_VIEW
... (etc)
A query in SQL*Plus on sys.ku$_xmlschema_view also fails with ORA-932:SET lines 200 pages 2000
COL url FOR a60 WRA
SELECT url, local, stripped_val
FROM sys.ku$_xmlschema_view;
ORA-00932: inconsistent datatypes: expected BLOB, CLOB got CHARSolutionFor reasons having to do with compatibility, the XDB objects cannot be created by the catproc.sql script. The script catproc.sql therefore calls the catmeta.sql script, which contains fake object views for XDB objects.
The real object views are defined in the catmetx.sql script (this script is invoked by catxdbv.sql which is invoked by catqm.sql).Solution #1
Run following scripts while connected as SYS user:> sqlplus /nolog
SQL> connect / as sysdba
SQL> @?/rdbms/admin/catmetx.sql
SQL> @?/rdbms/admin/utlrp.sql
SQL> exit
Afterwards, re-run the export.or:Solution #2
Run the export with the Export DataPump client. E.g.:> expdp system/manager directory=my_dir \
mpfile=expdp_full.dmp logfile=expdp_full.log full=y
6. 如何升級oracle版本
Oracle資料庫升級也並非簡單的事,這篇文章對Oracle那點事做了較詳細的介紹:Oracle資料庫升級或數據遷移方法研究
我還屬於Oracle的菜鳥,就不獻丑介紹了。
下面我就簡單總結下,Oracle同版本升級的經歷:
升級資料庫:
1. 先檢查資料庫當前版本:SELECT * FROM v$version;
2. 使用RMAN或exp 進行全庫備份
【這一步非常非常重要,因升級到數據部分時,虛擬機沒空間了,導致VM崩潰,升級失敗.orcl庫也掛了,不得不從另一台Oracle上創建了一個Orcl,然後,冷備遷移過來,才得以重新升級。】
如:RMAN全備
export ORACLE_SID=orcl
rman target /
RMAN>backup full database plus archivelog //全備資料庫,並且包括ArchiveLog。
3. 最後按下面步驟進行升級
<1> 先知道Oracle 7個更新文件的作用:
第一 和 二個包表示database , 如果升級資料庫,只需要這2個文件即可。
第三個包表示grid, 用來升級RAC 的CRS。如果升級RAC 要先用這個文件。
第四個表示客戶端,
第五個表示gateways,
第六個表示 examples, 這個是我們的示例文件安裝包。
<2> 升級Oracle資料庫
首先將第一和二個zip壓縮包上傳,並在同一個目錄下解壓,因為,它兩的目錄結構基本一致,並且這兩壓縮包的內容需要合並後才能,執行runInstaller文件。所有要在同一個目錄下解壓,這樣會直接合並。
<3> 運行runInstaller,若沒有圖像界面會可能就需要有應答文件了,這個就需要再查了,
我測試時,有圖形界面,所以直接用圖形界面來升級:
需要注意幾個地方:
A. 這是第一個地方,這里需要點,「Skip software updates"跳到軟體更新
B.這里是選項安裝新Oracle軟體的位置,這里不能寫舊的位置。
另注: 磁碟空間一定要5~10G, Oracle11.2.0.1升級到11.2.0.3需要4.1G。
C. 第三點:需要注意: /etc/oratab這個文件。
因為,更新到最後是更新資料庫,更新資料庫時,必須要有一個資料庫是運行的.才能執行,並且更新資料庫時,它是通過oratab文件來讓你選擇通過那個運行的資料庫來嘗試更新資料庫。
4. 資料庫更新完後,需要做以下事情:
首先,升級完成後,需要將Oracle必須的環境變數修改為升級後的Oracle軟體路徑。
需要修改: ORACLE_HOME.
如我的環境:
Oracle11.2.0.1時:
ORACLE_BASE=/home/oracle/ora
ORACLE_HOME=$ORACLE_BASE/proct/11g/db_1
升級後,Oracle版本為:11.2.0.3,新的家目錄為:
Oracle11.2.0.3: ORACLE_HOME=$ORACLE_BASE/proct/11.2.0.3/db_1
<1> 先執行這個文件,用sysdba的許可權:
SQL> SPOOL update.info
SQL> $ORACLE_HOME/rdbms/admin/utlu112i.sql
SQL> SPOOL OFF
查看日誌是否有錯誤。
<2> 關閉資料庫,並更新啟動。
SQL> shutdown immediate
SQL> startup upgrade
SQL> select * from v$version; #查看Oracle的版本。
SQL> select status from v$instance;
STATUS
------------
OPEN MIGRATE
#下面開始執行升級腳本。
SQL> SPOOL update-info.log
SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql
#下面是查看升級結果的; 這個不是很確定,因為參考博客的環境是,
# 是9i 升 10g
#SQL> @$ORACLE_HOME/rdbms/admin/utlu102s.sql
SQL> SPOOL OFF
完成後,需要查看升級日誌,是否有保錯,若有,則重新執行升級SQL腳本。
#升級完成後,需要重啟DB.
SQL> shutdown immediate
SQL> startup
#下面是執行重新編譯無效對象
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
#查看是否還存在無效對象,若為0,則表示升級完成。否則重新執行編譯。
SQL> SELECT count(*) FROM dba_objects WHERE status='INVALID';
SQL> select name from v$database; #確認資料庫的SID是否正確。
SQL> show user; #確認當前是否為sys用戶。
SQL> select tablespace_name, bytes from dba_data_files; #確認表空間大小是否正確.
#下面這個步驟網文中沒有,這是尚觀視頻中提到的,作用不明.
#SQL> @$ORACLE_HOME/rdbms/admin/catalog.sql
#最後,重啟資料庫沒有問題就是升級成功了。
SQL> select status from v$instance;
STATUS
------------
OPEN #注意,成功打開資料庫後,這里將是OPEN,而非OPEN MIGRATE
7. oracle 存儲過程無法編譯,刪除,一旦執行該操作PLSQL就會出現未響應
存在無效對象,用plsql菜單中的工具先「編譯無效對象」
8. Oracle 定義存儲過程 不能執行,處於無效狀態。
無效狀態有兩種可能,一種是你的存儲過程編輯沒有成功,創建了,但裡面有語法錯誤。
還有一種是存儲過程使用的表有結構上的改變,需要重新編譯一下。
你重新編譯一下,如果不成功,就是有語法問題,你需要修改存儲過程。