1. 程式人生 > >【ORA】一些oracle-ora等錯誤記錄

【ORA】一些oracle-ora等錯誤記錄

1、ORA-12560: TNS: 協議介面卡錯誤 場景:在cmd視窗輸入:sqlplus "/as sysdba"想開啟資料庫時報的錯; 原因:沒有啟動Oracle伺服器 解決:WIN+R,跳出執行視窗,輸入"services.msc",開啟服務視窗;找到OracleServiceORACLE服務,檢視是否為啟動,右鍵啟動即可。 原因有三個 1.監聽服務沒有起起來。windows平臺個一如下操作:開始---程式---管理工具---服務,開啟服務面板, 啟動oraclehome92TNSlistener服務;
 2.database instance沒有起起來。windows平臺如下操作:開始---程式---管理工具---服務,開啟服務 面板,啟動oracleserviceXXXX,XXXX就是你的database SID;
 3.登錄檔問題。regedit,然後進入HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0將該環境變數ORACLE_SI D設定為XXXX,XXXX就是你的database SID.或者右幾我的電腦,屬性--高階--環境變數---系統變數--新建 ,變數名=oracle_sid,變數值=XXXX,XXXX就是你的database SID.或者進入sqlplus前,在command line下 輸set oracle_sid=XXXX,XXXX就是你的database SID。
2、ORA-12541
:TNS:no listener
場景:用pl/sql developer客戶端連線資料庫; 原因: 監聽器沒有啟動; 解決:開啟服務,啟動 OracleOraDB12Home1TNSListener
3、ORA-28547:connection to server failed,probable Oracle Net admin error 場景:將監聽器配置檔案: listener.ora中的
SID_NAME  更改後導致的; 原因:多數是因為navicat本地的OCI版本與Oracle伺服器器不符造成的; 解決:將SID_NAME修改為原來的名稱。
4、ORA-01438 因為插入的數值大於所在的列的最大允許精度。
5、ORA-12899 字元值大於此列指定的允許精度

6、ORA-00942:表或檢視不存在 表或試圖不存在
7、ORA-01400: 無法將 NULL 插入 ("SCOTT"."ITEMS"."ITEMNAME")
因向表中插入資料時,主鍵/約束的列為空。
8、ORA-00001: 違反唯一約束條件 (SCOTT.PK_ITEMS) 因想表中插入資料時,某列設定了唯一約束,插入的值,表中已經存在了。
9、ORA-01017: 使用者名稱/口令無效; 登入被拒絕 有可能使用者名稱或者密碼錯誤
10、ORA-01507 有可能是關係資料庫後,啟動的時候沒有載入資料庫,如:startup nomount就是啟動例項不載入資料庫的
11、ORA-01034: ORACLE not available 資料庫處於關閉狀態。
12、ORA-01045: user MENG lacks CREATE SESSION privilege; logon denied 該使用者沒有連線到資料庫的許可權,解決:grant connect, resource to 使用者名稱;
13、ORA-28000: the account is locked 賬戶被鎖定; 使用命令解鎖使用者。命令為:alter user username account unlock; 重置使用者密碼。命令為:alter user username identified by password;其中username為使用者名稱,password為新密碼。
14、ORA-00904: "EMP": 識別符號無效 答: ①資料庫中引用到的列和自己SQL中書寫的列名是否一致;        ②對於某些工具生成的SQL,可能導致列名和期望不符的情況,比如cmd使用雙引號會報錯,使用單引號'';
15、ORA-00936: 缺失表示式 答:一般是關鍵字的問題。 如:select id,name , from test_index;        問題是多了一個逗號導致的。
16、ORA-01109 資料庫未開啟(先試一下紅色字型的命令) 答:造成上述問題的原因是誤把'F:\ORADB.DEF'這個資料檔案刪掉了,這種刪法是不正常的,如果刪掉了使用者及表空間,然後再把資料檔案刪除應該是沒問題的,但這次只是把資料檔案刪掉了,使用者及表空間還在。
解決方法:
1) MOUNT資料庫:
STARTUP MOUNT ;
2) OFFLINE DROP資料檔案:
ALTER DATABASE DATAFILE '<full_path_file_name>' OFFLINE DROP;
3) 開啟資料庫:
ALTER DATABASE OPEN;
ps:這時候再open資料庫就ok了
4) 刪除表空間:
DROP TABLESPACE <tablespace_name> INCLUDING CONTENTS;
ps:如果是誤刪的,只需重建表空間即可。

具體操作:
SQL> startup mount
ORA-01081: 無法啟動已在執行的 ORACLE - 請首先關閉它
SQL> shutdown immediate
ORA-01109: 資料庫未開啟
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             167775108 bytes
Database Buffers          436207616 bytes
Redo Buffers                7135232 bytes
資料庫裝載完畢。
SQL> alter database datafile 'F:\ORADB.DEF'offline drop
  2  ;
資料庫已更改。
SQL> alter database open;
資料庫已更改。
SQL> drop tablespace oradb including contents;
表空間已刪除。

17、ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER (1)情況一:使用sqlplus登入 口令+as sysdba
(2)情況二:使用PL/SQL登入 登入介面的時候,將“連線為”選項框的Normal改為SYSDBA或SYSOPER

18、ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initsales.ora' 答:將$ORACLE_BASE/admin/orcl/pfile目錄下的init.ora.0212012125517形式的檔案copy到$ORACLE_HOME/dbs目錄下initoracl.ora,然後把檔名改為initsales.ora;最後更改檔案的許可權。 例如命令如下: cp  /u01/app/oracle/admin/orcl/pfile/ init.ora*  /u01/app/oracle/product/11.2.0/db_1/dbs mv init.ora.* initsales.ora chmod -R oracle:oinstall initsales.ora
19、ORA-12170:TNS:連線超時 客戶端連線Linux資料庫報錯,一般情況是埠問題。 修改iptables,開放1521埠,允許1521埠被連線, vi /etc/sysconfig/iptables
#允許21埠通過防火牆
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT 
20、ORA-12514 TNS 監聽程式當前無法識別連線描述符中請求服務 原因:監聽配置檔案listener.ora中可以不必指定監聽的服務名(安裝Oracle10g後也是沒有指定的)。正常情況下一般只要資料庫啟動,客戶端連線資料庫也沒有什麼問題,但是有時重複啟動關閉也會出現ORA-12514錯誤。
解決: (1)通過重啟服務的方式啟動資料庫,再次連線嘗試。 (2) 正確新增listener.ora; 重新啟動了oracle伺服器,並檢查oracle所有服務是否啟動; oracle客戶端Net Cofiguration Assistant正確新增或重新配置例項名, 如:(紅色粗體部分是新增進去的,注意:一定要放進藍色括號內不然會導致啟動不了監聽器) # listener.ora Network Configuration File: D:\Database\Oracle\product\instantclient_11_2\listener.ora # Generated by Oracle configuration tools.
SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = CLRExtProc)       (ORACLE_HOME = D:\Database\oracle\product\11.2.0\dbhome_1)       (PROGRAM = extproc)       (ENVS = "EXTPROC_DLLS=ONLY:D:\Database\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")     )     (SID_DESC =     (GLOBAL_DBNAME = ORCL)     (ORACLE_HOME = D:\Database\oracle\product\11.2.0\dbhome_1)     (SID_NAME = ORCL)     )   )
LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))       (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))     )   )
ADR_BASE_LISTENER = D:\Database\oracle
21、ORA-00937: 不是單組分組函式 select 列表項中除了包含聚合函式外,還包含了表的某些列,那麼你將必須使用group by語句,否則語法通不過。 例如: SELECT deptno,COUNT(empno) FROM emp; 會報錯,新增group by後就不會報錯 SELECT deptno,COUNT(empno) FROM emp GROUP BY deptno;
22、ORA-00845: MEMORY_TARGET not supported on this system 簡單來說就是 MEMORY_MAX_TARGET 的設定不能超過 /dev/shm 的大小 調整/dev/shm的大小   1)檢視大小 df -h /dev/shm 2)修改大小 (如未發現有/dev/shm的內容,直接把紅色字型的內容貼上進去) vi /etc/fstab tmpfs /dev/shm tmpfs defaults,size=4096M 0 0 3)重新掛載 umount /dev/shm mount /dev/shm 4)檢視修改後的大小 df -h /dev/shm
23、ORA-08189: cannot flashback the table because row movement is not enabled.(ORA-08189: 因為未啟用行移動功能, 不能閃回表。) 答: alter table table_name enable row movement;
24、ORA-01795: maximum number of expressions in a list is 1000 Oracle的In-list有1000個元素的限制。若把條件分成多個少於1000的IN:SELECT * FROM DUAL T WHERE T.DUMMY IN ('1', '2', '3',...,'1000') OR IN ('1001', '1002', ..., '2000') OR ... 即可解決這個異常:
解決的方法和簡單,就是把一個in拆分成多個in,如果超過了1000就拆分成2個in,如果超過了4000,就拆分成5個in 改成sql如下:select xxx from xxx where xxx in (xx,xxx...) or xxx in (xx,xx,...) or xxx in (xx,xx,...);
25、SQL> startup;
  ORA-00119: invalid specification for system parameter LOCAL_LISTENER
  ORA-00132: syntax error or unresolved network name ’LISTENER_ORCL’
如果之前啟動正常的話, (1)有可能是:配置檔案,中文符號。 (2)其他問題。。。
26、 oracle-1067監聽錯誤 因修改了計算機的名字 解決:修改oracle安裝目錄D:/DataBase/oracle/product/10.1.0/Db_1/NETWORK/ADMIN/下的 listener.ora和tnsnames.ora裡的HOST值為localhost或者計算機名即可。

27、ORACLE資料庫匯入的時候出現IMP-00038: 無法轉換為環境字符集控制代碼 錯誤 資料泵不一致導致的,比如說你用expbd匯出來的 用imp匯入的時候就會出現這個錯誤 exp匯出來的用imp匯入 expbd匯出來的用impbd匯入

28、ORA-00439 未啟用的功能:DEFERRED_SEGMENT_CREATION 場景:因從11G企業版資料庫使用expdp匯出來的資料庫,然後匯入11G標準版的時候導致的; 解決:如果想匯入標準版的,需要在匯出來的時候帶上引數 version=10.2.0,匯入的時候也匯入。 如: expdp gx/[email protected] directory=data_pump_dir dumpfile=gx.DMP version=10.2.0 impdp gx/[email protected] directory=data_pump_dir dumpfile=gx.DMP version=10.2.0

29、ora-12520 由於引數process值不夠引起的,即是同時訪問資料的使用者超過了最大連線數 當前的連線數 select count(*) from v$process; 設定的最大連線數(預設值為150) select value from v$parameter where name = 'processes'; 修改最大連線數 alter system set processes = 300 scope = spfile; 

30、ORA-01033: ORACLE initialization or shutdown in progress 原因:在oracle資料檔案目錄(例如:D:\oracle\product\10.2.0\db_1\database)誤刪了一個數據檔案。 查詢所有的資料檔案: select name from v$datafile;
找出你誤刪的資料檔案目錄,然後使用 alter database datafile 'd:\oracle\product\10.2.0\db_1\database\資料檔名稱' offline drop;如果省略drop則可能會出現ora-01145:除非啟用了介質恢復,否則不允許立即離線錯誤。
執行成功後,最後使用alter database open;開啟資料庫即可。
31、ora-04043 : 物件XXX不存在 原因:用sys登入,使用desc查看錶; 解決: (1)在表名加雙引號試試,即:desc "表名"; (2)在表名前加上schema(使用者名稱或表空間),即:desc 表空間(使用者名稱).表名;
32、exp-00028 failed to open d:\0backd for write 因系統沒有這個路徑。
3 3、 EXP-00008 : 遇到 ORACLE 錯誤 904 ORA-00904: "MAXSIZE": 識別符號無效 EXP-00000: 匯出終止失敗 原因: 11GR2客戶端匯出10GR2版本的資料庫時; 然後分別檢視本地和遠端伺服器的資料庫的系統檢視:desc exu9tbs, 發現10g沒有這個欄位,11g有 解決:解決方法還是用相同版本的客戶端匯出或者在服務端匯出。
34、在叢集環境下登入了grid建立使用者報:ORA-01031: insufficient privileges 因grid使用者並不在oracle使用者組裡; 解決:切換到oracle使用者既可以解決。
35、ORA- 01261 遷移到另一臺機器,因缺少rman檔案,scp -r flash_recovery_area 192.168.70.23:/u01/app/oracle/
36、 ORA- 09925 遷移到另一臺機器,因缺少例項的檔案,嘗試把例項的全部檔案cp過去, scp -r admin 192.168.70.23:/u01/app/oracle/
37、ORA- 00093 ,ORA-00821 ORA-00093: _shared_pool_reserved_min_alloc must be between 4000 and 0 ORA-00821: Specified value of sga_target 4M is too small, needs to be at least 28M 場景:修改SGA相關引數,修改的時候忘記寫單位導致。 解決: SQL> create pfile = '/oracle/tmp_init.ora' from spfile; SQL> !echo '*.sga_target=200m' >> '/oracle/tmp_init.ora'; SQL> create spfile from pfile = '/oracle/tmp_init.ora';
38、ORA- 01589 must use RESETLOGS or NORESETLOGS option for database open 場景:異常關機導致; 解決: SQL> startup mount; SQL> alter database open resetlogs;
39、 ORA-00020 : maximum number of processes () exceeded 解決: alter system set processes = 1000 scope=spfile
40、 ORA01378 : The logical block size (4096) of file +DATA is not compatible with the disk sector size (media sector size is 512 and host sector size is 512) 解決:
41、ORA-01506: missing or illegal database name
42、TNS- 12545 : Connect failed because target host or object does not exist 場景:修改了Linux的主機名,重啟機器後,啟動監聽; 解決: 因只修改了機器的主機名,但host和listener.ora檔案並沒有修改, vi /etc/hosts下面的IP 主機名,把其中的主機名改為已修改的; vi /u01/app/oracle/product/12.1/db1/network/admin/listener.ora這個檔案裡HOST改為已修改的主機名; 重啟機器在啟動監聽即可。 如果機器裡有tnsnames.ora這個檔案也需要修改,但是這個檔案建議使用IP地址。
43、ORA- 27101 : shared memory realm does not exist 場景:使用oracle使用者登入plsql,執行sqlplus / as sysdba報錯 解決: 檢視共享記憶體 # free 但發現記憶體是夠用的,然後檢視是不是空間不足了 # df -h 果然是,根目錄下的記憶體使用100%,清空一下記憶體,重新登入即可。