数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Oracle常見問題集(二)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

71. 內核參數的應用

shmmax

含義:這個設置並不決定究竟Oracle資料庫或者作業系統使用多少實體記憶體,只決定了最多可以使用的記憶體數目。這個設置也不影響作業系統的內核資源。

 

設置方法:0.5*實體記憶體

例子:Set shmsys:shminfo_shmmax=10485760

shmmin

含義:共用記憶體的最小大小。

設置方法:一般都設置成爲1

例子:Set shmsys:shminfo_shmmin=1

shmmni

含義:系統中共用記憶體段的最大個數。

例子:Set shmsys:shminfo_shmmni=100

shmseg

含義:每個用戶進程可以使用的最多的共用記憶體段的數目。

例子:Set shmsys:shminfo_shmseg=20

semmni

含義:系統中semaphore identifierer的最大個數。

設置方法:把這個變數的值設置爲這個系統上的所有Oracle的實例的init.ora中的最大的那個processes的那個值加10

 

例子:Set semsys:seminfo_semmni=100

semmns

含義:系統中emaphores的最大個數。

設置方法:這個值可以通過以下方式計算得到:各個Oracle實例的initSID.ora裏邊的processes的值的總和(除去最大的Processes參數)+最大的那個Processes×210×Oracle實例的個數。

 

例子:Set semsys:seminfo_semmns=200

semmsl:

含義:一個setsemaphore的最大個數。

設置方法:設置成爲10+所有Oracle實例的InitSID.ora中最大的Processes的值。

例子:Set semsys:seminfo_semmsl=-200

72. 怎樣查看哪些用戶擁有SYSDBASYSOPER許可權?

SQL>conn sys/change_on_install

SQL>select * from V_$PWFILE_USERS;

 

73. 如何單獨備份一個或多個表?

exp 用戶/密碼 tables=(1,,2)

 

74. 如何單獨備份一個或多個用戶?

exp system/manager owner=(用戶1,用戶2,,用戶n) file=導出文件

 

75. 如何對CLOB欄位進行全文檢索?

SELECT * FROM A WHERE dbms_lob.instr(a.a,'K',1,1)>0;

 

76. 如何顯示當前連接用戶

SHOW USER

 

77. 如何查看資料檔案放置的路徑  

col file_name format a50

SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from

dba_data_files order by file_id;

 

78. 如何查看現有回滾段及其狀態  

SQL> col segment format a30

SQL> SELECT

SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM

DBA_ROLLBACK_SEGS

 

79. 如何改變一個欄位初始定義的Check範圍?

SQL> alter table xxx drop constraint constraint_name;

之後再創建新約束:

SQL> alter table xxx add constraint constraint_name check();

 

80. Oracle常用系統文件有哪些?

通過以下視圖顯示這些文件資訊:v$database,v$datafile,v$logfile v$controlfile

v$parameter;

 

81. 內連接INNER JOIN

Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no;

 

82. 如何外連接

Select a.* from bsempms a,bsdptms b where a.dpt_no=b.dpt_no(+);

Select a.* from bsempms a,bsdptms b wherea.dpt_no(+)=b.dpt_no;

 

83. 如何執行腳本SQL文件

SQL>@$PATH/filename.sql;

 

84. 如何快速清空一個大表

SQL>truncate table table_name;

 

85. 如何查有多少個數據庫實例

SQL>SELECT * FROM V$INSTANCE;

 

86. 如何查詢數據庫有多少表

SQL>select * from all_tables;

 

87. 如何測試SQL語句執行所用的時間

SQL>set timing on ;

SQL>select * from tablename;

 

大家在應用ORACLE的時候可能會遇到很多看起來不難的問題, 特別對新手來說, 今天我簡單把它總結一下, 發布給大家,

希望對大家有幫助! 和大家一起探討, 共同進步!

 

ORACLE高手來說是不用看的.

 

88. CHR()的反函數是

ASCII()

SELECT CHAR(65) FROM DUAL;

SELECT ASCII('A') FROM DUAL;

 

89. 字串的連接

SELECT CONCAT(COL1,COL2) FROM TABLE ;

SELECT COL1||COL2 FROM TABLE ;

 

90. 怎麽把select出來的結果導到一個文字檔案中?

SQL>SPOOL C:\ABCD.TXT;

SQL>select * from table;

SQL >spool off;

 

91. 怎樣估算SQL執行的I/O  

SQL>SET AUTOTRACE ON ;

SQL>SELECT * FROM TABLE;

OR

SQL>SELECT * FROM v$filestat ;

可以查看IO

 

92. 如何在sqlplus下改變欄位大小

alter table table_name modify (field_name varchar2(100));

改大行,改小不行(除非都是空的)

 

93. 如何查詢某天的資料

select * from table_name where

trunc(日期欄位)to_date('2003-05-02','yyyy-mm-dd');

 

94. sql 語句如何插入全年日期?

create table BSYEAR (d date);

insert into BSYEAR

select to_date('20030101','yyyymmdd')+rownum-1

from all_objects

where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd');

 

95. 如果修改表名

alter table old_table_name rename to new_table_name;

 

96. 如何取得命令的返回狀態值?

sqlcode=0

 

97. 如何知道用戶擁有的許可權

SELECT * FROM dba_sys_privs ;

 

98. 從網上下載的ORACLE9I與市場上賣的標準版有什麽區別?

從功能上說沒有區別,只不過oracle公司有明文規定;從網站上下載的oracle産品不得用於 商業用途,否則侵權。

 

99. 怎樣判斷資料庫是運行在歸檔模式下還是運行在非歸檔模式下?

進入dbastudio,歷程--〉資料庫---〉歸檔查看。

 

100. sql>startup pfileifile,spfiled有什麽區別?

pfile就是Oracle傳統的初始化參數文件,文本格式的。

ifile類似於c語言裏的include,用於把另一個文件引入

spfile9i裏新增的並且是默認的參數文件,二進位格式

startup後應該只可接pfile

 

101. 如何搜索出前N條記錄?

SELECT * FROM empLOYEE WHERE ROWNUM < n

ORDER BY empno;

 

102. 如何知道機器上的Oracle支援多少並發用戶數

SQL>conn internal ;

SQL>show parameter processes ;

 

103. db_block_size可以修改嗎

一般不可以﹐不建議這樣做的。

 

104. 如何統計兩個表的記錄總數

select (select count(id) from aa)+(select count(id) from bb) 總數

from dual;

 

105. 怎樣用Sql語句實現查找一列中第N大值?

select * from

(select t.*,dense_rank() over (order by sal) rank from employee)

where rank = N;

106. 如何在給現有的日期加上2年?(

select add_months(sysdate,24) from dual;

 

107. USED_UBLK爲負值表示什麽意思

It is "harmless".

 

108. Connect string是指什麽

應該是tnsnames.ora中的服務名後面的內容

 

109. 怎樣擴大REDO LOG的大小?

建立一個臨時的redolog組,然後切換日誌,刪除以前的日誌,建立新的日誌。

 

110. tablespace 是否不能大於4G

沒有限制.

 

111. 返回大於等於N的最小整數值

SELECT CEIL(N) FROM DUAL;

 

112. 返回小於等於N的最小整數值

SELECT FLOOR(N) FROM DUAL;

 

113. 返回當前月的最後一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;

 

114. 如何不同用戶間數據導入

IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW

ROWS=Y INDEXES=Y ;

 

115. 如何找資料庫表的主鍵欄位的名稱

SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and

table_name='TABLE_NAME';

 

116. 兩個結果集互加的函數

SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;

SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;

SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;

 

117. 兩個結果集互減的函數

SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;

 

118. 如何配置Sequence

sequence seq_custid

create sequence seq_custid start 1 incrememt by 1;

建表時:

create table cust

{ cust_id smallint not null,

...}

insert :

insert into table cust

values( seq_cust.nextval, ...)

 

日期的各部分的常用的的寫法

119>.取時間點的年份的寫法:

SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;

 

120>.取時間點的月份的寫法:

SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;

 

121>.取時間點的日的寫法:

SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;

 

122>.取時間點的時的寫法:

SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;

 

123>.取時間點的分的寫法:

SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL;

 

124>.取時間點的秒的寫法:

SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL;

 

125>.取時間點的日期的寫法:

SELECT TRUNC(SYSDATE) FROM DUAL;

 

126>.取時間點的時間的寫法:

SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;

 

127>.日期,時間形態變為字元形態

SELECT TO_CHAR(SYSDATE) FROM DUAL;

 

128>.將字串轉換成日期或時間形態:

SELECT TO_DATE('2003/08/01') FROM DUAL;

 

129>.返回參數的星期幾的寫法:

SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;

 

130>.返回參數一年中的第幾天的寫法:

SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;

 

131>.返回午夜和參數中指定的時間值之間的秒數的寫法:

SELECT TO_CHAR(SYSDATE,'SSSSS') FROM DUAL;

 

132>.返回參數中一年的第幾周的寫法:

SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL;

 

大家在應用ORACLE的時候可能會遇到很多看起來不難的問題, 特別對新手來說, 今天我簡單把它總結一下, 發布給大家,

希望對大家有幫助! 和大家一起探討, 共同進步!

 

ORACLE高手來說是不用看的.

 

虛擬欄位

 

133. CURRVAL nextval

爲表創建序列

CREATE SEQUENCE EMPSEQ ... ;

SELECT empseq.currval FROM DUAL ;

自動插入序列的數值

INSERT INTO emp

VALUES (empseq.nextval, 'LEWIS', 'CLERK',

7902, SYSDATE, 1200, NULL, 20) ;

 

134. ROWNUM

按設定排序的行的序號

SELECT * FROM emp WHERE ROWNUM < 10 ;

135. ROWID

返回行的物理位址

SELECT ROWID, ename FROM emp WHERE deptno = 20 ;

 

136. N秒轉換爲時分秒格式?

set serverout on

declare

N number := 1000000;

ret varchar2(100);

begin

ret := trunc(n/3600) || '小時' ||

to_char(to_date(mod(n,3600),'sssss'),'fmmi" "ss""') ;

dbms_output.put_line(ret);

end;

 

137. 如何查詢做比較大的排序的進程?

SELECT b.tablespace, b.segfile#, b.segblk#, b.blocks, a.sid,

a.serial#,

a.username, a.osuser, a.status

FROM v$session a,v$sort_usage b

WHERE a.saddr = b.session_addr

ORDER BY b.tablespace, b.segfile#, b.segblk#, b.blocks ;

 

138. 如何查詢做比較大的排序的進程的SQL語句?

select /*+ ORDERED */ sql_text from v$sqltext a

where a.hash_value = (

select sql_hash_value from v$session b

where b.sid = &sid and b.serial# = &serial)

order by piece asc ;

 

139. 如何查找重復記錄?

SELECT * FROM TABLE_NAME

WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D

WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

140. 如何刪除重復記錄?

DELETE FROM TABLE_NAME

WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D

WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2);

 

141. 如何快速編譯所有視圖?

SQL >SPOOL VIEW1.SQL

SQL >SELECT ALTER VIEW ||TNAME||

COMPILE; FROM TAB;

SQL >SPOOL OFF

然後執行VIEW1.SQL即可。

SQL >@VIEW1.SQL;

 

142. ORA-01555 SNAPSHOT TOO OLD的解決辦法

增加MINEXTENTS的值,增加區的大小,設置一個高的OPTIMAL值。

143. 事務要求的回滾段空間不夠,表現爲表空間用滿(ORA-01560錯誤),回滾段擴展到達參數

MAXEXTENTS的值(ORA-01628)的解決辦法.

向回滾段表空間添加文件或使已有的文件變大;增加MAXEXTENTS的值。

 

144. 如何加密ORACLE的存儲過程?

下列存儲過程內容放在AA.SQL文件中

create or replace procedure testCCB(i in number) as

begin

dbms_output.put_line('輸入參數是'||to_char(i));

end;

SQL>wrap iname=a.sql;

PL/SQL Wrapper: Release 8.1.7.0.0 - Production on Tue Nov 27

22:26:48 2001

Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved.

Processing AA.sql to AA.plb

運行AA.plb

SQL> @AA.plb ;

 

145. 如何監控事例的等待?

select event,sum(decode(wait_Time,0,0,1)) "Prev",

sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"

from v$session_Wait

group by event order by 4;

 

146. 如何回滾段的爭用情況?

select name, waits, gets, waits/gets "Ratio"

from v$rollstat C, v$rollname D

where C.usn = D.usn;

 

147. 如何監控表空間的 I/O 比例?

select B.tablespace_name name,B.file_name "file",A.phyrds pyr,

A.phyblkrd pbr,A.phywrts pyw, A.phyblkwrt pbw

from v$filestat A, dba_data_files B

where A.file# = B.file_id

order by B.tablespace_name;

 

148. 如何監控文件系統的 I/O 比例?

select substr(C.file#,1,2) "#", substr(C.name,1,30) "Name",

C.status, C.bytes, D.phyrds, D.phywrts

from v$datafile C, v$filestat D

where C.file# = D.file#;

 

149. 如何在某個用戶下找所有的索引?

select user_indexes.table_name,

user_indexes.index_name,uniqueness, column_name

from user_ind_columns, user_indexes

where user_ind_columns.index_name = user_indexes.index_name

and user_ind_columns.table_name = user_indexes.table_name

order by user_indexes.table_type, user_indexes.table_name,

user_indexes.index_name, column_position;

 

150. 如何監控 SGA 的命中率?

select a.value + b.value "logical_reads", c.value "phys_reads",

round(100 * ((a.value+b.value)-c.value) / (a.value+b.value))

"BUFFER HIT RATIO"

from v$sysstat a, v$sysstat b, v$sysstat c

where a.statistic# = 38 and b.statistic# = 39

and c.statistic# = 40;




相关文章

相关软件