原文引自:-------------
第一個(gè)#是改共享內(nèi)存大小的
第二個(gè)#是啟動(dòng)數(shù)據(jù)庫(kù)的。
(3)
ftp://ftp.rpmfind.net/linux/rhcontri ... lerun9i-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ù)文件的連接)
我曾多次為用戶這樣移植數(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盤的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掉名字是小寫的表(用雙引號(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所在的盤:/usr
此過(guò)程將用戶TEMP的P1過(guò)程的代碼保存到ORACLE安裝盤下/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');
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、如何查看用戶的存儲(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í)例名稱
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滿的時(shí)候
(3)、重做日志緩沖區(qū)大于1M的時(shí)候
(4)、它寫信息必須是在數(shù)據(jù)寫進(jìn)程前調(diào)用
(5)、一般CHECKPOINT在日志組切換的時(shí)候進(jìn)行或者由初始化參數(shù)設(shè)定
在CHECKPOINT的時(shí)候需要調(diào)用數(shù)據(jù)寫進(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如何查殺用戶的進(jìn)程
一|根據(jù)用戶的應(yīng)用程序和SQL語(yǔ)句,在DBA STUDIO找到用戶的SESSION并斷開其連接
二、
(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)題,用戶名和密碼。
可以直接輸入:
internal/oracle@serivce_name
sys/change_on_install@serivce_name
system/manager@serivce_name
scott/tiger@serivce_name
注意:
9i中沒(méi)有internal/oracle
如果選擇典型安裝則有 scott用戶
如果自定義可以不安裝 scott用戶
如果是本機(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、把用戶模式對(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 'alter table'||tname||' move tablespace test_date;'
from tab
where tabtype='TABLE'
(5). rebuild the indexes;
40、使用OEM備份或者EXP的步驟
WIN2000下:
(1). 控制面板――>管理工具―― >計(jì)算機(jī)管理――>本地用戶和組――>用戶――>新建用戶sys和sysman(sys和sysman 的帳號(hào)要和登陸數(shù)據(jù)庫(kù)的帳號(hào)相同);
(2).控制面板――>管理工具―― >本地安全策略――>本地策略――>用戶權(quán)利指派――>
作為批處理作業(yè)登陸――>添加sys和sysman兩個(gè)帳號(hào)。
(3).使用Enterprise Manager配置輔助工具
開始→程序→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下建的用戶sysman的密碼。
(6). 以sysman/ *** (bluesky) 從開始→程序→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ū)АA(yù)定義備份策略(自定義備份策略)→提交備份計(jì)劃
(9).從開始→程序→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下,是隱藏屬性,文件名稱與數(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)一定要用大寫,并且不要用單引號(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).打開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ò)建立客戶機(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ù)連接名稱
UserName 是可以連接到的用戶名
Password 是可以連接到的用戶的密碼
NetServiceName 是可以連接的數(shù)據(jù)庫(kù)網(wǎng)絡(luò)服務(wù)名或是數(shù)據(jù)庫(kù)名
查詢建立數(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文件,用記事本打開,看到的是亂碼吧?沒(méi)關(guān)系,將Stirling Technologies ,Inc 這個(gè)字符串前面的亂碼去掉(如果有的話),讓后在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ò)程名稱
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了
53、Oracle常見(jiàn)服務(wù)
幾個(gè)主要的:
OracleOraHome81TNSListener 監(jiān)聽服務(wù)
OracleServiceSID ORACLE服務(wù)
OracleOraHome81Agent 智能代理服務(wù)
OracleOraHome81CMan 連接管理服務(wù)
OracleOraHome81HTTPServer APACHE WEB 服務(wù)
OracleOraHome81ManagementServer ORACLE 企業(yè)管理器服務(wù)
OracleOraHome81Names ORACLE命名服務(wù)
剩下的也不常用。
54、ORACLE的熱備份
在不關(guān)閉數(shù)據(jù)庫(kù)的時(shí)候進(jìn)行ORACLE的備份。
原理停復(fù)雜的,你去找本書看看吧。
舉個(gè)簡(jiǎn)單的例子:備份表空間USERS
ALTER TABLESPACE USERS BEGIN BACKUP
COPY USERS TABLESPACE 的數(shù)據(jù)文件到備份目錄
ALTER TABLESPACE USERS END BACKUP
55、導(dǎo)致索引不起作用的解決辦法
你的問(wèn)題我剛處理過(guò),是由optimizer_mode參數(shù)引起的,該參數(shù)的默認(rèn)值為choose,即為如表有statis則查詢走基于cost的方式,否則走基于rule的方式,因些你可以有以下幾個(gè)解決方法。
(1)、簡(jiǎn)單的在init<sid>.ora中設(shè)optimizer_mode=rule,重起數(shù)據(jù)庫(kù)。
(2)、使用analyze table table_name(索引基表) delete statistics;
(3)、最后一個(gè)萬(wàn)能辦法,將表和索引drop掉,重建。
56、關(guān)于數(shù)據(jù)庫(kù)進(jìn)程的問(wèn)題。
(1).查看相關(guān)進(jìn)程在數(shù)據(jù)庫(kù)中的會(huì)話
Select a.sid,a.serial#,a.program, a.status ,
substr(a.machine,1,20), a.terminal,b.spid
from v$session a, v$process b
where a.paddr=b.addr
and b.spid = &spid;
(2).查看數(shù)據(jù)庫(kù)中被鎖住的對(duì)象和相關(guān)會(huì)話
select a.sid,a.serial#,a.username,a.program,
c.owner, c.object_name
from v$session a, v$locked_object b, all_objects c
where a.sid=b.session_id and
c.object_id = b.object_id;
(3).查看相關(guān)會(huì)話正在執(zhí)行的SQL
select sql_text from v$sqlarea where address =
( select sql_address from v$session where sid = &sid );
57、查看IP地址
select SYS_CONTEXT('USERENV','IP_ADDRESS') from dual;
58、運(yùn)行SQLPLUS時(shí)不用輸入用戶名和密碼,進(jìn)入之后使用CONNECT
SQLPLUS /NOLOG
SQL>CONNECT SCOTT/TIGER
59、查看當(dāng)前會(huì)話
userenv() 函數(shù)
select userenv('language') from dual 字符集
select userenv('isdba') from dual 是否DBA
select userenv('sessionid') from dual sessionid
select userenv('TERMINAL') from dual 客戶端名字
select userenv('INSTANCE') from dual 實(shí)例數(shù)
SYS_CONTEXT() 函數(shù)
select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') from dual; 當(dāng)前模式
select SYS_CONTEXT('USERENV','CURRENT_SCHEMAID') from dual; 當(dāng)前模式ID
select SYS_CONTEXT('USERENV','CURRENT_USER') from dual; 當(dāng)前用戶
select SYS_CONTEXT('USERENV','DB_NAME') from dual; 數(shù)據(jù)庫(kù)
select SYS_CONTEXT('USERENV','HOST') from dual; 主機(jī)
..........
60、刪除重復(fù)列的方法
(1) DELETE FROM table_name A WHERE ROWID > (
SELECT min(rowid) FROM table_name B
WHERE A.key_values = B.key_values);
(2) create table table2 as select distinct * from table1;
drop table1;
rename table2 to table1;
(3) Delete from mytable where rowid not in(
select max(rowid) from mytable
group by column_name );
(4) delete from mytable t1
where exists (select 'x' from my_table t2
where t2.key_value1 = t1.key_value1
and t2.key_value2 = t1.key_value2
...
and t2.rowid > t1.rowid);
61、ORA-12571: TNS:packet writer failure(包寫入程序失敗)
(1) 這個(gè)錯(cuò)誤在客戶端遇到過(guò),通常重新連接一下服務(wù)器就好了。
服務(wù)器重新啟動(dòng)的時(shí)候,在client也會(huì)遇到該錯(cuò)誤。
這個(gè)錯(cuò)誤你是在server還是client上遇到的?最常用的辦法就是加上跟蹤,查看一下 跟蹤記錄,分析分析錯(cuò)誤的原因。
網(wǎng)絡(luò)問(wèn)題也會(huì)出現(xiàn)該錯(cuò)誤,比如網(wǎng)絡(luò)路由沒(méi)有配置好。
(2) 安裝的殺毒軟件導(dǎo)致的
(3) 服務(wù)器端的IP是否被改動(dòng)
(4) 最后不行的話,重新創(chuàng)建監(jiān)聽器
62、ORACLE服務(wù)不能自動(dòng)啟動(dòng)的解決辦法
把ORACLEHOME\network\ADMIN\sqlnet.ora
文件中的 sqlnet.authentication_service=(nts)
注釋掉就可以了
63、不完全的時(shí)間點(diǎn)恢復(fù)
shutdown immediate
copy 備份文件到需要恢復(fù)的目錄下
startup mount
recover database until time '2002-12-26 09:00:00'
alter database open resetlogs
自己仔細(xì)檢查一下,不會(huì)發(fā)生這樣的問(wèn)題的。
64、oracle如何設(shè)置查詢超時(shí)
select /*+ timeout 30*/ * from veryLargeTable
65、修改字符集
(1)、ALTER DATABAE CHARACTER SET SIMPLIFIED CHINESE_CHINA.ZHS16GBK ;
(2)、update props$ set value$='ZHS16CGB231280'
where name='NLS_CHARACTERSET';
update props$ set value$='ZHS16CGB231280'
where name='NLS_NCHAR_CHARACTERSET';
建議不使用(2)
注意:
(1)、執(zhí)行ALTER DATABASE CHARACTER SET必須有SYSDBA權(quán)限,并且在STARTUP RESTRICT模式下執(zhí)行
(2)、原字符集必須是目標(biāo)字符集的一個(gè)真子集(就是浪子所說(shuō)的只能從WE8ISO8859P1轉(zhuǎn)到ZHS16GBK的原因)
(3)、CLOB字段裝換可能有問(wèn)題,建議在轉(zhuǎn)換以前把有CLOB字段的表導(dǎo)出后DROP,轉(zhuǎn)換以后再導(dǎo)回
(4)、該轉(zhuǎn)換不可逆,所以在做這個(gè)操作以前建議做數(shù)據(jù)庫(kù)全備份
66、修改數(shù)據(jù)庫(kù)名字
(1)、啟動(dòng)svrmgrl,以文本方式備份控制文件
oracle>svrmgrl
svrmgrl>connect internal
svrmgrl>alter system backup controlfile to trace
(2)、編輯產(chǎn)生的跟蹤文件,在udump目錄下
改CREATE CONTROLFILE REUSE DATABASE "CTC" NORESETLOGS ARCHIVELOG
中的REUSE為SET
然后把create controlfile這段語(yǔ)句拷出
(3)、正常宕庫(kù),后啟動(dòng)到nomount下
svrmgrl>shutdown immediate
svrmgrl>startup nomount
(4)、執(zhí)行create controlfile那段語(yǔ)句
(5)、打開數(shù)據(jù)庫(kù)
svrmgrl>alter database open
如提示用resetlogs選項(xiàng)則使用
svrmgrl>alter database open resetlogs
(8)、相應(yīng)修改初始化參數(shù)
67、rownum的用法
select * from (select t.*,rownum id from dept t)
where id between 1 and 20
68、oracle的內(nèi)部參數(shù)
SELECT a.ksppinm NAME,
b.ksppstdf default_val,
a.ksppdesc DESCRIPTION
FROM x$ksppi a,
x$ksppcv b
WHERE a.indx=b.indx
AND substr(a.ksppinm,1,1)='_'
ORDER BY a.ksppinm
69、9i安裝時(shí)報(bào)areasqueries錯(cuò)誤的解決辦法
包括IAS 和 IDS
把安裝源文件目錄全部改為英文字母或數(shù)字
注意:不能是中文的路徑
70、我如何知道一個(gè)表空間還有多少可以用
(1)、
SELECT upper(f.tablespace_name) 表空間名,
d.Tot_grootte_Mb "表空間大小(M)",
d.Tot_grootte_Mb - f.total_bytes "已使用空間(M)",
round((d.Tot_grootte_Mb - f.total_bytes) / d.Tot_grootte_Mb * 100,2) "使用比",
f.total_bytes "空閑空間(M)",
f.max_bytes "最大塊(M)"
FROM
(SELECT tablespace_name,
round(SUM(bytes)/(1024*1024),2) total_bytes,
round(MAX(bytes)/(1024*1024),2) max_bytes
FROM sys.dba_free_space
GROUP BY tablespace_name) f,
(SELECT dd.tablespace_name, round(SUM(dd.bytes)/(1024*1024),2) Tot_grootte_Mb
FROM sys.dba_data_files dd
GROUP BY dd.tablespace_name) d
WHERE d.tablespace_name = f.tablespace_name
ORDER BY 4 DESC
(2)、select tablespace_name,round(sum(bytes)/1024/1024,2) "M" from dba_free_space
group by tablespace_name
71、creck pl/sql developer 的方法
(1)、安裝pl/sql developer
(2)、用UltraEdit將程序PLSQLDev.exe打開
(3)、將UltraEdit設(shè)置為16進(jìn)制模式
(4)、查找串:BA 1E 00 00 00 2B D0
修改:2B D0 為:4A 90
(5)、存盤退出
(6)、運(yùn)行PLSQLDev.exe,如果提示你還有29天的時(shí)間可用,那就恭喜你了!
72、使索引無(wú)效
ALTER INDEX idx UNUSABLE;
ALTER INDEX idx_acctno DISABLE;(only to a function based index)
73、在SQLPLUS中給指定用戶進(jìn)行 set autotrace on/off
以SCOTT用戶為例:
SQL>CONNECT scott/tiger
connected.
SQL>@$ORACLE_HOME/RDBMS/ADMIN/UTLXPLAN.SQL
Table created.
SQL>CONNECT / AS SYSDBA
connected.
SQL>@$ORACLE_HOME/SQLPLUS/ADMIN/PLUSTRCE.SQL
drop role plustrace;
Role dropped.
create role plustrace;
Role created.
.
grant plustrace to dba with admin option;
Grant succeeded.
SQL>GRANT PLUSTRACE TO SCOTT;
Grant succeeded.
SQL>CONNECT SCOTT/TIGER
connected.
SQL>set autotrace on
SQL>
74、關(guān)于約束的四種狀態(tài)
Disabled novalidate:當(dāng)約束使不能時(shí),約束的規(guī)則不能強(qiáng)制在列
(包含在約束中)的數(shù)據(jù)之上。但約束的定義保存在數(shù)據(jù)字典中。
在執(zhí)行數(shù)據(jù)倉(cāng)庫(kù)卷起(rollup)或裝載且要加快裝載過(guò)程時(shí)該方式
是有用的。
Enabled novalidate:是能無(wú)效,該狀態(tài)的表可以包含非法
的數(shù)據(jù),但不可能加入新的非法數(shù)據(jù)。
Enabled validate:使能有效,一個(gè)使能的約束是強(qiáng)制的,表的數(shù)據(jù)檢查
有效
75、在SQLPLUS中調(diào)用存儲(chǔ)過(guò)程
SET SERVEROUTPUT ON
declare
out_param varchar2(100);
begin
your_proc(1,out_param);
dbms_output.put_line(out_param);
end;
/
SET SERVEROUTPUT OFF
75、生成系統(tǒng)表和存儲(chǔ)過(guò)程的三個(gè)文件。
cat*.sql
dbms*.sql
utl*.sql
76、JOB中日期的使用
每個(gè)月1號(hào):
last_day(sysdate)+1
每個(gè)季度的第一天:
to_date(decode(to_char(sysdate,'q'),'1',to_char(sysdate,'yyyy')||'0101',
'2',to_char(sysdate,'yyyy')||'0401','3',to_char(sysdate,'yyyy')||'0701',
'4',to_char(sysdate,'yyyy')||'1001'),'yyyymmdd')
每天:
sysdate+1
每個(gè)星期幾:
decode(to_char(sysdate,'w'),'1',sysdate+7,
to_char(sysdate,'w'),'2',sysdate+6,to_char(sysdate,'w'),'3',sysdate+5,
to_char(sysdate,'w'),'4',sysdate+4,to_char(sysdate,'w'),'5',sysdate+3,
to_char(sysdate,'w'),'6',sysdate+2,to_char(sysdate,'w'),'7',sysdate+1)
每個(gè)星期x下午三點(diǎn):interval(21, 'next_day(trunc(sysdate),x+1)+15/24');
每個(gè)季度的第一個(gè)星期x:
interval(21, 'next_day(trunc(sysdate,''Q''),3),5)');
77、使用execute immediate 的問(wèn)題
8i以上才支持execute immediate
8.05只能用dbms_sql
最好使用execute immediate
78、ORACLE9i中刪除表空間中數(shù)據(jù)文件的方法
drop tablespace tbsname including contents
79、找出串中的數(shù)字
SELECT TRANSLATE('2KRW229',
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')
"Translate example"
FROM DUAL
/
2229
--全是數(shù)字的:
select * from 你的表 where translate(你的列,'0123456789',' ')='';
select * from 你的表 where trim(ltrim(rtrim(replace(col_name,'0123456789',' ')))) is null
80、分析表
analyze table mzbs.db_code ESTIMATE STATISTICS SAMPLE 20 PERCENT;
81、表空間管理和用戶管理
--查看表空間和數(shù)據(jù)文件
select file_name,tablespace_name,autoextensible from dba_data_files;
--數(shù)據(jù)表空間
CREATE TABLESPACE USER_DATA
LOGGING
DATAFILE 'D:\ORACLE\ORADATA\ORCL\test.DBF' SIZE 50m REUSE ,
'c:\USERS01112.DBF' SIZE 50m REUSE
AUTOEXTEND
ON NEXT 1280K MAXSIZE 16383M EXTENT MANAGEMENT LOCAL
--臨時(shí)表空間
CREATE TEMPORARY
TABLESPACE USER_DATA_TEMP TEMPFILE 'D:\TEMP0111.DBF'
SIZE 50M REUSE AUTOEXTEND
ON NEXT 1024K MAXSIZE 16383M EXTENT MANAGEMENT LOCAL UNIFORM
SIZE 1024K
--增加數(shù)據(jù)文件
ALTER TABLESPACE USER_DATA
ADD DATAFILE 'c:\USERS01113.DBF' SIZE 50M;
ALTER TABLESPACE USER_DATA
ADD DATAFILE 'c:\USERS01114.DBF' SIZE 50M
AUTOEXTEND ON
;
--刪除表空間
DROP TABLESPACE USER_DATA INCLUDING CONTENTS;
--修改數(shù)據(jù)文件大小
ALTER DATABASE
DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;
--創(chuàng)建用戶、賦予權(quán)限
CREATE USER USER_DATA PROFILE DEFAULT IDENTIFIED BY USER_DATA
DEFAULT
TABLESPACE USER_DATA TEMPORARY
TABLESPACE USER_DATA ACCOUNT UNLOCK;
GRANT CONNECT TO USER_DATA;
GRANT RESOURCE TO USER_DATA;
--把表移到另一個(gè)表空間
ALTER TABLE TABLENAME MOVE TABLESPACE TABLESPACENAME;
--創(chuàng)建索引
CREATE INDEX INDEXNAME ON TABLENAME(COLUMNNAME);
CREATE INDEX INDEXNAME ON TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;
--重新建立索引
ALTER INDEX INDEXNAME REBUILD TABLESPACE TABLESPACE;
--創(chuàng)建表
CREAE TABLE TABLENAME
(COLUMN1 COLUTYPE DEFAULT(VALUE) NOT NULL)
(COLUMN2 COLUTYPE DEFAULT(VALUE) NOT NULL);
--建表的索引存儲(chǔ)分配
CREATE TABLE summit.employee(id NUMBER(7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE USING INDEX STORAGE(INITIAL 100K NEXT 100K)
TABLESPACE indx,
last_name VARCHAR2(25) CONSTRAINT employee_last_name_nn NOT NULL,
dept_id NUMBER(7))
TABLESPACE data;
--建立主鍵
ALTER TABLE TABLENAME
ADD CONSTRAINT CONSTRAINTNAME PRIMARY KEY(COLUMN1,COLUMN2)
--使約束無(wú)效
ALTER TABLE TABLENAME ENABLE NOVALIDATE CONSTRAINT CONSTRANAME;
ALTER TABLE TABLENAME ENABLE VALIDATE CONSTRAINT CONSTRANAME;
--刪除約束
ALTER TABLE TABLENAME DROP CONSTRAINT constraintname;
DROP TABLE TABLENAEM CASCADE CONSTRAINTS;(刪除表后將所用的外鍵刪除)
--給表增加列
ALTER TABLE TABLENAME
ADD COLUMN COLUTYPE DEFAULT(VALUE) NOT NULL;
--給列增加缺省值
ALTER TABLE TABLENAME
MODIFY COLUMNNAME DEFAULT(VALUE) NOT NULL;
--給表增加外鍵
ALTER TABLE TABLENAME
ADD CONSTRAINT CONSTRAINTNAME
FOREIGN KEY(COLUMN) REFERENCES TABLE1NAME(COLUMN1);
1、分析表
analyze table mzbs.db_code ESTIMATE STATISTICS SAMPLE 20 PERCENT;
2、表空間管理和用戶管理
--查看表空間和數(shù)據(jù)文件
select file_name,tablespace_name,autoextensible from dba_data_files;
--數(shù)據(jù)表空間
CREATE TABLESPACE USER_DATA
LOGGING
DATAFILE 'D:\ORACLE\ORADATA\ORCL\test.DBF' SIZE 50m REUSE ,
'c:\USERS01112.DBF' SIZE 50m REUSE
AUTOEXTEND
ON NEXT 1280K MAXSIZE 16383M EXTENT MANAGEMENT LOCAL
--修改表空間數(shù)據(jù)文件的路徑
ALTER TABLESPACE app_data
RENAME
DATAFILE '/DISK4/app_data_01.dbf'
TO '/DISK5/app_data_01.dbf';
ALTER DATABASE
RENAME FILE '/DISK1/system_01.dbf'
TO '/DISK2/system_01.dbf';
--臨時(shí)表空間
CREATE TEMPORARY
TABLESPACE USER_DATA_TEMP TEMPFILE 'D:\TEMP0111.DBF'
SIZE 50M REUSE AUTOEXTEND
ON NEXT 1024K MAXSIZE 16383M EXTENT MANAGEMENT LOCAL UNIFORM
SIZE 1024K
--增加數(shù)據(jù)文件
ALTER TABLESPACE USER_DATA
ADD DATAFILE 'c:\USERS01113.DBF' SIZE 50M;
ALTER TABLESPACE USER_DATA
ADD DATAFILE 'c:\USERS01114.DBF' SIZE 50M
AUTOEXTEND ON
;
--刪除表空間
DROP TABLESPACE USER_DATA INCLUDING CONTENTS;
--修改表空間的存儲(chǔ)參數(shù)
ALTER TABLESPACE tablespacename
MINIMUM EXTENT 2M;
ALTER TABLESPACE tablespacename
DEFAULT STORAGE (
INITIAL 2M
NEXT 2M
MAXEXTENTS 999 );
--表空間聯(lián)機(jī)/脫機(jī)/只讀
ALTER TABLESPACE tablespacename OFFLINE/ONLINE/READ ONLY;
--修改數(shù)據(jù)文件大小
ALTER DATABASE
DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;
--創(chuàng)建用戶、賦予權(quán)限
CREATE USER USER_DATA PROFILE DEFAULT IDENTIFIED BY USER_DATA
DEFAULT
TABLESPACE USER_DATA TEMPORARY
TABLESPACE USER_DATA ACCOUNT UNLOCK;
GRANT CONNECT TO USER_DATA;
GRANT RESOURCE TO USER_DATA;
3、表的管理
--創(chuàng)建表
CREAE TABLE TABLENAME
(COLUMN1 COLUTYPE DEFAULT(VALUE) NOT NULL)
(COLUMN2 COLUTYPE DEFAULT(VALUE) NOT NULL);
--建表的索引存儲(chǔ)分配
CREATE TABLE summit.employee(id NUMBER(7) CONSTRAINT employee_id_pk PRIMARY KEY DEFERRABLE USING INDEX STORAGE(INITIAL 100K NEXT 100K)
TABLESPACE indx,
last_name VARCHAR2(25) CONSTRAINT employee_last_name_nn NOT NULL,
dept_id NUMBER(7))
TABLESPACE data;
--修改表的存儲(chǔ)分配
ALTER TABLE tablename
PCTFREE 30
PCTUSED 50
STORAGE(NEXT 500K
MINEXTENTS 2
MAXEXTENTS 100);
ALTER TABLE tablename
ALLOCATE EXTENT(SIZE 500K
DATAFILE '/DISK3/DATA01.DBF');
--把表移到另一個(gè)表空間
ALTER TABLE TABLENAME MOVE TABLESPACE TABLESPACENAME;
--回收空閑的空間(回收到High-water mark)
全部回收需要TRUNCATE TABLE tablename
ALTER TABLE tablename
DEALLOCATE UNUSED;
--刪除表(連同所用constraint)
DROP TABLE tablename
CASCADE CONSTRAINTS;
--給表增加列
ALTER TABLE TABLENAME
ADD COLUMN COLUTYPE DEFAULT(VALUE) NOT NULL;
--刪除表中的列
ALTER TABLE tablename
DROP COLUMN columnname;
ALTER TABLE tablename
DROP COLUMN columnname
CASCADE CONSTRAINTS CHECKPOINT 1000;
--標(biāo)記列不可用
ALTER TABLE tablename
SET UNUSED COLUMN columnname
CASCADE CONSTRAINTS;
--刪除標(biāo)記為不可用的列
ALTER TABLE tablename
DROP UNUSED COLUMNS CHECKPOINT 1000;
--繼續(xù)刪除列選項(xiàng)
ALTER TABLE tablename
DROP COLUMNS CONTINUE CHECKPOINT 1000;
--把表放到BUFFER_POOL中去
ALTER TABLE tablename
STORAGE (BUFFER_POOL RECYCLE);
--避免動(dòng)態(tài)分配EXTENT
ALTER TABLE tablename ALLOCATE EXTENT;
--把表放到CACHE中去
ALTER TABLE tablename ALLOCATE CACHE/NOCACHE;
4、索引管理
--創(chuàng)建索引
CREATE INDEX indexname ON TABLENAME(COLUMNNAME);
CREATE INDEX indexname ON TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;
--重新建立索引
ALTER INDEX indexname REBUILD TABLESPACE TABLESPACE;
--索引分配參數(shù)
ALTER INDEX indexname
STORAGE(NEXT 400K
MAXEXTENTS 100);
--釋放索引空間
ALTER INDEX indexname
ALLOCATE EXTENT (SIZE 200K
DATAFILE '/DISK6/indx01.dbf');
ALTER INDEX indexname
DEALLOCATE UNUSED;
--重新整理索引表空間碎片
ALTER INDEX indexname COALESCE;
--刪除索引
DROP INDEX indexname
--把索引放到BUFFER_POOL中
ALTER INDEX cust_name_idx
REBUILD
STORAGE (BUFFER_POOL KEEP);
5、約束管理
--建立主鍵
ALTER TABLE TABLENAME
ADD CONSTRAINT CONSTRAINTNAME PRIMARY KEY(COLUMN1,COLUMN2)
--使約束無(wú)效
ALTER TABLE TABLENAME ENABLE NOVALIDATE CONSTRAINT constraintname;
ALTER TABLE TABLENAME ENABLE VALIDATE CONSTRAINT constraintname;
--刪除約束
ALTER TABLE tablename DROP CONSTRAINT constraintname;
DROP TABLE tablename CASCADE CONSTRAINTS;(刪除表后將所用的外鍵刪除)
--給列增加缺省值
ALTER TABLE TABLENAME
MODIFY columnname DEFAULT(value) NOT NULL;
--給表增加外鍵
ALTER TABLE tablename
ADD CONSTRAINT constraintname
FOREIGN KEY(column) REFERENCES table1name(column1);
6、安全策略
--加密傳輸
把客戶端環(huán)境變量ora_encrypt_login設(shè)為true
把服務(wù)器端參數(shù)dblink_encypt_login設(shè)為true
--數(shù)據(jù)庫(kù)管理員安全策略
a、建庫(kù)后立即修改SYS/SYSTEM的口令(9.2后必須修改其口令)
b、只有數(shù)據(jù)庫(kù)管理員才能以SYSDBA登錄系統(tǒng)
c、建立不同角色的管理員,分配不同的權(quán)限
比如:對(duì)象創(chuàng)建于維護(hù)
數(shù)據(jù)庫(kù)的調(diào)整與維護(hù)
創(chuàng)建用戶分配角色
啟動(dòng)關(guān)閉
恢復(fù)備份
--應(yīng)用開發(fā)者的安全策略
a、開發(fā)者的特權(quán)只能在測(cè)試開發(fā)的數(shù)據(jù)庫(kù)中賦予權(quán)限
b、自由開發(fā)者、受控開發(fā)者
自由開發(fā)者:create table\index\procedure\package
受控開發(fā)者:沒(méi)有以上權(quán)限
7、日志文件管理
--切換日志文件
ALTER SYSTEM SWITCH LOGFILE;
--增加日志文件
ALTER DATABASE ADD LOGFILE
('/DISK3/log3a.rdo',
'/DISK4/log3b.rdo') size 1M;
--增加日志成員
ALTER DATABASE ADD LOGFILE MEMBER
'/DISK4/log1b.rdo' TO GROUP 1
'/DISK4/log2b.rdo' TO GROUP 2;
--刪除日志文件
ALTER DATABASE DROP LOGFILE GROUP 3;
--刪除日志成員
ALTER DATABASE DROP LOGFILE MEMBER '/DISK4/log2b.dbf';
--清除日志文件內(nèi)容
ALTER DATABASE CLEAR LOGFILE '/DISK3/log2a.rdo';
查找表以及表空間中的標(biāo)的個(gè)數(shù)信息
select owner, object_type, status, count(*) count# from all_objects where object_type='TABLE' and owner='HYQ' group by owner, object_type, status;