原文引自:-------------
第一個#是改共享內存大小的
第二個#是啟動數據庫的。
(3)
ftp://ftp.rpmfind.net/linux/rhcontri ... lerun9i-1.0-1.i386.rpm
下載這個軟件包并安裝。
里面每個文件都有一些要修改的地方。配置完成之后,就可以在系統服務配置中找到它,選中它就可能以自啟動了。
18、回滾段不夠的處理方法
(1)、先使回滾段脫機一個,
如果不好用,則再脫機一個。直至好用。
ALTER rollback segment rollbackname offline;
(2)、增加回滾段數據文件的大小
alter database datafile 'datafile' resize 200M;
19、WINNT向WIN2000移植
不用EXP和IMP的
停掉數據庫的服務后,可以做一個數據庫的全備份。
在WIN2000上建一個同名的數據庫,隨便建,越小越好,可以縮短時間。
把WINNT下的數據庫備份恢復到WIN2000的數據庫上就可以了。但建庫的目錄
必須一樣。(也可以不一樣,但需要更改數據文件的連接)
我曾多次為用戶這樣移植數據,萬無一失的。
注意:因為數據很重要,所以建議你先EXP備份一下。這是我們的習慣。
20、ORACLE SQL PLUS Worksheet亂碼問題。
dbappscfg.properties,修改該文件即可解決上述問題。$ORACLE_HOME\sysman\config目錄下,修改
# SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
為SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。
對于Windows操作系統,還需要修改一項
#SQLPLUS_SYSTEMROOT=c:\\WINNT40
為SQLPLUS_SYSTEMROOT=C:\\WINNT
如操作系統的主目錄在C盤的Winnt下
對于后面一項的修改只對Windows操作系統進行,對UNIX操作系統則不需要。如果在Windows操作系統中不修改該項,在Oracle Enterprise Manager中,連接系統時,會提示如下的錯誤:
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、一個從ORACLE中讀表信息的存儲過程
可以在vc下調用存儲過程來實現
例子:
先修改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、關于修改ORACLE的列寬
(1)、不論如何都要備份數據。
(2)、如果沒有數據,則可以修改寬度。比如NUMBER,CHAR,VARCHAR2
(3)、如果有數據,則可以增加寬度。比如NUMBER,CHAR,VARCHAR2
注意:不可以減小寬度。
(4)、語法:alter talbe tablename modify columnname columntype not null;
25、如何查看用戶的存儲過程和函數
select name,text from user_source where name= Procedurename and type = 'PROCEDURE' order by line;
26、在批處理中自動啟動ORACLE服務(win2000)
編一個批處理文件
net start OracleServiceSID
OracleServiceSID是ORACLE的實例名稱
27、對行加鎖時,只對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、使觸發器無效(login_on)
svrmgrl
connect internal/oracle
alter trigger login_on disable;
使觸發器為無效alter trigger yourtriggername disable
如果是對于某一個表的所有的觸發器:
alter table yourtablename disable all triggers
30、如在SQLPLUS中何調用存儲過程和函數。
call只能調用存儲過程后面加上括號就可以了
call 存儲過程名();
exec procedurename;(可以不加())
調用函數用sql語句
select 函數名(參數) from dual;
31、函數中如果調用DML語句就不可以調用SELECT語句
32、REDO LOG BUFFER 什么時候寫到REDO LOGFILE中
(1)、在COMMIT的時候
(2)、重做日志緩沖區1/3滿的時候
(3)、重做日志緩沖區大于1M的時候
(4)、它寫信息必須是在數據寫進程前調用
(5)、一般CHECKPOINT在日志組切換的時候進行或者由初始化參數設定
在CHECKPOINT的時候需要調用數據寫進程
33、ORACLE的http server 把原有的WEB server沖掉,如何解決?
(1).如果你原來的http server是用IIS等其他發布工具做的,那么可以在服務中停掉 oracle http server服務,并且改為手動啟動。
(2).如果原來的http server是用apache發布,則可以改變http.conf中的參數
34、關于創建重建查看索引
創建索引:
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如何查殺用戶的進程
一|根據用戶的應用程序和SQL語句,在DBA STUDIO找到用戶的SESSION并斷開其連接
二、
(1)、要殺掉一個session應先應知道其sid和serial#,假設你已經知道。
(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; 試一試如不行轉
三、LINUX和UNIX下
轉到操作系統下執行: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用戶
如果是本機則可以省略@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 = 字段
(一般不要這樣用,會造成意想不到的結果)
注:最好是刪除再建立新的列
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). 控制面板――>管理工具―― >計算機管理――>本地用戶和組――>用戶――>新建用戶sys和sysman(sys和sysman 的帳號要和登陸數據庫的帳號相同);
(2).控制面板――>管理工具―― >本地安全策略――>本地策略――>用戶權利指派――>
作為批處理作業登陸――>添加sys和sysman兩個帳號。
(3).使用Enterprise Manager配置輔助工具
開始→程序→Oracle - OraHome81→Enterprise Manager→Configuration Assistant
a、使用Configuration Assistant工具來創建一個新的資料檔案庫。
(4).控制面板――>管理工具―― > 服務,查看OracleOraHome81ManagementServer是否啟動,如果沒有啟動,則手動啟動該服務。
(5).以sysman/oem_temp(default)登陸DBA Studio
(第二個選項:登陸到Oracle Management Server),立即修改密碼為你剛才在NT下建的用戶sysman的密碼。
(6). 以sysman/ *** (bluesky) 從開始→程序→Oracle - OraHome81→Console 登陸到 控制臺。
在 系統→首選項→首選身份證明(我的首選身份設置如下:)
DEFAULT節點:name:sysman
DEFAULT數據庫:name:sys
(7). 在搜索/添加結點后,以sysman/ *** 登陸到該結點,以sys/ *** as sysdba登陸數據庫(也就是在首選身份設置的結果)。
(8). 在工具→備份管理→向導→預定義備份策略(自定義備份策略)→提交備份計劃
(9).從開始→程序→Oracle - OraHome81→Console 登陸到 控制臺,查看活動(歷史記錄)可以看到你的備份是否成功,如果不成功,可以點擊備份看明細。(我第一次也沒成功,后來我修改系統的臨時目錄C:\WINNT\Temp→c:\temp\systmp,重新啟動機器就ok了)
41、如何修改INTERNAL的口令
以下是oracle8的8i你可以仿照來做
(1)、進入DOS下
(2)、默認internal密碼文件在c:\orant\database下,是隱藏屬性,文件名稱與數據庫實例名有關
如默認ORACLE實例名為ORCL,則internal密碼文件名為pwdorcl.ora
(3)、建立新的internal密碼文件,起個新名字為pwdora8.ora
orapwd80 file=pwdora8.ora password=B entries=5 --注:password項一定要用大寫,并且不要用單引號
(4)、拷貝pwdora8.ora文件到c:\orant\database目錄下
(5)、運行regedit,修改口令文件指向
(6)、找到HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE項
定位ORA_ORCL_PWFILE子項,改變其值為c:\orant\database\pwdora8.ora
(7)、關閉ORACLE數據庫,重新啟動
(8)、進入svrmgr30服務程序,測試internal密碼是否更改成功
42、憑證檢索失敗的決絕方法。
原因: 由于Oracle不能應用OS認證而導致憑證檢索失敗
解決辦法:
(1).打開network/admin下的sqlnet.ora
修改SQLNET.AUTHENTICATION _SERVICES=(NONE)。
(2).啟動Net8 configuration assistant-->選第三項本地網絡服務名配置
-->刪除...(刪除原來的本地網絡服務名)
(3).重復第二步
-->添加.. (新建本地網絡服務名)
(4).restart oracle
注意:NTS是WinNT的認證方式
43、命令行編譯存儲過程
ALTER PROCEDURE procedure_name COMPILE;
44、關于如何建立數據庫鏈接(DBlink)
可以通過建立客戶機數據庫網絡服務名的辦法,將服務器的名字或是IP地址設置為你需要連接的那個機器就行
如果你要在一個應用中連接它,現在做好上步工作,然后按如下處理
建立數據庫連接
CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING 'NetServiceName';
DBaseLinkName 是建立的數據連接名稱
UserName 是可以連接到的用戶名
Password 是可以連接到的用戶的密碼
NetServiceName 是可以連接的數據庫網絡服務名或是數據庫名
查詢建立數據連接的表實例
Select * From TableName@ DBaseLinkName;
注意:如果在CREATE DATABASE LINK DBaseLinkName CONNECT TO UserName IDENTIFIED BY Password USING 'NetServiceName';中NetServiceName 是數據庫名修改init.ora中:global_names = true
否則global_names = false
init.ora中:global_names = false
45、Object Browser7.0中文版的破解方法
到OBJECT BROWSER的目錄里,找到DeIsL1.isu文件,用記事本打開,看到的是亂碼吧?沒關系,將Stirling Technologies ,Inc 這個字符串前面的亂碼去掉(如果有的話),讓后在Stirling之前加一個空格(一定要加的),保存,退出,重新運行一下看看,雖然還有提示輸入驗證信息,但是不用管他,直接確定就行。是不是可以用了呢?保證好使。
46、錯誤號ORA-01536:space quota exceeded for table space 'ALCATEL'的解決辦法
三個解決辦法,任你選擇:
(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語句的全部操作內容
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
48、ORACLE中如何實現自增字段:
(1)第一種方法
ORACLE一般的做法是同時使用序列和觸發器來生成一個自增字段.
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參數
job_queue_processes = 4 8i,9i (允許同時執行的JOB數)
job_queue_interval = 10 8i
job_queue_keep_connections=true 8i
DBMS_JOB.SUBMIT(:jobno,//job號
'your_procedure;',//要執行的過程
trunc(sysdate)+1/24,//下次執行時間
'trunc(sysdate)+1/24+1'//每次間隔時間
);
刪除job:dbms_job.remove(jobno);
修改要執行的操作:dbms_job.what(jobno,what);
修改下次執行時間:dbms_job.next_date(job,next_date);
修改間隔時間:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
啟動job:dbms_job.run(jobno);
注意:修改后一定要COMMIT;
例子:
VARIABLE jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,
'Procdemo;',//Procdemo為過程名稱
SYSDATE, 'SYSDATE + 1/720');
commit;
end;
50、如何配置mts
修改初始化參數文件
增加以下內容:
mts_dispatchers = "(protocol=TCP)(disp=2)(con=1000)"
mts_max_dispatchers = 50
mts_servers = 20
mts_max_servers = 50
51、取出一個表的最后一條記錄
select * from (select rownum id,tname.* from tname) a where a.id=(select count(*) from a);
52、重做日志(Redolog)被刪掉,通過什么方法才能恢復!
先mount數據庫,然后再目錄下建同名文件redo01.log、redo02.log、redo03.log
然后執行alter databse clear logfile group n
對于current的group,執行alter databse clear unarchived logfile group n
然后,再open,就ok了
53、Oracle常見服務
幾個主要的:
OracleOraHome81TNSListener 監聽服務
OracleServiceSID ORACLE服務
OracleOraHome81Agent 智能代理服務
OracleOraHome81CMan 連接管理服務
OracleOraHome81HTTPServer APACHE WEB 服務
OracleOraHome81ManagementServer ORACLE 企業管理器服務
OracleOraHome81Names ORACLE命名服務
剩下的也不常用。
54、ORACLE的熱備份
在不關閉數據庫的時候進行ORACLE的備份。
原理停復雜的,你去找本書看看吧。
舉個簡單的例子:備份表空間USERS
ALTER TABLESPACE USERS BEGIN BACKUP
COPY USERS TABLESPACE 的數據文件到備份目錄
ALTER TABLESPACE USERS END BACKUP
55、導致索引不起作用的解決辦法
你的問題我剛處理過,是由optimizer_mode參數引起的,該參數的默認值為choose,即為如表有statis則查詢走基于cost的方式,否則走基于rule的方式,因些你可以有以下幾個解決方法。
(1)、簡單的在init<sid>.ora中設optimizer_mode=rule,重起數據庫。
(2)、使用analyze table table_name(索引基表) delete statistics;
(3)、最后一個萬能辦法,將表和索引drop掉,重建。
56、關于數據庫進程的問題。
(1).查看相關進程在數據庫中的會話
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).查看數據庫中被鎖住的對象和相關會話
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).查看相關會話正在執行的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、運行SQLPLUS時不用輸入用戶名和密碼,進入之后使用CONNECT
SQLPLUS /NOLOG
SQL>CONNECT SCOTT/TIGER
59、查看當前會話
userenv() 函數
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 實例數
SYS_CONTEXT() 函數
select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') from dual; 當前模式
select SYS_CONTEXT('USERENV','CURRENT_SCHEMAID') from dual; 當前模式ID
select SYS_CONTEXT('USERENV','CURRENT_USER') from dual; 當前用戶
select SYS_CONTEXT('USERENV','DB_NAME') from dual; 數據庫
select SYS_CONTEXT('USERENV','HOST') from dual; 主機
..........
60、刪除重復列的方法
(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) 這個錯誤在客戶端遇到過,通常重新連接一下服務器就好了。
服務器重新啟動的時候,在client也會遇到該錯誤。
這個錯誤你是在server還是client上遇到的?最常用的辦法就是加上跟蹤,查看一下 跟蹤記錄,分析分析錯誤的原因。
網絡問題也會出現該錯誤,比如網絡路由沒有配置好。
(2) 安裝的殺毒軟件導致的
(3) 服務器端的IP是否被改動
(4) 最后不行的話,重新創建監聽器
62、ORACLE服務不能自動啟動的解決辦法
把ORACLEHOME\network\ADMIN\sqlnet.ora
文件中的 sqlnet.authentication_service=(nts)
注釋掉就可以了
63、不完全的時間點恢復
shutdown immediate
copy 備份文件到需要恢復的目錄下
startup mount
recover database until time '2002-12-26 09:00:00'
alter database open resetlogs
自己仔細檢查一下,不會發生這樣的問題的。
64、oracle如何設置查詢超時
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)、執行ALTER DATABASE CHARACTER SET必須有SYSDBA權限,并且在STARTUP RESTRICT模式下執行
(2)、原字符集必須是目標字符集的一個真子集(就是浪子所說的只能從WE8ISO8859P1轉到ZHS16GBK的原因)
(3)、CLOB字段裝換可能有問題,建議在轉換以前把有CLOB字段的表導出后DROP,轉換以后再導回
(4)、該轉換不可逆,所以在做這個操作以前建議做數據庫全備份
66、修改數據庫名字
(1)、啟動svrmgrl,以文本方式備份控制文件
oracle>svrmgrl
svrmgrl>connect internal
svrmgrl>alter system backup controlfile to trace
(2)、編輯產生的跟蹤文件,在udump目錄下
改CREATE CONTROLFILE REUSE DATABASE "CTC" NORESETLOGS ARCHIVELOG
中的REUSE為SET
然后把create controlfile這段語句拷出
(3)、正常宕庫,后啟動到nomount下
svrmgrl>shutdown immediate
svrmgrl>startup nomount
(4)、執行create controlfile那段語句
(5)、打開數據庫
svrmgrl>alter database open
如提示用resetlogs選項則使用
svrmgrl>alter database open resetlogs
(8)、相應修改初始化參數
67、rownum的用法
select * from (select t.*,rownum id from dept t)
where id between 1 and 20
68、oracle的內部參數
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安裝時報areasqueries錯誤的解決辦法
包括IAS 和 IDS
把安裝源文件目錄全部改為英文字母或數字
注意:不能是中文的路徑
70、我如何知道一個表空間還有多少可以用
(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設置為16進制模式
(4)、查找串:BA 1E 00 00 00 2B D0
修改:2B D0 為:4A 90
(5)、存盤退出
(6)、運行PLSQLDev.exe,如果提示你還有29天的時間可用,那就恭喜你了!
72、使索引無效
ALTER INDEX idx UNUSABLE;
ALTER INDEX idx_acctno DISABLE;(only to a function based index)
73、在SQLPLUS中給指定用戶進行 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、關于約束的四種狀態
Disabled novalidate:當約束使不能時,約束的規則不能強制在列
(包含在約束中)的數據之上。但約束的定義保存在數據字典中。
在執行數據倉庫卷起(rollup)或裝載且要加快裝載過程時該方式
是有用的。
Enabled novalidate:是能無效,該狀態的表可以包含非法
的數據,但不可能加入新的非法數據。
Enabled validate:使能有效,一個使能的約束是強制的,表的數據檢查
有效
75、在SQLPLUS中調用存儲過程
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、生成系統表和存儲過程的三個文件。
cat*.sql
dbms*.sql
utl*.sql
76、JOB中日期的使用
每個月1號:
last_day(sysdate)+1
每個季度的第一天:
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
每個星期幾:
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)
每個星期x下午三點:interval(21, 'next_day(trunc(sysdate),x+1)+15/24');
每個季度的第一個星期x:
interval(21, 'next_day(trunc(sysdate,''Q''),3),5)');
77、使用execute immediate 的問題
8i以上才支持execute immediate
8.05只能用dbms_sql
最好使用execute immediate
78、ORACLE9i中刪除表空間中數據文件的方法
drop tablespace tbsname including contents
79、找出串中的數字
SELECT TRANSLATE('2KRW229',
'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ','0123456789')
"Translate example"
FROM DUAL
/
2229
--全是數字的:
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、表空間管理和用戶管理
--查看表空間和數據文件
select file_name,tablespace_name,autoextensible from dba_data_files;
--數據表空間
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
--臨時表空間
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
--增加數據文件
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;
--修改數據文件大小
ALTER DATABASE
DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;
--創建用戶、賦予權限
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;
--把表移到另一個表空間
ALTER TABLE TABLENAME MOVE TABLESPACE TABLESPACENAME;
--創建索引
CREATE INDEX INDEXNAME ON TABLENAME(COLUMNNAME);
CREATE INDEX INDEXNAME ON TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;
--重新建立索引
ALTER INDEX INDEXNAME REBUILD TABLESPACE TABLESPACE;
--創建表
CREAE TABLE TABLENAME
(COLUMN1 COLUTYPE DEFAULT(VALUE) NOT NULL)
(COLUMN2 COLUTYPE DEFAULT(VALUE) NOT NULL);
--建表的索引存儲分配
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);
1、分析表
analyze table mzbs.db_code ESTIMATE STATISTICS SAMPLE 20 PERCENT;
2、表空間管理和用戶管理
--查看表空間和數據文件
select file_name,tablespace_name,autoextensible from dba_data_files;
--數據表空間
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
--修改表空間數據文件的路徑
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';
--臨時表空間
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
--增加數據文件
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;
--修改表空間的存儲參數
ALTER TABLESPACE tablespacename
MINIMUM EXTENT 2M;
ALTER TABLESPACE tablespacename
DEFAULT STORAGE (
INITIAL 2M
NEXT 2M
MAXEXTENTS 999 );
--表空間聯機/脫機/只讀
ALTER TABLESPACE tablespacename OFFLINE/ONLINE/READ ONLY;
--修改數據文件大小
ALTER DATABASE
DATAFILE 'c:\USERS01113.DBF' RESIZE 40M;
--創建用戶、賦予權限
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、表的管理
--創建表
CREAE TABLE TABLENAME
(COLUMN1 COLUTYPE DEFAULT(VALUE) NOT NULL)
(COLUMN2 COLUTYPE DEFAULT(VALUE) NOT NULL);
--建表的索引存儲分配
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
PCTFREE 30
PCTUSED 50
STORAGE(NEXT 500K
MINEXTENTS 2
MAXEXTENTS 100);
ALTER TABLE tablename
ALLOCATE EXTENT(SIZE 500K
DATAFILE '/DISK3/DATA01.DBF');
--把表移到另一個表空間
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;
--標記列不可用
ALTER TABLE tablename
SET UNUSED COLUMN columnname
CASCADE CONSTRAINTS;
--刪除標記為不可用的列
ALTER TABLE tablename
DROP UNUSED COLUMNS CHECKPOINT 1000;
--繼續刪除列選項
ALTER TABLE tablename
DROP COLUMNS CONTINUE CHECKPOINT 1000;
--把表放到BUFFER_POOL中去
ALTER TABLE tablename
STORAGE (BUFFER_POOL RECYCLE);
--避免動態分配EXTENT
ALTER TABLE tablename ALLOCATE EXTENT;
--把表放到CACHE中去
ALTER TABLE tablename ALLOCATE CACHE/NOCACHE;
4、索引管理
--創建索引
CREATE INDEX indexname ON TABLENAME(COLUMNNAME);
CREATE INDEX indexname ON TABLENAME(COLUMNNAME) TABLESPACE TABLESPACENAME;
--重新建立索引
ALTER INDEX indexname REBUILD TABLESPACE TABLESPACE;
--索引分配參數
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)
--使約束無效
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、安全策略
--加密傳輸
把客戶端環境變量ora_encrypt_login設為true
把服務器端參數dblink_encypt_login設為true
--數據庫管理員安全策略
a、建庫后立即修改SYS/SYSTEM的口令(9.2后必須修改其口令)
b、只有數據庫管理員才能以SYSDBA登錄系統
c、建立不同角色的管理員,分配不同的權限
比如:對象創建于維護
數據庫的調整與維護
創建用戶分配角色
啟動關閉
恢復備份
--應用開發者的安全策略
a、開發者的特權只能在測試開發的數據庫中賦予權限
b、自由開發者、受控開發者
自由開發者:create table\index\procedure\package
受控開發者:沒有以上權限
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';
--清除日志文件內容
ALTER DATABASE CLEAR LOGFILE '/DISK3/log2a.rdo';
查找表以及表空間中的標的個數信息
select owner, object_type, status, count(*) count# from all_objects where object_type='TABLE' and owner='HYQ' group by owner, object_type, status;