請將以下文件拷貝到運(yùn)行文件所在目錄
一、ODBC動(dòng)態(tài)庫 :
ctl3d32.dll msvcrt40.dll odbc16gt.dll odbc32.dll odbc32gt.dll odbccp32.dll odbccr32.dll odbcint.dll
二、建立EXTRA子目錄,將MSVCRT.DLL文件拷貝到該子目錄下
EXTRA\MSVCRT.DLL
三、ORACLE動(dòng)態(tài)庫及配置文件
Tnsnames.ora CORE35O.DLL NASNSNT.DLL NAUNTSNT.DLL NCRNT.DLL Nlnt.dll NLSRTL32.DLL Nnfdnt.dll NNFNNT.DLL NSNT.DLL NTNT.DLL NTTNT.DLL CIW32.DLL Ora73.dll OTRACE73.DLL Sqlnet.ora Sqltnsnt.dll CORE35.DLL
四、PB動(dòng)態(tài)庫
pbvm70.dll pbdwe70.dll Pbo7370.dll PBO8470.DLL pbodb70.dll libjcc.dll
Oracle的客戶端不安裝讓pb連上,我記得以前有帖子的,你可以搜索一下。
具體步驟。
(1).先在某機(jī)器上安裝好客戶端(最好安裝在c盤);
(2).復(fù)制此客戶端oracle目錄下的所有文件作為獨(dú)立的oracle安裝文件;
(3).搜索注冊表,找到 HKey_Local_machine\software\oracle,把此項(xiàng)目及分支全部導(dǎo)出。
(4).打包好你的pb程序,并獨(dú)立打包好oracle客戶端和注冊表導(dǎo)出文件。
(5).到干凈的客戶端,解開兩個(gè)包,導(dǎo)入注冊表文件,然后加入路徑支持:
path=%path%;"c:\Ora817\bin"
這樣處理,應(yīng)該沒有問題,因?yàn)槲揖褪沁@樣快速處理了幾十個(gè)機(jī)器。
若不想搞注冊表,你可以在程序中自己寫注冊表,構(gòu)成Oracle客戶端必要的注冊表支持,至于路徑,手工添加應(yīng)該不難。
至于Oracle客戶端那些文件不需要,這個(gè)不好說,你可以把那些bin目錄下的所有exe刪除,Oracle Document刪除(7x兆)
至于定義Oracle服務(wù),找到 Ora817\net80\admin\TnsName.ora,參照格式,程序中生成一個(gè)也不麻煩。
=======================================================
2、在ORACLE中返回游標(biāo)結(jié)果集
你需要寫到一個(gè)包中:
create or replace package pag_cs_power as
type c_Type is ref cursor;
FUNCTION FUN_CS_GETDICTLIST(
v_DictIndex in varchar2) return c_Type;
end pag_cs_power;
函數(shù)代碼:
FUNCTION FUN_CS_GETDICTLIST(
v_DictIndex in varchar2) return c_Type
as
c_cursor c_Type;
begin
open c_cursor for
select DICTID,DICTNAME FROM SYS_DICT WHERE DICTINDEX = v_DictIndex;
return c_cursor;
end FUN_CS_GETDICTLIST;
----------------------------------------------------------------------
3、P4機(jī)器安裝ORACLE
(1)、將ORACLE安裝軟件拷貝到硬盤。
(2)、將 硬盤目錄文件\stage\Components\oracle.swd.jre\1.1.7.30/1
\DataFiles\Expanded\jre\win32\bin\symcjit.dll的文件改名為symcjit.old
(3).再運(yùn)行SETUP.exe 文件進(jìn)行安裝。
-----------------------------------------------------------------------
4、單引號的插入問題
SQL> insert into a values('i''m good'); --兩個(gè)''可以表示一個(gè)'
SQL> insert into a values('i'||chr(39)||'m good'); --chr(39)代表字符'
SQL> insert into a values('a'||'&'||'b');
-----------------------------------------------------------------------
5、全數(shù)據(jù)庫的導(dǎo)入與導(dǎo)出
exp username/password full=y file=yourdata.dmp grants=y rows=y
imp username/password full=y ignore=y file=yourdata.dmp grants=y
6、exp與imp的具體用法
exp username/password@mzbs_61 full=y file=yourdata.dmp grants=y rows=y
imp username/password full=y ignore=y file=yourdata.dmp grants=y
exp mzbs/mzbs@mzbs_61 file = c:\zzzzzzz.dmp grants = y rows = y
imp mzbs/mzbs@mzbs_61 file = c:\zzzzzzz.dmp grants = y ignore=y FULL=Y
(1)
exp參數(shù):
關(guān)鍵字 說明(默認(rèn))
----------------------------------------------
USERID 用戶名/口令
FULL 導(dǎo)出整個(gè)文件 (N)
BUFFER 數(shù)據(jù)緩沖區(qū)的大小
OWNER 所有者用戶名列表
FILE 輸出文件 (EXPDAT.DMP)
TABLES 表名列表
COMPRESS 導(dǎo)入一個(gè)范圍 (Y)
RECORDLENGTH IO 記錄的長度
GRANTS 導(dǎo)出權(quán)限 (Y)
INCTYPE 增量導(dǎo)出類型
INDEXES 導(dǎo)出索引 (Y)
RECORD 跟蹤增量導(dǎo)出 (Y)
ROWS 導(dǎo)出數(shù)據(jù)行 (Y)
PARFILE 參數(shù)文件名
CONSTRAINTS 導(dǎo)出限制 (Y)
CONSISTENT 交叉表一致性
LOG 屏幕輸出的日志文件
STATISTICS 分析對象 (ESTIMATE)
DIRECT 直接路徑 (N)
TRIGGERS 導(dǎo)出觸發(fā)器 (Y)
FEEDBACK 顯示每 x 行 (0) 的進(jìn)度
FILESIZE 各轉(zhuǎn)儲(chǔ)文件的最大尺寸
QUERY 選定導(dǎo)出表子集的子句
imp參數(shù):
關(guān)鍵字 說明(默認(rèn))
----------------------------------------------
USERID 用戶名/口令
FULL 導(dǎo)入整個(gè)文件 (N)
BUFFER 數(shù)據(jù)緩沖區(qū)大小
FROMUSER 所有人用戶名列表
FILE 輸入文件 (EXPDAT.DMP)
TOUSER 用戶名列表
SHOW 只列出文件內(nèi)容 (N)
TABLES 表名列表
IGNORE 忽略創(chuàng)建錯(cuò)誤 (N)
RECORDLENGTH IO 記錄的長度
GRANTS 導(dǎo)入權(quán)限 (Y)
INCTYPE 增量導(dǎo)入類型
INDEXES 導(dǎo)入索引 (Y)
COMMIT 提交數(shù)組插入 (N)
ROWS 導(dǎo)入數(shù)據(jù)行 (Y)
PARFILE 參數(shù)文件名
LOG 屏幕輸出的日志文件
CONSTRAINTS 導(dǎo)入限制 (Y)
DESTROY 覆蓋表空間數(shù)據(jù)文件 (N)
INDEXFILE 將表/索引信息寫入指定的文件
SKIP_UNUSABLE_INDEXES 跳過不可用索引的維護(hù) (N)
ANALYZE 執(zhí)行轉(zhuǎn)儲(chǔ)文件中的 ANALYZE 語句 (Y)
FEEDBACK 顯示每 x 行 (0) 的進(jìn)度
TOID_NOVALIDATE 跳過指定類型 id 的校驗(yàn)
FILESIZE 各轉(zhuǎn)儲(chǔ)文件的最大尺寸
RECALCULATE_STATISTICS 重新計(jì)算統(tǒng)計(jì)值 (N)
(2)
一、建立一個(gè)expdata.sql文件
USERID=RMTAFIS/3 這里寫你的用戶名和密碼
BUFFER=32768
OWNER=RMTAFIS 這里寫導(dǎo)出的用戶
FILE=E:\Exp\RMTAFIS.DMP 導(dǎo)出的文件,可以是相對路徑
ROWs=Y
GRANTS=Y
COMPRESS=Y
CONSISTENT=Y
二、建立一個(gè)expdata.bat
exp parfile=expdata.sql
如果是805
exp80 parfile=expdata.sql
雙擊expdata.bat就導(dǎo)出數(shù)據(jù)了
7、如果在like的變量中,是以‘%’開頭的話,是不會(huì)使用index的。反之,不是以‘%‘開頭,而又有相應(yīng)的index,是會(huì)使用index的。具體可以用plain plan來看一下。
8、復(fù)制空表結(jié)構(gòu)
create table new_table
as select * from old_table where 1=2;
復(fù)制表(含記錄)
create table new_table
as select * from old_table ;
9、把一個(gè)用戶下的表導(dǎo)入到另一個(gè)用戶下,但需要改名
先用exp導(dǎo)出所有的表;
用imp將導(dǎo)出的表導(dǎo)入到新用戶;
在新用戶下,執(zhí)行
select 'RENAME TABLE '||tname||' TO NEW_'||tname||';'
from tab
where tabtype='TABLE';
將上面的查詢結(jié)果保存到一個(gè)sql文件中,處理后執(zhí)行就可以了。
10、審計(jì)步驟
修改參數(shù)文件init.ora,參數(shù)audit_trail值為true;
重新啟動(dòng)數(shù)據(jù)庫;
打開審計(jì)audit session; (audit session by username)
執(zhí)行登錄操作;
察看審計(jì)結(jié)果:
select * from dba_audit_session;
select * from sys.aud$;
select * from dba_audit_trail;
select * from dba_audit_exists;
關(guān)于審計(jì):
為了使oracle8i的審計(jì)功能可用,必須在數(shù)據(jù)庫參數(shù)文件中修改audit_trail初始參數(shù),而這個(gè)修改并不支配oracle8i把生成的審計(jì)記錄記入審計(jì)痕跡中,
由于狀態(tài),特權(quán)和模式對象已被修改,因而審計(jì)的默認(rèn)值不可用,其參數(shù)應(yīng)設(shè)置為none.下面列出了audit_trail 可用的參數(shù)
db_使數(shù)據(jù)庫審計(jì)和全部直屬審計(jì)記錄到數(shù)據(jù)庫審計(jì)的痕跡中
os_是數(shù)據(jù)庫審計(jì)依據(jù)直屬審計(jì)記入到操作系統(tǒng)的審計(jì)很集中
none_不可用
11、BFILE的用法
(1)、create or replace directory
BFILE_TEST
as
'/oracle/oradata/bfiles';
(2)、grant read on directory BFILE_TEST to SCOTT;
(3)、host ls -l /oracle/oradata/bfiles/1.TXT
(4)、connect SCOTT/TIGER
create table BFILES (ID number, TEXT bfile );
(5)、insert into BFILES values ( 1,
bfilename ( 'BFILE_TEST', '1.TXT' ) );
12、如何在Windows 2000下將Oracle完全卸載?
一、系統(tǒng)環(huán)境:
(1)、操作系統(tǒng):Windows 2000 Server,機(jī)器內(nèi)存128M
(2)、數(shù)據(jù)庫: Oracle 8i R2 (8.1.6) for NT 企業(yè)版
(3)、安裝路徑:D:\ORACLE
二、卸載步驟:
(1)、開始->設(shè)置->控制面板->管理工具->服務(wù)
停止所有Oracle服務(wù)。
(2)、開始->程序->Oracle - OraHome81->Oracle Installation Products->Universal Installer
卸裝所有Oracle產(chǎn)品
(3)、運(yùn)行regedit,選擇HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del鍵刪除這個(gè)入口。
(4)、運(yùn)行regedit,選擇HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滾動(dòng)這個(gè)列表,刪除所有Oracle入口
(5)、從桌面上、STARTUP(啟動(dòng))組、程序菜單中,刪除所有有關(guān)Oracle的組和圖標(biāo)
(6)、重新啟動(dòng)計(jì)算機(jī),重起后才能完全刪除Oracle所在目錄
(7)、刪除與Oracle有關(guān)的文件,選擇Oracle所在的缺省目錄C:\Oracle,刪除這個(gè)入口目錄及所有子目錄,
并從Windows 2000目錄(一般為C:\WINNT)下刪除以下文件
ORACLE.INI、oradim80.INI
(8)、WIN.INI文件中若有[ORACLE]的標(biāo)記段,刪除該段
--------------------------------------------------------------------
13、如何使用SQLPLUS和SVRMGRL運(yùn)行腳本
(1)、用sqlplus調(diào)用:
c:\script.txt的內(nèi)容
startup;
命令行:sqlplus internal/oracle @c:\script.txt
(2)、用svrmgrl調(diào)用:
c:\script.txt的內(nèi)容
connect internal/oracle;
startup;
命令行:svrmgrl @c:\script.txt
--------------------------------------------------------------------
14、ORACLE的臨時(shí)表
CREATE GLOBAL TEMPORARY TABLE TABLENAME (
COL1 VARCHAR2(10),
COL2 NUMBER
) ON COMMIT PRESERVE(DELETE) ROWS ;
這種臨時(shí)表不占用表空間,而且不同的SESSION之間互相看不到對方的數(shù)據(jù)
在會(huì)話結(jié)束后表中的數(shù)據(jù)自動(dòng)清空,如果選了DELETE ROWS,則在提交的時(shí)候即清空數(shù)據(jù),PRESERVE則一直到會(huì)話結(jié)束
----------------
在Oracle8i中,可以創(chuàng)建以下兩種臨時(shí)表:
(1)會(huì)話特有的臨時(shí)表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT PRESERVE ROWS;
(2)事務(wù)特有的臨時(shí)表
CREATE GLOBAL TEMPORARY <TABLE_NAME> (<column specification>)
ON COMMIT DELETE ROWS;
CREATE GLOBAL TEMPORARY TABLE MyTempTable
所建的臨時(shí)表雖然是存在的,但是你試一下insert 一條記錄然后用別的連接登上去select,記錄是空的,明白了吧,我把下面兩句話再貼一下:
--ON COMMIT DELETE ROWS 說明臨時(shí)表是事務(wù)指定,每次提交后ORACLE將截?cái)啾恚▌h除全部行)
--ON COMMIT PRESERVE ROWS 說明臨時(shí)表是會(huì)話指定,當(dāng)中斷會(huì)話時(shí)ORACLE將截?cái)啾怼?BR>沖突的問題更本不用考慮.
臨時(shí)表只是保存當(dāng)前會(huì)話(session)用到的數(shù)據(jù),數(shù)據(jù)只在事務(wù)或會(huì)話期間存在。
通過CREATE GLOBAL TEMPORARY TABLE命令創(chuàng)建一個(gè)臨時(shí)表,對于事務(wù)類型的臨時(shí)表,
數(shù)據(jù)只是在事務(wù)期間存在,對于會(huì)話類型的臨時(shí)表,數(shù)據(jù)在會(huì)話期間存在。
會(huì)話的數(shù)據(jù)對于當(dāng)前會(huì)話私有。每個(gè)會(huì)話只能看到并修改自己的數(shù)據(jù)。DML鎖不會(huì)加到
臨時(shí)表的數(shù)據(jù)上。下面的語句控制行的存在性。
● ON COMMIT DELETE ROWS 表名行只是在事務(wù)期間可見
● ON COMMIT PRESERVE ROWS 表名行在整個(gè)會(huì)話期間可見
可以對臨時(shí)表創(chuàng)建索引,視圖,出發(fā)器,可以用export和import工具導(dǎo)入導(dǎo)出表的
定義,但是不能導(dǎo)出數(shù)據(jù)。表的定義對所有的會(huì)話可見。
例如:
CREATE GLOBAL TEMPORARY TABLE TEMP_TAB1(
table_name VARCHAR2(20),
primary_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT PRESERVE ROWS;
CREATE GLOBAL TEMPORARY TABLE TEMP_TAB2(
table_name VARCHAR2(20),
primary_key VARCHAR2(100),
field VARCHAR2(1000))
ON COMMIT DELETE ROWS;
15、如何使用OEM
先啟數(shù)據(jù)庫服務(wù),再啟oracle manager服務(wù)。
否則重建檔案資料庫
如果還不行就把ORACLEHOME\NETWORK\sqlnet.ora文件的內(nèi)容
sqlnet.authentication_services=(NTS)
改成sqlnet.authentication_services=(NONE)
登錄 sysman/oem_temp
16、TNS:沒有監(jiān)聽器的問題。
(1)查一下監(jiān)聽服務(wù)是否啟動(dòng),
如果沒有啟動(dòng),則運(yùn)行l(wèi)snrctrl start。
(2)查看一下 LISTENER.ORA內(nèi)監(jiān)聽的服務(wù)器名、服務(wù)器IP、數(shù)據(jù)庫名是否正確。
(3)查看一下 TNSNAMES.ORA內(nèi)服務(wù)器名、服務(wù)器IP、數(shù)據(jù)庫名是否正確。
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ù)庫的。
(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ù)庫的服務(wù)后,可以做一個(gè)數(shù)據(jù)庫的全備份。
在WIN2000上建一個(gè)同名的數(shù)據(jù)庫,隨便建,越小越好,可以縮短時(shí)間。
把WINNT下的數(shù)據(jù)庫備份恢復(fù)到WIN2000的數(shù)據(jù)庫上就可以了。但建庫的目錄
必須一樣。(也可以不一樣,但需要更改數(shù)據(jù)文件的連接)
我曾多次為用戶這樣移植數(shù)據(jù),萬無一失的。
注意:因?yàn)閿?shù)據(jù)很重要,所以建議你先EXP備份一下。這是我們的習(xí)慣。
20、ORACLE SQL PLUS Worksheet亂碼問題。
dbappscfg.properties,修改該文件即可解決上述問題。$ORACLE_HOME\sysman\config目錄下,修改
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
對于Windows操作系統(tǒng),還需要修改一項(xiàng)
#SQLPLUS_SYSTEMROOT=c:\\WINNT40
為SQLPLUS_SYSTEMROOT=C:\\WINNT
如操作系統(tǒng)的主目錄在C盤的Winnt下
對于后面一項(xiàng)的修改只對Windows操作系統(tǒng)進(jìn)行,對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掉名字是小寫的表(用雙引號括起來)。
drop table "tablename"
select * from "tablename"
22、日期的顯示格式
注意:SIMPLIFIED CHINESE(簡體中文需要" "括起來)
別的國家不用" " 例如:ENGLISH
select to_char(sysdate,'DAY','NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE''') from dual;
------------
星期四
------------
23、一個(gè)從ORACLE中讀表信息的存儲(chǔ)過程
可以在vc下調(diào)用存儲(chǔ)過程來實(shí)現(xiàn)
例子:
先修改init.ora
例如:
utl_file_dir=/usr //路徑為 oracle所在的盤:/usr
此過程將用戶TEMP的P1過程的代碼保存到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)、如果沒有數(shù)據(jù),則可以修改寬度。比如NUMBER,CHAR,VARCHAR2
(3)、如果有數(shù)據(jù),則可以增加寬度。比如NUMBER,CHAR,VARCHAR2
注意:不可以減小寬度。
(4)、語法:alter talbe tablename modify columnname columntype not null;
25、如何查看用戶的存儲(chǔ)過程和函數(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、對行加鎖時(shí),只對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ā)器無效(login_on)
svrmgrl
connect internal/oracle
alter trigger login_on disable;
使觸發(fā)器為無效alter trigger yourtriggername disable
如果是對于某一個(gè)表的所有的觸發(fā)器:
alter table yourtablename disable all triggers
30、如在SQLPLUS中何調(diào)用存儲(chǔ)過程和函數(shù)。
call只能調(diào)用存儲(chǔ)過程后面加上括號就可以了
call 存儲(chǔ)過程名();
exec procedurename;(可以不加())
調(diào)用函數(shù)用sql語句
select 函數(shù)名(參數(shù)) from dual;
31、函數(shù)中如果調(diào)用DML語句就不可以調(diào)用SELECT語句
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).如果你原來的http server是用IIS等其他發(fā)布工具做的,那么可以在服務(wù)中停掉 oracle http server服務(wù),并且改為手動(dòng)啟動(dòng)。
(2).如果原來的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語句,在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(以上語句所查出的);
(3)、使用ALTER SYSTEM KILL SESSION 'v_sid,v_serial#' immediate; 試一試如不行轉(zhuǎn)
三、LINUX和UNIX下
轉(zhuǎn)到操作系統(tǒng)下執(zhí)行:kill -9 spid (以上語句所查出的)
36、ORACLE中檢查表是否被鎖的語句
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的登錄問題,用戶名和密碼。
可以直接輸入:
internal/oracle@serivce_name
sys/change_on_install@serivce_name
system/manager@serivce_name
scott/tiger@serivce_name
注意:
9i中沒有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#=對象id and name = 字段
(一般不要這樣用,會(huì)造成意想不到的結(jié)果)
注:最好是刪除再建立新的列
39、把用戶模式對象所在的表空間移到新的表空間
(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 的帳號要和登陸數(shù)據(jù)庫的帳號相同);
(2).控制面板――>管理工具―― >本地安全策略――>本地策略――>用戶權(quán)利指派――>
作為批處理作業(yè)登陸――>添加sys和sysman兩個(gè)帳號。
(3).使用Enterprise Manager配置輔助工具
開始→程序→Oracle - OraHome81→Enterprise Manager→Configuration Assistant
a、使用Configuration Assistant工具來創(chuàng)建一個(gè)新的資料檔案庫。
(4).控制面板――>管理工具―― > 服務(wù),查看OracleOraHome81ManagementServer是否啟動(dòng),如果沒有啟動(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ù)庫:name:sys
(7). 在搜索/添加結(jié)點(diǎn)后,以sysman/ *** 登陸到該結(jié)點(diǎn),以sys/ *** as sysdba登陸數(shù)據(jù)庫(也就是在首選身份設(shè)置的結(jié)果)。
(8). 在工具→備份管理→向?qū)АA(yù)定義備份策略(自定義備份策略)→提交備份計(jì)劃
(9).從開始→程序→Oracle - OraHome81→Console 登陸到 控制臺(tái),查看活動(dòng)(歷史記錄)可以看到你的備份是否成功,如果不成功,可以點(diǎn)擊備份看明細(xì)。(我第一次也沒成功,后來我修改系統(tǒng)的臨時(shí)目錄C:\WINNT\Temp→c:\temp\systmp,重新啟動(dòng)機(jī)器就ok了)
41、如何修改INTERNAL的口令
以下是oracle8的8i你可以仿照來做
(1)、進(jìn)入DOS下
(2)、默認(rèn)internal密碼文件在c:\orant\database下,是隱藏屬性,文件名稱與數(shù)據(jù)庫實(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)一定要用大寫,并且不要用單引號
(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ù)庫,重新啟動(dòng)
(8)、進(jìn)入svrmgr30服務(wù)程序,測試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ù)名配置
-->刪除...(刪除原來的本地網(wǎng)絡(luò)服務(wù)名)
(3).重復(fù)第二步
-->添加.. (新建本地網(wǎng)絡(luò)服務(wù)名)
(4).restart oracle
注意:NTS是WinNT的認(rèn)證方式
43、命令行編譯存儲(chǔ)過程
ALTER PROCEDURE procedure_name COMPILE;
44、關(guān)于如何建立數(shù)據(jù)庫鏈接(DBlink)
可以通過建立客戶機(jī)數(shù)據(jù)庫網(wǎng)絡(luò)服務(wù)名的辦法,將服務(wù)器的名字或是IP地址設(shè)置為你需要連接的那個(gè)機(jī)器就行
如果你要在一個(gè)應(yīng)用中連接它,現(xiàn)在做好上步工作,然后按如下處理
建立數(shù)據(jù)庫連接
CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING 'NetServiceName';
DBaseLinkName 是建立的數(shù)據(jù)連接名稱
UserName 是可以連接到的用戶名
Password 是可以連接到的用戶的密碼
NetServiceName 是可以連接的數(shù)據(jù)庫網(wǎng)絡(luò)服務(wù)名或是數(shù)據(jù)庫名
查詢建立數(shù)據(jù)連接的表實(shí)例
Select * From TableName@ DBaseLinkName;
注意:如果在CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING 'NetServiceName';中NetServiceName 是數(shù)據(jù)庫名修改init.ora中:global_names = true
否則global_names = false
init.ora中:global_names = false
45、Object Browser7.0中文版的破解方法
到OBJECT BROWSER的目錄里,找到DeIsL1.isu文件,用記事本打開,看到的是亂碼吧?沒關(guān)系,將Stirling Technologies ,Inc 這個(gè)字符串前面的亂碼去掉(如果有的話),讓后在Stirling之前加一個(gè)空格(一定要加的),保存,退出,重新運(yùn)行一下看看,雖然還有提示輸入驗(yàn)證信息,但是不用管他,直接確定就行。是不是可以用了呢?保證好使。
46、錯(cuò)誤號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語句的全部操作內(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ā)器來生成一個(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號
'your_procedure;',//要執(zhí)行的過程
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為過程名稱
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)被刪掉,通過什么方法才能恢復(fù)!
先mount數(shù)據(jù)庫,然后再目錄下建同名文件redo01.log、redo02.log、redo03.log
然后執(zhí)行alter databse clear logfile group n
對于current的group,執(zhí)行alter databse clear unarchived logfile group n
然后,再open,就ok了
53、Oracle常見服務(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ù)庫的時(shí)候進(jìn)行ORACLE的備份。
原理停復(fù)雜的,你去找本書看看吧。
舉個(gè)簡單的例子:備份表空間USERS
ALTER TABLESPACE USERS BEGIN BACKUP
COPY USERS TABLESPACE 的數(shù)據(jù)文件到備份目錄
ALTER TABLESPACE USERS END BACKUP
55、導(dǎo)致索引不起作用的解決辦法
你的問題我剛處理過,是由optimizer_mode參數(shù)引起的,該參數(shù)的默認(rèn)值為choose,即為如表有statis則查詢走基于cost的方式,否則走基于rule的方式,因些你可以有以下幾個(gè)解決方法。
(1)、簡單的在init<sid>.ora中設(shè)optimizer_mode=rule,重起數(shù)據(jù)庫。
(2)、使用analyze table table_name(索引基表) delete statistics;
(3)、最后一個(gè)萬能辦法,將表和索引drop掉,重建。
56、關(guān)于數(shù)據(jù)庫進(jìn)程的問題。
(1).查看相關(guān)進(jìn)程在數(shù)據(jù)庫中的會(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ù)庫中被鎖住的對象和相關(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ù)庫
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(包寫入程序失?。?/P>
(1) 這個(gè)錯(cuò)誤在客戶端遇到過,通常重新連接一下服務(wù)器就好了。
服務(wù)器重新啟動(dòng)的時(shí)候,在client也會(huì)遇到該錯(cuò)誤。
這個(gè)錯(cuò)誤你是在server還是client上遇到的?最常用的辦法就是加上跟蹤,查看一下 跟蹤記錄,分析分析錯(cuò)誤的原因。
網(wǎng)絡(luò)問題也會(huì)出現(xiàn)該錯(cuò)誤,比如網(wǎng)絡(luò)路由沒有配置好。
(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ā)生這樣的問題的。
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è)真子集(就是浪子所說的只能從WE8ISO8859P1轉(zhuǎn)到ZHS16GBK的原因)
(3)、CLOB字段裝換可能有問題,建議在轉(zhuǎn)換以前把有CLOB字段的表導(dǎo)出后DROP,轉(zhuǎn)換以后再導(dǎo)回
(4)、該轉(zhuǎn)換不可逆,所以在做這個(gè)操作以前建議做數(shù)據(jù)庫全備份
66、修改數(shù)據(jù)庫名字
(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這段語句拷出
(3)、正常宕庫,后啟動(dòng)到nomount下
svrmgrl>shutdown immediate
svrmgrl>startup nomount
(4)、執(zhí)行create controlfile那段語句
(5)、打開數(shù)據(jù)庫
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、使索引無效
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ù)倉庫卷起(rollup)或裝載且要加快裝載過程時(shí)該方式
是有用的。
Enabled novalidate:是能無效,該狀態(tài)的表可以包含非法
的數(shù)據(jù),但不可能加入新的非法數(shù)據(jù)。
Enabled validate:使能有效,一個(gè)使能的約束是強(qiáng)制的,表的數(shù)據(jù)檢查
有效
75、在SQLPLUS中調(diào)用存儲(chǔ)過程
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ǔ)過程的三個(gè)文件。
cat*.sql
dbms*.sql
utl*.sql
76、JOB中日期的使用
每個(gè)月1號:
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 的問題
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)
--使約束無效
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);