16,、TNS:沒(méi)有監(jiān)聽(tīng)器的問(wèn)題,。
(1)查一下監(jiān)聽(tīng)服務(wù)是否啟動(dòng),,
如果沒(méi)有啟動(dòng),,則運(yùn)行l(wèi)snrctrl start,。
(2)查看一下 LISTENER.ORA內(nèi)監(jiān)聽(tīng)的服務(wù)器名,、服務(wù)器IP、數(shù)據(jù)庫(kù)名是否正確,。
(3)查看一下 TNSNAMES.ORA內(nèi)服務(wù)器名,、服務(wù)器IP、數(shù)據(jù)庫(kù)名是否正確,。
17,、LINUX,、UNIX下自動(dòng)啟動(dòng)ORACLE服務(wù)
(1)
!/bin/sh
# chkconfig: 345 51 49
# description: starts the oracle dabase deamons
#
ORA_HOME=/u01/app/oracle/product/8.1.7
ORA_OWNER=oracle
case "$1" in
‘start‘)
echo -n "Starting Oracle8i: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle8i
echo
;;
‘stop‘)
echo -n "Shutting down Oracle8i: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle8i
echo
;;
‘restart‘)
echo -n "Restarting Oracle8i: "
$0 stop
$0 start
echo
;;
*)
echo "Usage: oracle8i { start | stop | restart }"
exit 1
esac
exit 0
我仿照su - $ORA_OWNER -c $ORA_HOME/bin/dbshut 的形式
添加su - $ORA_OWNER -c $ORA_HOME/bin/lsnrctl start
但是在系統(tǒng)啟動(dòng)的時(shí)候listener啟動(dòng)不了
(2)
/etc/rc.local
改成如下就可以了
touch /var/lock/subsys/local
#echo 2147483648 > /proc/sys/kernel/shmmax
echo -n "Starting Oracle Database:"
date +"%D %T %a"
su - oracle -c "lsnrctl start"
#su - oracle -c "sqlplus /nolog @startmaster.sql"
echo -n "Oracle Database Started:"
date +"%D %T %a"
-------------
第一個(gè)#是改共享內(nèi)存大小的
第二個(gè)#是啟動(dòng)數(shù)據(jù)庫(kù)的。
(3)
ftp://ftp.rpmfind.net/linux/rhcontrib/7.1/i386/oraclerun9i-1.0-1.i386.rpm
下載這個(gè)軟件包并安裝,。
里面每個(gè)文件都有一些要修改的地方,。配置完成之后,就可以在系統(tǒng)服務(wù)配置中找到它,,選中它就可能以自啟動(dòng)了,。
18、回滾段不夠的處理方法
(1),、先使回滾段脫機(jī)一個(gè),,
如果不好用,則再脫機(jī)一個(gè),。直至好用,。
ALTER rollback segment rollbackname offline;
(2)、增加回滾段數(shù)據(jù)文件的大小
alter database datafile ‘datafile‘ resize 200M;
19,、WINNT向WIN2000移植
不用EXP和IMP的
停掉數(shù)據(jù)庫(kù)的服務(wù)后,,可以做一個(gè)數(shù)據(jù)庫(kù)的全備份。
在WIN2000上建一個(gè)同名的數(shù)據(jù)庫(kù),,隨便建,,越小越好,可以縮短時(shí)間,。
把WINNT下的數(shù)據(jù)庫(kù)備份恢復(fù)到WIN2000的數(shù)據(jù)庫(kù)上就可以了,。但建庫(kù)的目錄
必須一樣。(也可以不一樣,,但需要更改數(shù)據(jù)文件的連接)
我曾多次為用戶(hù)這樣移植數(shù)據(jù),,萬(wàn)無(wú)一失的。
注意:因?yàn)閿?shù)據(jù)很重要,,所以建議你先EXP備份一下,。這是我們的習(xí)慣。
20,、ORACLE SQL PLUS Worksheet亂碼問(wèn)題,。
dbappscfg.properties,修改該文件即可解決上述問(wèn)題,。$ORACLE_HOME\sysman\config目錄下,修改
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK,。
對(duì)于Windows操作系統(tǒng),,還需要修改一項(xiàng)
#SQLPLUS_SYSTEMROOT=c:\\WINNT40
為SQLPLUS_SYSTEMROOT=C:\\WINNT
如操作系統(tǒng)的主目錄在C盤(pán)的Winnt下
對(duì)于后面一項(xiàng)的修改只對(duì)Windows操作系統(tǒng)進(jìn)行,對(duì)UNIX操作系統(tǒng)則不需要,。如果在Windows操作系統(tǒng)中不修改該項(xiàng),,在Oracle Enterprise Manager中,,連接系統(tǒng)時(shí),會(huì)提示如下的錯(cuò)誤:
ORA-12560 TNS:protocol adapter error
或者
ORA-12545 Connect failed because target host or object does not exist
重新連接SQL PLUS Worksheet
21,、DROP掉名字是小寫(xiě)的表(用雙引號(hào)括起來(lái)),。
drop table "tablename"
select * from "tablename"
22、日期的顯示格式
注意:SIMPLIFIED CHINESE(簡(jiǎn)體中文需要" "括起來(lái))
別的國(guó)家不用" " 例如:ENGLISH
select to_char(sysdate,‘DAY‘,‘NLS_DATE_LANGUAGE=‘‘SIMPLIFIED CHINESE‘‘‘) from dual;
------------
星期四
------------
23,、一個(gè)從ORACLE中讀表信息的存儲(chǔ)過(guò)程
可以在vc下調(diào)用存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)
例子:
先修改init.ora
例如:
utl_file_dir=/usr //路徑為 oracle所在的盤(pán):/usr
此過(guò)程將用戶(hù)TEMP的P1過(guò)程的代碼保存到ORACLE安裝盤(pán)下/USR/TEXT.TXT中
create or replace procedure TEST
is
file_handle utl_file.file_type;
STOR_TEXT VARCHAR2(4000);
N NUMBER;
I NUMBER;
begin
I:=1;
SELECT MAX(LINE) INTO N FROM ALL_SOURCE WHERE OWNER=‘TEMP‘ AND NAME=‘P1‘;
file_handle:=utl_file.fopen(‘/usr‘,‘test.txt‘,‘a(chǎn)‘);
WHILE I<=N LOOP
SELECT TEXT INTO STOR_TEXT FROM ALL_SOURCE WHERE OWNER=‘TEMP‘ AND NAME=‘P1‘ AND LINE= I;
I:=I+1;
utl_file.put_line(file_handle,stor_text);
END LOOP;
utl_file.fclose(file_handle);
commit;
end TEST;
/
24,、關(guān)于修改ORACLE的列寬
(1)、不論如何都要備份數(shù)據(jù),。
(2),、如果沒(méi)有數(shù)據(jù),則可以修改寬度,。比如NUMBER,,CHAR,VARCHAR2
(3),、如果有數(shù)據(jù),,則可以增加寬度。比如NUMBER,,CHAR,,VARCHAR2
注意:不可以減小寬度。
(4),、語(yǔ)法:alter talbe tablename modify columnname columntype not null;
25,、如何查看用戶(hù)的存儲(chǔ)過(guò)程和函數(shù)
select name,text from user_source where name= Procedurename and type = ‘PROCEDURE‘ order by line;
26、在批處理中自動(dòng)啟動(dòng)ORACLE服務(wù)(win2000)
編一個(gè)批處理文件
net start OracleServiceSID
OracleServiceSID是ORACLE的實(shí)例名稱(chēng)
27,、對(duì)行加鎖時(shí),,只對(duì)tb1加鎖
select tb1.r1 from tb1, tb2 where tb1.r2 = tb2.r2 and tb2.r1 = xxx for update of tb1.r1 nowait
28、得到列的信息
desc tablename
select cname from col where tname=‘TABLENAME‘;
select column_name from user_tab_columns where table_name=‘TABLENAME‘;
select column_name from ALL_tab_columns where table_name=‘TABLENAME‘;
select column_name from dba_tab_columns where table_name=‘TABLENAME‘;
select column_name from user_col_comments where table_name=‘TABLENAME‘;
select column_name from all_col_comments where table_name=‘TABLENAME‘;
select column_name from dba_col_comments where table_name=‘TABLENAME‘;
29,、使觸發(fā)器無(wú)效(login_on)
svrmgrl
connect internal/oracle
alter trigger login_on disable;
使觸發(fā)器為無(wú)效alter trigger yourtriggername disable
如果是對(duì)于某一個(gè)表的所有的觸發(fā)器:
alter table yourtablename disable all triggers
30,、如在SQLPLUS中何調(diào)用存儲(chǔ)過(guò)程和函數(shù)。
call只能調(diào)用存儲(chǔ)過(guò)程后面加上括號(hào)就可以了
call 存儲(chǔ)過(guò)程名();
exec procedurename;(可以不加())
調(diào)用函數(shù)用sql語(yǔ)句
select 函數(shù)名(參數(shù)) from dual;
31,、函數(shù)中如果調(diào)用DML語(yǔ)句就不可以調(diào)用SELECT語(yǔ)句
32,、REDO LOG BUFFER 什么時(shí)候?qū)懙絉EDO LOGFILE中
(1)、在COMMIT的時(shí)候
(2),、重做日志緩沖區(qū)1/3滿(mǎn)的時(shí)候
(3),、重做日志緩沖區(qū)大于1M的時(shí)候
(4)、它寫(xiě)信息必須是在數(shù)據(jù)寫(xiě)進(jìn)程前調(diào)用
(5),、一般CHECKPOINT在日志組切換的時(shí)候進(jìn)行或者由初始化參數(shù)設(shè)定
在CHECKPOINT的時(shí)候需要調(diào)用數(shù)據(jù)寫(xiě)進(jìn)程
33,、ORACLE的http server 把原有的WEB server沖掉,如何解決?
(1).如果你原來(lái)的http server是用IIS等其他發(fā)布工具做的,那么可以在服務(wù)中停掉 oracle http server服務(wù),并且改為手動(dòng)啟動(dòng),。
(2).如果原來(lái)的http server是用apache發(fā)布,則可以改變http.conf中的參數(shù)
34,、關(guān)于創(chuàng)建重建查看索引
創(chuàng)建索引:
CREATE INDEX IND_NAME ON TABLE_NAME(COL1,COL2,...);
重建索引:
ALTER INDEX IND_NAME REBUILD;
查看索引:
SELECT * FROM USER_INDEXES WHERE INDEX_NAME=‘IND_NAME‘;
35、ORACLE如何查殺用戶(hù)的進(jìn)程
一|根據(jù)用戶(hù)的應(yīng)用程序和SQL語(yǔ)句,,在DBA STUDIO找到用戶(hù)的SESSION并斷開(kāi)其連接
二,、
(1)、要?dú)⒌粢粋€(gè)session應(yīng)先應(yīng)知道其sid和serial#,假設(shè)你已經(jīng)知道,。
(2),、select paddr from v$session where sid=v_sid and serial#=v_serial#
select spid from v$process where addr=paddr(以上語(yǔ)句所查出的);
(3)、使用ALTER SYSTEM KILL SESSION ‘v_sid,v_serial#‘ immediate; 試一試如不行轉(zhuǎn)
三,、LINUX和UNIX下
轉(zhuǎn)到操作系統(tǒng)下執(zhí)行:kill -9 spid (以上語(yǔ)句所查出的)
36,、ORACLE中檢查表是否被鎖的語(yǔ)句
SELECT A.OWNER,
A.OBJECT_NAME,
B.XIDUSN,
B.XIDSLOT,
B.XIDSQN,
B.SESSION_ID,
B.ORACLE_USERNAME,
B.OS_USER_NAME,
B.PROCESS,
B.LOCKED_MODE,
C.MACHINE,
C.STATUS,
C.SERVER,
C.SID,
C.SERIAL#,
C.PROGRAM
FROM ALL_OBJECTS A,
V$LOCKED_OBJECT B,
SYS.GV_$SESSION C
WHERE ( A.OBJECT_ID = B.OBJECT_ID )
AND (B.PROCESS = C.PROCESS )
ORDER BY 1,2
殺掉:alter system kill session ‘sid, serial#‘
37、ORACLE的登錄問(wèn)題,,用戶(hù)名和密碼,。
可以直接輸入:
internal/oracle@serivce_name
sys/change_on_install@serivce_name
system/manager@serivce_name
scott/tiger@serivce_name
注意:
9i中沒(méi)有internal/oracle
如果選擇典型安裝則有 scott用戶(hù)
如果自定義可以不安裝 scott用戶(hù)
如果是本機(jī)則可以省略@serivce_name
oem:(ORACLE ENTERPRISE MANAGER)
sysman/oem_temp
38、修改表的列名
Oracle9i:
alter table xxx rename column xx to yy;
Oracle8i & lower version
connect sys/passed;
update col$ set name=xx where obj#=對(duì)象id and name = 字段
(一般不要這樣用,,會(huì)造成意想不到的結(jié)果)
注:最好是刪除再建立新的列
39,、把用戶(hù)模式對(duì)象所在的表空間移到新的表空間
(1). create the new tablesapce
(2). alter user test default tablespace test_data;
(3). alter user test quota unlimited on test_data;
(4). alter table the_table_name move tablespace test_data;
生成腳本:
select ‘a(chǎn)lter table‘||tname||‘ move tablespace test_date;‘
from tab
where tabtype=‘TABLE‘
(5). rebuild the indexes;
40、使用OEM備份或者EXP的步驟
WIN2000下:
(1). 控制面板――>管理工具―― >計(jì)算機(jī)管理――>本地用戶(hù)和組――>用戶(hù)――>新建用戶(hù)sys和sysman(sys和sysman 的賬號(hào)要和登陸數(shù)據(jù)庫(kù)的賬號(hào)相同),;
(2).控制面板――>管理工具―― >本地安全策略――>本地策略――>用戶(hù)權(quán)利指派――>
作為批處理作業(yè)登陸――>添加sys和sysman兩個(gè)賬號(hào),。
(3).使用Enterprise Manager配置輔助工具
開(kāi)始→程序→Oracle - OraHome81→Enterprise Manager→Configuration Assistant
a、使用Configuration Assistant工具來(lái)創(chuàng)建一個(gè)新的資料檔案庫(kù),。
(4).控制面板――>管理工具―― > 服務(wù),,查看OracleOraHome81ManagementServer是否啟動(dòng),如果沒(méi)有啟動(dòng),,則手動(dòng)啟動(dòng)該服務(wù),。
(5).以sysman/oem_temp(default)登陸DBA Studio
(第二個(gè)選項(xiàng):登陸到Oracle Management Server),立即修改密碼為你剛才在NT下建的用戶(hù)sysman的密碼。
(6). 以sysman/ *** (bluesky) 從開(kāi)始→程序→Oracle - OraHome81→Console 登陸到 控制臺(tái),。
在 系統(tǒng)→首選項(xiàng)→首選身份證明(我的首選身份設(shè)置如下:)
DEFAULT節(jié)點(diǎn):name:sysman
DEFAULT數(shù)據(jù)庫(kù):name:sys
(7). 在搜索/添加結(jié)點(diǎn)后,,以sysman/ *** 登陸到該結(jié)點(diǎn),以sys/ *** as sysdba登陸數(shù)據(jù)庫(kù)(也就是在首選身份設(shè)置的結(jié)果),。
(8). 在工具→備份管理→向?qū)?#8594;預(yù)定義備份策略(自定義備份策略)→提交備份計(jì)劃
(9).從開(kāi)始→程序→Oracle - OraHome81→Console 登陸到 控制臺(tái),,查看活動(dòng)(歷史記錄)可以看到你的備份是否成功,如果不成功,,可以點(diǎn)擊備份看明細(xì),。(我第一次也沒(méi)成功,后來(lái)我修改系統(tǒng)的臨時(shí)目錄C:\WINNT\Temp→c:\temp\systmp,重新啟動(dòng)機(jī)器就ok了)
41,、如何修改INTERNAL的口令
以下是oracle8的8i你可以仿照來(lái)做
(1),、進(jìn)入DOS下
(2),、默認(rèn)internal密碼文件在c:\orant\database下,是隱藏屬性,,文件名稱(chēng)與數(shù)據(jù)庫(kù)實(shí)例名有關(guān)
如默認(rèn)ORACLE實(shí)例名為ORCL,則internal密碼文件名為pwdorcl.ora
(3),、建立新的internal密碼文件,,起個(gè)新名字為pwdora8.ora
orapwd80 file=pwdora8.ora password=B entries=5 --注:password項(xiàng)一定要用大寫(xiě),并且不要用單引號(hào)
(4),、拷貝pwdora8.ora文件到c:\orant\database目錄下
(5),、運(yùn)行regedit,修改口令文件指向
(6),、找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE項(xiàng)
定位ORA_ORCL_PWFILE子項(xiàng),,改變其值為c:\orant\database\pwdora8.ora
(7)、關(guān)閉ORACLE數(shù)據(jù)庫(kù),,重新啟動(dòng)
(8),、進(jìn)入svrmgr30服務(wù)程序,測(cè)試internal密碼是否更改成功
42,、憑證檢索失敗的決絕方法,。
原因: 由于Oracle不能應(yīng)用OS認(rèn)證而導(dǎo)致憑證檢索失敗
解決辦法:
(1).打開(kāi)network/admin下的sqlnet.ora
修改SQLNET.AUTHENTICATION _SERVICES=(NONE)。
(2).啟動(dòng)Net8 configuration assistant-->選第三項(xiàng)本地網(wǎng)絡(luò)服務(wù)名配置
-->刪除...(刪除原來(lái)的本地網(wǎng)絡(luò)服務(wù)名)
(3).重復(fù)第二步
-->添加.. (新建本地網(wǎng)絡(luò)服務(wù)名)
(4).restart oracle
注意:NTS是WinNT的認(rèn)證方式
43,、命令行編譯存儲(chǔ)過(guò)程
ALTER PROCEDURE procedure_name COMPILE;
44,、關(guān)于如何建立數(shù)據(jù)庫(kù)鏈接(DBlink)
可以通過(guò)建立客戶(hù)機(jī)數(shù)據(jù)庫(kù)網(wǎng)絡(luò)服務(wù)名的辦法,將服務(wù)器的名字或是IP地址設(shè)置為你需要連接的那個(gè)機(jī)器就行
如果你要在一個(gè)應(yīng)用中連接它,現(xiàn)在做好上步工作,然后按如下處理
建立數(shù)據(jù)庫(kù)連接
CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING ‘NetServiceName‘;
DBaseLinkName 是建立的數(shù)據(jù)連接名稱(chēng)
UserName 是可以連接到的用戶(hù)名
Password 是可以連接到的用戶(hù)的密碼
NetServiceName 是可以連接的數(shù)據(jù)庫(kù)網(wǎng)絡(luò)服務(wù)名或是數(shù)據(jù)庫(kù)名
查詢(xún)建立數(shù)據(jù)連接的表實(shí)例
Select * From TableName@ DBaseLinkName;
注意:如果在CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING ‘NetServiceName‘;中NetServiceName 是數(shù)據(jù)庫(kù)名修改init.ora中:global_names = true
否則global_names = false
init.ora中:global_names = false
45、Object Browser7.0中文版的破解方法
到OBJECT BROWSER的目錄里,,找到DeIsL1.isu文件,,用記事本打開(kāi),看到的是亂碼吧,?沒(méi)關(guān)系,,將Stirling Technologies ,Inc 這個(gè)字符串前面的亂碼去掉(如果有的話(huà)),讓后在Stirling之前加一個(gè)空格(一定要加的),,保存,,退出,重新運(yùn)行一下看看,,雖然還有提示輸入驗(yàn)證信息,,但是不用管他,直接確定就行,。是不是可以用了呢,?保證好使。
46,、錯(cuò)誤號(hào)ORA-01536:space quota exceeded for table space ‘ALCATEL‘的解決辦法
三個(gè)解決辦法,,任你選擇:
(1) alter user USERNAME quota 100M on TABLESPACENAME;
(2) alter user USERNAME quota unlimited on TABLESPACENAME;
(3) grant unlimited tablespace to USERNAME;
47,、如何在Oracle中捕獲到SQL語(yǔ)句的全部操作內(nèi)容
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
48、ORACLE中如何實(shí)現(xiàn)自增字段:
(1)第一種方法
ORACLE一般的做法是同時(shí)使用序列和觸發(fā)器來(lái)生成一個(gè)自增字段.
CREATE SEQUENCE SEQname
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999
/
CREATE TRIGGER TRGname
BEFORE INSERT ON table_name
REFERENCING
NEW AS :NEW
FOR EACH ROW
Begin
SELECT SEQname.NEXTVAL
INTO :NEW.FIELDname
FROM DUAL;
End;
(2)第二種方法:
CREATE OR REPLACE TRIGGER TR1
BEFORE INSERT ON temp_table
FOR EACH ROW
declare
com_num NUMBER;
BEGIN
SELECT MAX(ID) INTO COM_NUM FROM TEMP_TABLE;
:NEW.ID:=COM_NUM+1;
END TR1;
49,、job的使用:
修改initsid.ora參數(shù)
job_queue_processes = 4 8i,9i (允許同時(shí)執(zhí)行的JOB數(shù))
job_queue_interval = 10 8i
job_queue_keep_connections=true 8i
DBMS_JOB.SUBMIT(:jobno,//job號(hào)
‘your_procedure;‘,//要執(zhí)行的過(guò)程
trunc(sysdate)+1/24,//下次執(zhí)行時(shí)間
‘trunc(sysdate)+1/24+1‘//每次間隔時(shí)間
);
刪除job:dbms_job.remove(jobno);
修改要執(zhí)行的操作:dbms_job.what(jobno,what);
修改下次執(zhí)行時(shí)間:dbms_job.next_date(job,next_date);
修改間隔時(shí)間:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
啟動(dòng)job:dbms_job.run(jobno);
注意:修改后一定要COMMIT,;
例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
‘Procdemo;‘,//Procdemo為過(guò)程名稱(chēng)
SYSDATE, ‘SYSDATE + 1/720‘);
commit;
end;
50、如何配置mts
修改初始化參數(shù)文件
增加以下內(nèi)容:
mts_dispatchers = "(protocol=TCP)(disp=2)(con=1000)"
mts_max_dispatchers = 50
mts_servers = 20
mts_max_servers = 50
51,、取出一個(gè)表的最后一條記錄
select * from (select rownum id,tname.* from tname) a where a.id=(select count(*) from a);
52,、重做日志(Redolog)被刪掉,通過(guò)什么方法才能恢復(fù),!
先mount數(shù)據(jù)庫(kù),,然后再目錄下建同名文件redo01.log、redo02.log,、redo03.log
然后執(zhí)行alter databse clear logfile group n
對(duì)于current的group,,執(zhí)行alter databse clear unarchived logfile group n
然后,再open,,就ok了