1.      列舉幾種表連接方式

Answer:等連接(內(nèi)連接)、非等連接、自連接、外連接(左、右、全)

Or hash join/merge join/nest loop(cluster join)/index join ??

ORACLE 8i,9i 表連接方法。

一般的相等連接: select * from a, b where a.id = b.id; 這個就屬于內(nèi)連接。

對于外連接:

Oracle中可以使用“(+) ”來表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN

LEFT OUTER JOIN:左外關(guān)聯(lián)

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

LEFT OUTER JOIN departments d

ON (e.department_id = d.department_id);

等價于

SELECT e.last_name, e.department_id, d.department_name

FROM employees e, departments d

WHERE e.department_id=d.department_id(+)

結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號department_id的員工記錄。

RIGHT OUTER JOIN:右外關(guān)聯(lián)

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

RIGHT OUTER JOIN departments d

ON (e.department_id = d.department_id);

等價于

SELECT e.last_name, e.department_id, d.department_name

FROM employees e, departments d

WHERE e.department_id(+)=d.department_id

結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有任何員工的部門記錄。

FULL OUTER JOIN:全外關(guān)聯(lián)

SELECT e.last_name, e.department_id, d.department_name

FROM employees e

FULL OUTER JOIN departments d

ON (e.department_id = d.department_id);

結(jié)果為:所有員工及對應(yīng)部門的記錄,包括沒有對應(yīng)部門編號department_id的員工記錄和沒有任何員工的部門記錄。

ORACLE8i是不直接支持完全外連接的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORACLE8i可以參考的完全外連接語法

select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)

union

select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id


連接類型

定義

圖示

例子

內(nèi)連接

只連接匹配的行

select A.c1,B.c2 from A join B on A.c3 = B.c3;

左外連接

包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行

select A.c1,B.c2 from A left join B on A.c3 = B.c3;

右外連接

包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行

select A.c1,B.c2 from A right join B on A.c3 = B.c3;

全外連接

包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行

select A.c1,B.c2 from A full join B on A.c3 = B.c3;

(theta)連接

使用等值以外的條件來匹配左、右兩個表中的行

select A.c1,B.c2 from A join B on A.c3 != B.c3;

交叉連接

生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個數(shù)據(jù)源中的每個行與另一個數(shù)據(jù)源的每個行一一匹配

 

select A.c1,B.c2 from A,B;

2.      不借助第三方工具,怎樣查看sql的執(zhí)行計劃

I) 使用Explain Plan,查詢PLAN_TABLE;

 EXPLAIN PLAN

     SET STATEMENT_ID='QUERY1'

     FOR

     SELECT *

     FROM a

     WHERE aa=1;

 SELECT   operation, options, object_name, object_type, ID, parent_id

      FROM plan_table

     WHERE STATEMENT_ID = 'QUERY1'

 ORDER BY ID;

II)SQLPLUS中的SET TRACE 即可看到Execution Plan Statistics

 SET AUTOTRACE ON;

3.      如何使用CBO,CBO與RULE的區(qū)別

 IF 初始化參數(shù) OPTIMIZER_MODE = CHOOSE THEN --(8I DEFAULT)

     IF 做過表分析

        THEN 優(yōu)化器 Optimizer=CBO(COST);          /*高效*/

     ELSE

        優(yōu)化器 Optimizer=RBO(RULE);               /*高效*/

     END IF;

 END IF;

 區(qū)別:

 RBO根據(jù)規(guī)則選擇最佳執(zhí)行路徑來運(yùn)行查詢。

 CBO根據(jù)表統(tǒng)計找到最低成本的訪問數(shù)據(jù)的方法確定執(zhí)行計劃。

 使用CBO需要注意:

 I) 需要經(jīng)常對表進(jìn)行ANALYZE命令進(jìn)行分析統(tǒng)計;

 II) 需要穩(wěn)定執(zhí)行計劃;

 III)需要使用提示(Hint);

 使用RULE需要注意:

I) 選擇最有效率的表名順序

II) 優(yōu)化SQL的寫法;

在optimizer_mode=choose時,如果表有統(tǒng)計信息(分區(qū)表外),優(yōu)化器將選擇CBO,否則選RBO。 

RBO遵循簡單的分級方法學(xué),使用15種級別要點(diǎn),當(dāng)接收到查詢,優(yōu)化器將評估使用到的要點(diǎn)數(shù)目,然后選擇最佳級別(最少的數(shù)量)的執(zhí)行路徑來運(yùn)行查詢。 

CBO嘗試找到最低成本的訪問數(shù)據(jù)的方法,為了最大的吞吐量或最快的初始響應(yīng)時間,計算使用不同的執(zhí)行計劃的成本,并選擇成本最低的一個,關(guān)于表的數(shù)據(jù)內(nèi)容的統(tǒng)計被用于確定執(zhí)行計劃。

4.      如何定位重要(消耗資源多)的SQL

使用CPU多的用戶session

SELECT a.SID, spid, status, SUBSTR (a.program, 1, 40) prog, a.terminal,a.SQL_TEXT, osuser, VALUE / 60 / 100 VALUE

FROM v$session a, v$process b, v$sesstat c

WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addr

ORDER BY VALUE DESC;

select sql_text from v$sql 

where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);

5.      如何跟蹤某個session的SQL

利用TRACE 跟蹤

 ALTER SESSION SET SQLTRACE ON;

 COLUMN SQL format a200;

 SELECT   machine, sql_text SQL

      FROM v$sqltext a, v$session b

     WHERE address = sql_address

       AND machine = '&A'

 ORDER BY hash_value, piece;

exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace); 

select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1); 

exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');

6.      SQL調(diào)整最關(guān)注的是什么

檢查系統(tǒng)的I/O問題

sar-d能檢查整個系統(tǒng)的iostat(IO statistics)

查看該SQL的response time(db block gets/consistent gets/physical reads/sorts (disk))

7.      說說你對索引的認(rèn)識(索引的結(jié)構(gòu)、對dml影響、對查詢影響、為什么提高查詢性能)

索引有B-TREE、BIT、CLUSTER等類型。ORACLE使用了一個復(fù)雜的自平衡B-tree結(jié)構(gòu);通常來說,在表上建立恰當(dāng)?shù)乃饕樵儠r會改進(jìn)查詢性能。但在進(jìn)行插入、刪除、修改時,同時會進(jìn)行索引的修改,在性能上有一定的影響。有索引且查詢條件能使用索引時,數(shù)據(jù)庫會先度取索引,根據(jù)索引內(nèi)容和查詢條件,查詢出ROWID,再根據(jù)ROWID取出需要的數(shù)據(jù)。由于索引內(nèi)容通常比全表內(nèi)容要少很多,因此通過先讀索引,能減少I/O,提高查詢性能。

b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高select/update/delete的性能,會降低insert的速度,

8.      使用索引查詢一定能提高查詢的性能嗎?為什么

通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價.

索引需要空間來存儲,也需要定期維護(hù), 每當(dāng)有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因?yàn)樗饕枰~外的存儲空間和處理,那些不必要的索引反而會使查詢反應(yīng)時間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:

基于一個范圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%宜采用;

基于非唯一性索引的檢索

索引就是為了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合不同

9.      綁定變量是什么?綁定變量有什么優(yōu)缺點(diǎn)?

綁定變量是指在SQL語句中使用變量,改變變量的值來改變SQL語句的執(zhí)行結(jié)果。

優(yōu)點(diǎn):使用綁定變量,可以減少SQL語句的解析,能減少數(shù)據(jù)庫引擎消耗在SQL語句解析上的資源。提高了編程效率和可靠性。減少訪問數(shù)據(jù)庫的次數(shù), 就能實(shí)際上減少ORACLE的工作量。

缺點(diǎn):經(jīng)常需要使用動態(tài)SQL的寫法,由于參數(shù)的不同,可能SQL的執(zhí)行效率不同;

綁定變量是相對文本變量來講的,所謂文本變量是指在SQL直接書寫查詢條件,

這樣的SQL在不同條件下需要反復(fù)解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value在運(yùn)行時傳遞,然后綁定執(zhí)行。 

優(yōu)點(diǎn)是減少硬解析,降低CPU的爭用,節(jié)省shared_pool 

缺點(diǎn)是不能使用histogram,sql優(yōu)化比較困難

10. 如何穩(wěn)定(固定)執(zhí)行計劃

可以在SQL語句中指定執(zhí)行計劃。使用HINTS;

query_rewrite_enabled = true

star_transformation_enabled = true

optimizer_features_enable = 9.2.0

創(chuàng)建并使用stored outline

11. 和排序相關(guān)的內(nèi)存在8i和9i分別怎樣調(diào)整,臨時表空間的作用是什么

SORT_AREA_SIZE 在進(jìn)行排序操作時,如果排序的內(nèi)容太多,內(nèi)存里不能全部放下,則需要進(jìn)行外部排序,

此時需要利用臨時表空間來存放排序的中間結(jié)果。

8i中sort_area_size/sort_area_retained_size決定了排序所需要的內(nèi)存, 如果排序操作不能在sort_area_size中完成,就會用到temp表空間

9i中如果workarea_size_policy=auto時, 

排序在pga內(nèi)進(jìn)行,通常pga_aggregate_target的1/20可以用來進(jìn)行disk sort; 

如果workarea_size_policy=manual時,排序需要的內(nèi)存由sort_area_size決定, 在執(zhí)行order by/group by/distinct/union/create index/index rebuild/minus等操作時,如果在pga或sort_area_size中不能完成,排序?qū)⒃谂R時表空間進(jìn)行(disk sort),臨時表空間主要作用就是完成系統(tǒng)中的disk sort.

12. 存在表T(a,b,c,d),要根據(jù)字段c排序后取第21—30條記錄顯示,請給出sql

    SELECT   *

        FROM (SELECT ROWNUM AS row_num, tmp_tab.*

                FROM (SELECT   a, b, c, d

                          FROM T

                      ORDER BY c) tmp_tab

               WHERE ROWNUM <= 30)

       WHERE row_num >= 20

ORDER BY row_num;

create table t(a number(,b number(,c number(,d number();

begin 

for i in 1 .. 300 loop 

insert into t values(mod(i,2),i/2,dbms_random.value(1,300),i/4); 

end loop;

end; 

/

select * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn between 21 and 30;

/

select * from (select * from test order by c desc) x where rownum &lt; 30

minus

select * from (select * from test order by c desc) y where rownum &lt; 20 order by 3 desc 

相比之 minus性能較差

二:數(shù)據(jù)庫基本概念類

1 Pctused and pctfree 表示什么含義有什么作用

pctused與pctfree控制數(shù)據(jù)塊是否出現(xiàn)在freelist中,  pctfree控制數(shù)據(jù)塊中保留用于update的空間,當(dāng)數(shù)據(jù)塊中的free space小于pctfree設(shè)置的空間時,該數(shù)據(jù)塊從freelist中去掉,當(dāng)塊由于dml操作free space大于pct_used設(shè)置的空間時,該數(shù)據(jù)庫塊將被添加在freelist鏈表中。

2 簡單描述tablespace / segment / extent / block之間的關(guān)系

tablespace: 一個數(shù)據(jù)庫劃分為一個或多個邏輯單位,該邏輯單位成為表空間;每一個表空間可能包含一個或多個 Segment;

Segments: Segment指在tablespace中為特定邏輯存儲結(jié)構(gòu)分配的空間。每一個段是由一個或多個extent組成。包括數(shù)據(jù)段、索引段、回滾段和臨時段。

Extents: 一個 extent 由一系列連續(xù)的 Oracle blocks組成.ORACLE為通過extent 來給segment分配空間。

Data Blocks:Oracle 數(shù)據(jù)庫最小的I/O存儲單位,一個data block對應(yīng)一個或多個分配給data file的操作系統(tǒng)塊。

table創(chuàng)建時,默認(rèn)創(chuàng)建了一個data segment,每個data segment含有min extents指定的extents數(shù),每個extent據(jù)據(jù)表空間的存儲參數(shù)分配一定數(shù)量的blocks

3 描述tablespace和datafile之間的關(guān)系

一個表空間可包含一個或多個數(shù)據(jù)文件。表空間利用增加或擴(kuò)展數(shù)據(jù)文件擴(kuò)大表空間,表空間的大小為組成該表空間的數(shù)據(jù)文件大小的和。一個datafile只能屬于一個表空間;

一個tablespace可以有一個或多個datafile,每個datafile只能在一個tablespace內(nèi), table中的數(shù)據(jù),通過hash算法分布在tablespace中的各個datafile中,tablespace是邏輯上的概念,datafile則在物理上儲存了數(shù)據(jù)庫的種種對象。

4 本地管理表空間和字典管理表空間的特點(diǎn),ASSM有什么特點(diǎn)

本地管理表空間:(9i默認(rèn))空閑塊列表存儲在表空間的數(shù)據(jù)文件頭。

特點(diǎn):減少數(shù)據(jù)字典表的競爭,當(dāng)分配和收縮空間時會產(chǎn)生回滾,不需要合并。

字典管理表空間:(8i默認(rèn))空閑塊列表存儲在數(shù)據(jù)庫中的字典表里.

特點(diǎn):片由數(shù)據(jù)字典管理,可能造成字典表的爭用。存儲在表空間的每一個段都會有不同的存儲字句,需要合并相鄰的塊;

本地管理表空間(Locally Managed Tablespace簡稱LMT)

8i以后出現(xiàn)的一種新的表空間的管理模式,通過位圖來管理表空間的空間使用。字典管理表空間(Dictionary-Managed Tablespace簡稱DMT) 

8i以前包括以后都還可以使用的一種表空間管理模式,通過數(shù)據(jù)字典管理表空間的空間使用。動段空間管理(ASSM),它首次出現(xiàn)在Oracle920里有了ASSM,鏈接列表freelist被位圖所取代,它是一個二進(jìn)制的數(shù)組, 

能夠迅速有效地管理存儲擴(kuò)展和剩余區(qū)塊(free block),因此能夠改善分段存儲本質(zhì),ASSM表空間上創(chuàng)建的段還有另外一個稱呼叫Bitmap Managed Segments(BMB 段)。

5 回滾段的作用是什么

回滾段用于保存數(shù)據(jù)修改前的映象,這些信息用于生成讀一致性數(shù)據(jù)庫信息、在數(shù)據(jù)庫恢復(fù)和Rollback時使用。一個事務(wù)只能使用一個回滾段。

事務(wù)回滾:當(dāng)事務(wù)修改表中數(shù)據(jù)的時候,該數(shù)據(jù)修改前的值(即前影像)會存放在回滾段中,當(dāng)用戶回滾事務(wù)(ROLLBACK)時,ORACLE將會利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復(fù)到原來的值。 

事務(wù)恢復(fù):當(dāng)事務(wù)正在處理的時候,例程失敗,回滾段的信息保存在undo表空間中,ORACLE將在下次打開數(shù)據(jù)庫時利用回滾來恢復(fù)未提交的數(shù)據(jù)。

讀一致性:當(dāng)一個會話正在修改數(shù)據(jù)時,其他的會話將看不到該會話未提交的修改。 當(dāng)一個語句正在執(zhí)行時,該語句將看不到從該語句開始執(zhí)行后的未提交的修改(語句級讀一致性) 

當(dāng)ORACLE執(zhí)行SELECT語句時,ORACLE依照當(dāng)前的系統(tǒng)改變號(SYSTEM CHANGE NUMBER-SCN) 來保證任何前于當(dāng)前SCN的未提交的改變不被該語句處理。可以想象:當(dāng)一個長時間的查詢正在執(zhí)行時, 若其他會話改變了該查詢要查詢的某個數(shù)據(jù)塊,ORACLE將利用回滾段的數(shù)據(jù)前影像來構(gòu)造一個讀一致性視圖

6 日志的作用是什么

日志文件(Log File)記錄所有對數(shù)據(jù)庫數(shù)據(jù)的修改,主要是保護(hù)數(shù)據(jù)庫以防止故障,以及恢復(fù)數(shù)據(jù)時使用。其特點(diǎn)如下:

 a)每一個數(shù)據(jù)庫至少包含兩個日志文件組。每個日志文件組至少包含兩個日志文件成員。

 b)日志文件組以循環(huán)方式進(jìn)行寫操作。

 c)每一個日志文件成員對應(yīng)一個物理文件。

記錄數(shù)據(jù)庫事務(wù),最大限度地保證數(shù)據(jù)的一致性與安全性  

重做日志文件:含對數(shù)據(jù)庫所做的更改記錄,這樣萬一出現(xiàn)故障可以啟用數(shù)據(jù)恢復(fù),一個數(shù)據(jù)庫至少需要兩個重做日志文件 

歸檔日志文件:是重做日志文件的脫機(jī)副本,這些副本可能對于從介質(zhì)失敗中進(jìn)行恢復(fù)很必要。

7 SGA主要有那些部分,主要作用是什么

系統(tǒng)全局區(qū)(SGA):是ORACLE為實(shí)例分配的一組共享緩沖存儲區(qū),用于存放數(shù)據(jù)庫數(shù)據(jù)和控制信息,以實(shí)現(xiàn)對數(shù)據(jù)庫數(shù)據(jù)的管理和操作。

SGA主要包括:

a)共享池(shared pool) :用來存儲最近執(zhí)行的SQL語句和最近使用的數(shù)據(jù)字典的數(shù)據(jù)。

b)數(shù)據(jù)緩沖區(qū) (database buffer cache):用來存儲最近從數(shù)據(jù)文件中讀寫過的數(shù)據(jù)。

c)重作日志緩沖區(qū)(redo log buffer):用來記錄服務(wù)或后臺進(jìn)程對數(shù)據(jù)庫的操作。

另外在SGA中還有兩個可選的內(nèi)存結(jié)構(gòu):

d)Java pool: 用來存儲Java代碼。

e)Large pool: 用來存儲不與SQL直接相關(guān)的大型內(nèi)存結(jié)構(gòu)。備份、恢復(fù)使用。

GA:db_cache/shared_pool/large_pool/java_pool 

db_cache: 數(shù)據(jù)庫緩存(Block Buffer)對于Oracle數(shù)據(jù)庫的運(yùn)轉(zhuǎn)和性能起著非常關(guān)鍵的作用,它占據(jù)Oracle數(shù)據(jù)庫SGA(系統(tǒng)共享內(nèi)存區(qū))的主要部分。Oracle數(shù)據(jù)庫通過使用LRU算法,將最近訪問的數(shù)據(jù)塊存放到緩存中,從而優(yōu)化對磁盤數(shù)據(jù)的訪問.

shared_pool: 共享池的大小對于Oracle 性能來說都是很重要的。共享池中保存數(shù)據(jù)字典高速緩沖和完全解析或編譯的的PL/SQL 塊和SQL 語句及控制結(jié)構(gòu) 

large_pool: 使用MTS配置時,因?yàn)橐赟GA中分配UGA來保持用戶的會話,就是用Large_pool來保持這個會話內(nèi)存使用RMAN做備份的時候,要使用Large_pool這個內(nèi)存結(jié)構(gòu)來做磁盤I/O緩存器 

java_pool: 為java procedure預(yù)備的內(nèi)存區(qū)域,如果沒有使用java proc,java_pool不是必須的

8 Oracle系統(tǒng)進(jìn)程主要有哪些,作用是什么

數(shù)據(jù)寫進(jìn)程(DBWR):負(fù)責(zé)將更改的數(shù)據(jù)從數(shù)據(jù)庫緩沖區(qū)高速緩存寫入數(shù)據(jù)文件

日志寫進(jìn)程(LGWR):將重做日志緩沖區(qū)中的更改寫入在線重做日志文件

系統(tǒng)監(jiān)控 (SMON): 檢查數(shù)據(jù)庫的一致性如有必要還會在數(shù)據(jù)庫打開時啟動數(shù)據(jù)庫的恢復(fù)

進(jìn)程監(jiān)控 (PMON): 負(fù)責(zé)在一個Oracle 進(jìn)程失敗時清理資源

檢查點(diǎn)進(jìn)程(CKPT):負(fù)責(zé)在每當(dāng)緩沖區(qū)高速緩存中的更改永久地記錄在數(shù)據(jù)庫中時,更新控制文件和數(shù)據(jù)文件中的數(shù)據(jù)庫狀態(tài)信息。

歸檔進(jìn)程 (ARCH):在每次日志切換時把已滿的日志組進(jìn)行備份或歸檔

恢復(fù)進(jìn)程 (RECO): 保證分布式事務(wù)的一致性,在分布式事務(wù)中,要么同時commit,要么同時rollback;

作業(yè)調(diào)度器(CJQ ): 負(fù)責(zé)將調(diào)度與執(zhí)行系統(tǒng)中已定義好的job,完成一些預(yù)定義的工作.

三:備份恢復(fù)類

1 備份如何分類

邏輯備份:exp/imp 指定表的邏輯備份

物理備份: 

熱備份:alter tablespace begin/end backup; 

冷備份:脫機(jī)備份(database shutdown)

RMAN備份 

full backup/incremental backup(累積/差異) 

物理備份

物理備份是最主要的備份方式。用于保證數(shù)據(jù)庫在最小的數(shù)據(jù)庫丟失或沒有數(shù)據(jù)丟失的情況下得到恢復(fù)。

冷物理

冷物理備份提供了最簡單和最直接的方法保護(hù)數(shù)據(jù)庫因物理損壞丟失。建議在以下幾種情況中使用。

對一個已經(jīng)存在大最數(shù)據(jù)量的數(shù)據(jù)庫,在晚間數(shù)據(jù)庫可以關(guān)閉,此時應(yīng)用冷物理備份。

對需對數(shù)據(jù)庫服務(wù)器進(jìn)行升級,(如更換硬盤),此時需要備份數(shù)據(jù)庫信息,并在新的硬盤中恢復(fù)這些數(shù)據(jù)信息,建議采用冷物理備份。

熱物理

主要是指備份過程在數(shù)據(jù)庫打開并且用戶可以使用的情況下進(jìn)行。需要執(zhí)行熱物理備份的情況有:

由于數(shù)據(jù)庫性質(zhì)要求不間斷工作,因而此時只能采用熱物理備份。

由于備份的要求的時間過長,而數(shù)據(jù)庫只能短時間關(guān)閉時。

邏輯備份 (EXP/IMP)

邏輯備份用于實(shí)現(xiàn)數(shù)據(jù)庫對象的恢復(fù)。但不是基于時間點(diǎn)可完全恢復(fù)的備份策略。只能作為聯(lián)機(jī)備份和脫機(jī)備份的一種補(bǔ)充。

完全邏輯備份

完全邏輯備份是將整個數(shù)據(jù)庫導(dǎo)出到一個數(shù)據(jù)庫的格式文件中,該文件可以在不同的數(shù)據(jù)庫版本、操作系統(tǒng)和硬件平臺之間進(jìn)行移植。

指定表的邏輯備份

通過備份工具,可以將指定的數(shù)據(jù)庫表備份出來,這可以避免完全邏輯備份所帶來的時間和財力上的浪費(fèi)。

2 歸檔是什么含義 

關(guān)于歸檔日志:Oracle要將填滿的在線日志文件組歸檔時,則要建立歸檔日志(archived redo log)。其對數(shù)據(jù)庫備份和恢復(fù)有下列用處: 

數(shù)據(jù)庫后備以及在線和歸檔日志文件,在操作系統(tǒng)和磁盤故障中可保證全部提交的事物可被恢復(fù)。 

在數(shù)據(jù)庫打開和正常系統(tǒng)使用下,如果歸檔日志是永久保存,在線后備可以進(jìn)行和使用。 

數(shù)據(jù)庫可運(yùn)行在兩種不同方式下:NOARCHIVELOG方式或ARCHIVELOG 方式 

數(shù)據(jù)庫在NOARCHIVELOG方式下使用時,不能進(jìn)行在線日志的歸檔, 

數(shù)據(jù)庫在ARCHIVELOG方式下運(yùn)行,可實(shí)施在線日志的歸檔

歸檔是歸檔當(dāng)前的聯(lián)機(jī)redo日志文件。

SVRMGR> alter system archive log current;

數(shù)據(jù)庫只有運(yùn)行在ARCHIVELOG模式下,并且能夠進(jìn)行自動歸檔,才可以進(jìn)行聯(lián)機(jī)備份。有了聯(lián)機(jī)備份才有可能進(jìn)行完全恢復(fù)。

3 如果一個表在2004-08-04 10:30:00 被drop,在有完善的歸檔和備份的情況下,如何恢復(fù)

9i 新增的FLASH BACK 應(yīng)該可以;

Logminer應(yīng)該可以找出DML。

有完善的歸檔和備份,先歸檔當(dāng)前數(shù)據(jù),然后可以先恢復(fù)到刪除的時間點(diǎn)之前,把DROP 的表導(dǎo)出來,然后再恢復(fù)到最后歸檔時間;

手工拷貝回所有備份的數(shù)據(jù)文件 

Sql〉startup mount; 

sql〉alter database recover automatic until time '2004-08-04:10:30:00'; 

sql〉alter database open resetlogs;

4 rman是什么,有何特點(diǎn)

RMAN(Recovery Manager)是DBA的一個重要工具,用于備份、還原和恢復(fù)oracle數(shù)據(jù)庫, RMAN 可以用來備份和恢復(fù)數(shù)據(jù)庫文件、歸檔日志、控制文件、系統(tǒng)參數(shù)文件,也可以用來執(zhí)行完全或不完全的數(shù)據(jù)庫恢復(fù)。 

RMAN有三種不同的用戶接口:COMMAND LINE方式、GUI 方式(集成在OEM 中的備份管理器)、API 方式(用于集成到第三方的備份軟件中)。 

具有如下特點(diǎn): 

1)功能類似物理備份,但比物理備份強(qiáng)大N倍; 

2)可以壓縮空塊; 

3)可以在塊水平上實(shí)現(xiàn)增量; 

4)可以把備份的輸出打包成備份集,也可以按固定大小分割備份集; 

5)備份與恢復(fù)的過程可以自動管理; 

6)可以使用腳本(存在Recovery catalog 中) 

7)可以做壞塊監(jiān)測

5 standby的特點(diǎn)

備用數(shù)據(jù)庫(standby database):ORACLE推出的一種高可用性(HIGH AVAILABLE)數(shù)據(jù)庫方案,在主節(jié)點(diǎn)與備用節(jié)點(diǎn)間通過日志同步來保證數(shù)據(jù)的同步,備用節(jié)點(diǎn)作為主節(jié)點(diǎn)的備份,可以實(shí)現(xiàn)快速切換與災(zāi)難性恢復(fù),從920開始,還開始支持物理與邏輯備用服務(wù)器。

9i中的三種數(shù)據(jù)保護(hù)模式分別是:

1)、MAXIMIZE PROTECTION :最大數(shù)據(jù)保護(hù)與無數(shù)據(jù)分歧,LGWR將同時傳送到備用節(jié)點(diǎn),在主節(jié)點(diǎn)事務(wù)確認(rèn)之前,備用節(jié)點(diǎn)也必須完全收到日志數(shù)據(jù)。如果網(wǎng)絡(luò)不好,引起LGWR不能傳送數(shù)據(jù),將引起嚴(yán)重的性能問題,導(dǎo)致主節(jié)點(diǎn)DOWN機(jī)。 

2)、MAXIMIZE AVAILABILITY :無數(shù)據(jù)丟失模式,允許數(shù)據(jù)分歧,允許異步傳送。 

正常情況下運(yùn)行在最大保護(hù)模式,在主節(jié)點(diǎn)與備用節(jié)點(diǎn)的網(wǎng)絡(luò)斷開或連接不正常時,自動切換到最大性能模式,主節(jié)點(diǎn)的操作還是可以繼續(xù)的。在網(wǎng)絡(luò)不好的情況下有較大的性能影響。 

3)、MAXIMIZE PERFORMANCE:這種模式應(yīng)當(dāng)可以說是從8i繼承過來的備用服務(wù)器模式,異步傳送,無數(shù)據(jù)同步檢查,可能丟失數(shù)據(jù),但是能獲得主節(jié)點(diǎn)的最大性能。9i在配置DATA GUARD的時候默認(rèn)就是MAXIMIZE PERFORMANCE

6 對于一個要求恢復(fù)時間比較短的系統(tǒng)(數(shù)據(jù)庫50G,每天歸檔5G),你如何設(shè)計備份策略

數(shù)據(jù)庫比較大邏輯備份沒什么必要,每天歸檔5G,每周三/周六自動歸檔10G,每月RMAN歸檔全庫。應(yīng)該有standby。

rman/每月一號 level 0 每周末/周三 level 1 其它每天level 2

四:系統(tǒng)管理類

1.      對于一個存在系統(tǒng)性能的系統(tǒng),說出你的診斷處理思路

ü         做statspack收集系統(tǒng)相關(guān)信息 了解系統(tǒng)大致情況/確定是否存在參數(shù)設(shè)置不合適的地方/查看top 5 event/查看top sql等

ü         查v$system_event/v$session_event/v$session_wait 從v$system_event開始,確定需要什么資源(db file sequential read)等,深入研究v$session_event,確定等待事件涉及的會話,從v$session_wait確定詳細(xì)的資源爭用情況(p1-p3的值:file_id/block_id/blocks等)

ü         通過v$sql/v$sqltext/v$sqlarea表確定disk_reads、(buffer_gets/executions)值較大的SQL

2.      列舉幾種診斷IO、CPU、性能狀況的方法

top uptime vmstat iostat statspack sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions較大的SQL)

或者第三方的監(jiān)視工具,TOAD就不錯。

3.      對statspack有何認(rèn)識

認(rèn)識不深。僅限了解。StapSpack是Oracle公司提供的一個收集數(shù)據(jù)庫運(yùn)行性能指標(biāo)的軟件包。可以做數(shù)據(jù)庫健康檢查報告。

StapSpack是Oracle公司提供的一個收集數(shù)據(jù)庫運(yùn)行性能指標(biāo)的軟件包,該軟件包從8i起,在9i、10g都有顯著的增強(qiáng) 

該軟件包的輔助表(存儲相關(guān)參數(shù)與收集的性能指標(biāo)的表)由最初的25個增長到43個 

收集級別參數(shù)由原來的3個(0、5、10)增加到5個(0、5、6、7、10) 

通過分析收集的性能指標(biāo),數(shù)據(jù)庫管理員可以詳細(xì)地了解數(shù)據(jù)庫目前的運(yùn)行情況,對數(shù)據(jù)庫實(shí)例、等待事件、SQL等進(jìn)行優(yōu)化調(diào)整 

利用statspack收集的snapshot,可以統(tǒng)計制作數(shù)據(jù)庫的各種性能指標(biāo)的統(tǒng)計趨勢圖表。

4.      如果系統(tǒng)現(xiàn)在需要在一個很大的表上創(chuàng)建一個索引,你會考慮那些因素,如何做以盡量減小對應(yīng)用的影響

可以先表分析一下,然后測試創(chuàng)建索引前后對應(yīng)用的性能影響;

需要考慮的是該索引列不經(jīng)常更新,不是有很多重復(fù)值的情況時, 在大表中使用索引特別有效. 創(chuàng)建的索引可以跟數(shù)據(jù)表分不同表空間存儲。

在系統(tǒng)比較空閑時nologging選項(xiàng)(如果有dataguard則不可以使用nologging) 

大的sort_ared_size或pga_aggregate_target較大

5.      對raid10 和raid5有何認(rèn)識

RAID 10(或稱RAID 1+0)與RAID 0+1不同,它是用硬盤驅(qū)動器先組成RAID 1陣列,然后在RAID 1陣列之間再組成RAID 0陣列。 

RAID 10模式同RAID 0+1模式一樣具有良好的數(shù)據(jù)傳輸性能,但卻比RAID 0+1具有更高的可靠性。RAID 10陣列的實(shí)際容量為M×n/2,磁盤利用率為50%。RAID 10也需要至少4個硬盤驅(qū)動器構(gòu)成,因而價格昂貴。 

RAID 10的可靠性同RAID 1一樣,但由于RAID 10硬盤驅(qū)動器之間有數(shù)據(jù)分割,因而數(shù)據(jù)傳輸性能優(yōu)良。  

RAID 5與RAID 3很相似,不同之處在于RAID 5的奇偶校驗(yàn)信息也同數(shù)據(jù)一樣被分割保存到所有的硬盤驅(qū)動器,而不是寫入一個指定的硬盤驅(qū)動器,從而消除了單個奇偶校驗(yàn)硬盤驅(qū)動器的瓶頸問題。RAID 5磁盤陣列的性能比RAID 3有所提高,但仍然需要至少3塊硬盤驅(qū)動器。其實(shí)際容量為M×(n-1),磁盤利用率為(n-1)/n 。  

五:綜合隨意類

1.      你最擅長的是oracle哪部分?

pl/sql及sql優(yōu)化

2.      喜歡oracle嗎?喜歡上論壇嗎?或者偏好oracle的哪一部分?

 喜歡。PL/SQL比較得心應(yīng)手。

3.      隨意說說你覺得oracle最有意思的部分或者最困難的部分

我對數(shù)據(jù)庫的備份/恢復(fù)和性能調(diào)優(yōu)經(jīng)驗(yàn)明顯不足,自然覺得有些困難。

基于ORACLE的研究應(yīng)該是個寬廣的領(lǐng)域,所以我覺得還是有意思的。

4.      為何要選擇做DBA呢?

我對數(shù)據(jù)庫的備份/恢復(fù)和性能調(diào)優(yōu)經(jīng)驗(yàn)明顯不足,主要是缺乏環(huán)境和交流。

因此,算不上什么DBA。不過因此我更需要這樣的機(jī)會。

不過就整個ORACLE 來說,一直從事與它相關(guān)的工作,感情還是頗深的。放棄可惜。而且就技術(shù)本身而言我覺得自己還是有學(xué)習(xí)和創(chuàng)新的能力,它的諸如數(shù)據(jù)倉庫,數(shù)據(jù)挖掘之類的領(lǐng)域也很廣。

六:Databases Questions & Answers

1.      What are two methods of retrieving SQL? 

2.      What cursor type do you use to retrieve multiple recordsets?

3.      What action do you have to perform before retrieving data from the next result set of a stored procedure?

Move the cursor down one row from its current position. A ResultSet cursor is initially positioned before the first row. Before you can get to the first row, you would need to Move the cursor down by one row ( For ex: in java the first call to next makes the first row the current row; the second call makes the second row the current row, and so on).

4.      What is the basic form of a SQL statement to read data out of a table?

SELECT * FROM table_name;

5.      What structure can you have the database make to speed up table reads?

The question is not correct. "What structure can you have the database make to speed up table reads?" It is not clear what exactly the term "structure" means in this case. Follow the rules of DB tuning we have to:

1) properly use indexes ( different types of indexes)

2) properly locate different DB objects across different tablespaces, files and so on.

3) Create a special space (tablespace) to locate some of the data with special datatypes( for example CLOB, LOB and ...)

6.      What is a "join"?

Joins merge the data of two related tables into a single result set, presenting a denormalized view of the data.

7.      What is a "constraint"?

  A constraint allows you to apply simple referential integrity checks to a table. There are 5 primary types of constraints that are currently supported by SQL Server:

  PRIMARY/UNIQUE - enforces uniqueness of a particular table column.

  DEFAULT - specifies a default value for a column in case an insert operation does not provide one.

  FOREIGN KEY - validates that every value in a column exists in a column of another table.

  CHECK - checks that every value stored in a column is in some specified list

  NOT NULL - is a constraint which does not allow values in the specific column to be null. And also it is the only constraint which is not a table level constraint.

8.      What is a "primary key"?

Primary Key is a type of a constraint enforcing uniqueness and data integrity for each row of a table. All columns participating in a primary key constraint must possess the NOT NULL property.

9.      What is a "functional dependency"? How does it relate to database table design?

What functional dependence in the context of a database means is that: Assume that a table exists in the database called TABLE with a composite primary key (A, B) and other non-key attributes (C, D, E). Functional dependency in general, would mean that any non-key attribute - C D or E being dependent on the primary key (A and B) in our table here.

  Partial functional dependency, on the other hand, is another corollary of the above, which states that all non-key attributes - C D or E - if dependent on the subset of the primary key (A and B) and not on it as a whole.

  Example :

  ----------

  Fully Functional Dependent : C D E --> A B

  Partial Functional dependency : C --> A, D E --> B

  Hope that helps!

10. What is a "trigger"?

A trigger is a database object directly associated with a particular table. It fires whenever a specific statement/type of statement is issued against that table. The types of statements are insert, update, delete and query statements. Basically, trigger is a set of SQL statements that execute in response to a data modification/retrieval event on a table.

Other than table triggers there are also schema and database triggers. These can be made to fire when new objects are created, when a user logs in, when the database shutdown etc. Table level triggers can be classified into row and statement level triggers and those can be further broken down into before and after triggers. Before triggers can modify data.

11. What is "index covering" of a query?

A nonclustered index that includes (or covers) all columns used in a query is called a covering index. When SQL server can use a nonclustered index to resolve the query, it will prefer to scan the index rather than the table, which typically takes fewer data pages. If your query uses only columns included in the index, then SQL server may scan this index to produce the desired output.

12. What is a SQL view?

View is a precomplied SQL query which is used to select data from one or more tables. A view is like a table but it doesn't physically take any space. View is a good way to present data in a particular format if you use that query quite often.

View can also be used to restrict users from accessing the tables directly.

A view otherwise known as a virtual table is a mere window over the base tables in the database. This helps us gain a couple of advantages:

1) Inherent security exposing only the data that is needed to be shown to the end user

2) Views are updateable based on certain conditions. For example, updates can only be directed to one underlying table of the view. After modification if the rows or columns don't comply with the conditions that the view was created with, those rows disappear from the view. You could use the CHECK OPTION with the view definition, to make sure that any updates to make the rows invalid will not be permitted to run.

3) Views are not materialized (given a physical structure) in a database. Each time a view is queried the definition stored in the database is run against the base tables to retrieve the data. One exception to this is to create a clustered index on the view to make it persistent in the database. Once you create a clustered index on the view, you can create any number of non-clustered indexes on the view.

13. 存儲過程和函數(shù)的區(qū)別

存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務(wù),用戶可以調(diào)用存儲過程,而函數(shù)通常是數(shù)據(jù)庫已定義的方法,它接收參數(shù)并返回某種類型的值并且不涉及特定用戶表。

14. 事務(wù)是什么?

事務(wù)是作為一個邏輯單元執(zhí)行的一系列操作,一個邏輯工作單元必須有四個屬性,稱為 ACID(原子性、一致性、隔離性和持久性)屬性,只有這樣才能成為一個事務(wù):

原子性:事務(wù)必須是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。

一致性:事務(wù)在完成時,必須使所有的數(shù)據(jù)都保持一致狀態(tài)。在相關(guān)數(shù)據(jù)庫中,所有規(guī)則都必須應(yīng)用于事務(wù)的修改,以保持所有數(shù)據(jù)的完整性。事務(wù)結(jié)束時,所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)(如 B 樹索引或雙向鏈表)都必須是正確的。

隔離性:由并發(fā)事務(wù)所作的修改必須與任何其它并發(fā)事務(wù)所作的修改隔離。事務(wù)查看數(shù)據(jù)時數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會查看中間狀態(tài)的數(shù)據(jù)。這稱為可串行性,因?yàn)樗軌蛑匦卵b載起始數(shù)據(jù),并且重播一系列事務(wù),以使數(shù)據(jù)結(jié)束時的狀態(tài)與原始事務(wù)執(zhí)行的狀態(tài)相同。

持久性:事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。該修改即使出現(xiàn)系統(tǒng)故障也將一直保持。

15. 游標(biāo)的作用?如何知道游標(biāo)已經(jīng)到了最后?

游標(biāo)用于定位結(jié)果集的行,通過判斷全局變量@@FETCH_STATUS可以判斷是否到了最后,通常此變量不等于0表示出錯或到了最后。

16. 觸發(fā)器分為事前觸發(fā)和事后觸發(fā),這兩種觸發(fā)有和區(qū)別。語句級觸發(fā)和行級觸發(fā)有何區(qū)別。

事前觸發(fā)器運(yùn)行于觸發(fā)事件發(fā)生之前,而事后觸發(fā)器運(yùn)行于觸發(fā)事件發(fā)生之后。通常事前觸發(fā)器可以獲取事件之前和新的字段值。

語句級觸發(fā)器可以在語句執(zhí)行前或后執(zhí)行,而行級觸發(fā)在觸發(fā)器所影響的每一行觸發(fā)一次。

17. SQL Server常用測試題(1)

問題描述:

為管理崗位業(yè)務(wù)培訓(xùn)信息,建立3個表:

S (S#,SN,SD,SA) S#,SN,SD,SA 分別代表學(xué)號、學(xué)員姓名、所屬單位、學(xué)員年齡

C (C#,CN ) C#,CN 分別代表課程編號、課程名稱

SC ( S#,C#,G ) S#,C#,G 分別代表學(xué)號、所選修的課程編號、學(xué)習(xí)成績

1. 使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修課程名稱為’稅收基礎(chǔ)’的學(xué)員學(xué)號和姓名

  --實(shí)現(xiàn)代碼:

SELECT SN,SD FROM S

WHERE [S#] IN(SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#] AND CN=N'稅收基礎(chǔ)')

2. 使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修課程編號為’C2’的學(xué)員姓名和所屬單位

  --實(shí)現(xiàn)代碼:

SELECT S.SN,S.SD FROM S,SC

WHERE S.[S#]=SC.[S#] AND SC.[C#]='C2'

3. 使用標(biāo)準(zhǔn)SQL嵌套語句查詢不選修課程編號為’C5’的學(xué)員姓名和所屬單位

  --實(shí)現(xiàn)代碼:

SELECT SN,SD FROM S

WHERE [S#] NOT IN(SELECT [S#] FROM SC WHERE [C#]='C5')

4. 使用標(biāo)準(zhǔn)SQL嵌套語句查詢選修全部課程的學(xué)員姓名和所屬單位

  --實(shí)現(xiàn)代碼:

SELECT SN,SD FROM S

WHERE [S#] IN( SELECT [S#] FROM SC RIGHT JOIN

  C ON SC.[C#]=C.[C#] GROUP BY [S#]

HAVING COUNT(*)=COUNT([S#]))

5. 查詢選修了課程的學(xué)員人數(shù)

  --實(shí)現(xiàn)代碼:

  SELECT 學(xué)員人數(shù)=COUNT(DISTINCT [S#]) FROM SC

6. 查詢選修課程超過5門的學(xué)員學(xué)號和所屬單位

  --實(shí)現(xiàn)代碼:

  SELECT SN,SD FROM S

  WHERE [S#] IN(

  SELECT [S#] FROM SC

  GROUP BY [S#]

  HAVING COUNT(DISTINCT [C#])>5)

  

18. SQL Server常用測試題(2)

問題描述:

已知關(guān)系模式:

S (SNO,SNAME) 學(xué)生關(guān)系。SNO 為學(xué)號,SNAME 為姓名

C (CNO,CNAME,CTEACHER) 課程關(guān)系。CNO 為課程號,CNAME 為課程名,CTEACHER 為任課教師

SC(SNO,CNO,SCGRADE) 選課關(guān)系。SCGRADE 為成績

1. 找出沒有選修過“李明”老師講授課程的所有學(xué)生姓名

--實(shí)現(xiàn)代碼:

SELECT SNAME FROM S

WHERE NOT EXISTS(

SELECT * FROM SC,C WHERE SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)

2. 列出有二門以上(含兩門)不及格課程的學(xué)生姓名及其平均成績

--實(shí)現(xiàn)代碼:

SELECT S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)

FROM S,SC,(

SELECT SNO FROM SC WHERE SCGRADE<60 GROUP BY SNO

HAVING COUNT(DISTINCT CNO)>=2)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO

GROUP BY S.SNO,S.SNAME

3. 列出既學(xué)過“1”號課程,又學(xué)過“2”號課程的所有學(xué)生姓名

  --實(shí)現(xiàn)代碼:

  SELECT S.SNO,S.SNAME

  FROM S,(SELECT SC.SNO FROM SC,C

  WHERE SC.CNO=C.CNO AND C.CNAME IN('1','2')

  GROUP BY SNO

  HAVING COUNT(DISTINCT CNO)=2

  )SC WHERE S.SNO=SC.SNO

4. 列出“1”號課成績比“2”號同學(xué)該門課成績高的所有學(xué)生的學(xué)號

  --實(shí)現(xiàn)代碼:

  SELECT S.SNO,S.SNAME

  FROM S,(

  SELECT SC1.SNO

  FROM SC SC1,C C1,SC SC2,C C2

  WHERE SC1.CNO=C1.CNO AND C1.NAME='1'

  AND SC2.CNO=C2.CNO AND C2.NAME='2'

  AND SC1.SCGRADE>SC2.SCGRADE

  )SC WHERE S.SNO=SC.SNO

5. 列出“1”號課成績比“2”號課成績高的所有學(xué)生的學(xué)號及其“1”號課和“2”號課的成績

  --實(shí)現(xiàn)代碼:

  SELECT S.SNO,S.SNAME,SC.[1號課成績],SC.[2號課成績]

  FROM S,(

  SELECT SC1.SNO,[1號課成績]=SC1.SCGRADE,[2號課成績]=SC2.SCGRADE

  FROM SC SC1,C C1,SC SC2,C C2

  WHERE SC1.CNO=C1.CNO AND C1.NAME='1'

  AND SC2.CNO=C2.CNO AND C2.NAME='2'

  AND SC1.SCGRADE>SC2.SCGRADE

  )SC WHERE S.SNO=SC.SNO

19. Question 1Can you use a batch SQL or store procedure to calculating the Number of Days in a Month

找出當(dāng)月的天數(shù)
select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate()) as varchar)+'-'+cast(month(getdate()) as varchar)+'-01' as datetime))))

20. Question2:Can you use a SQL statement to calculating it!
How can I print "10 to 20" for books that sell for between $10 and $20,"unknown" for books whose price is null, and "other" for all other prices?

select bookid,bookname,price=case when price is null then 'unknown'

when  price between 10 and 20 then '10 to 20' else price end
from books

21.    Question3:Can you use a SQL statement to finding duplicate values!
How can I find authors with the same last name?
You can use the table authors in datatabase pubs. I want to get the result as below:
Output:
au_lname                                 number_dups
---------------------------------------- -----------
Ringer                                   2
(1 row(s) affected)
Answer 3
select au_lname,number_dups=count(1) from authors group by au_lname

22. Question4:Can you create a cross-tab report in my SQL Server!
How can I get the report about sale quality for each store and each quarter and the total sale quality for each quarter at year 1993?
You can use the table sales and stores in datatabase pubs.
Table Sales record all sale detail item for each store. Column store_id is the id of each store, ord_date is the order date of each sale item, and column qty is the sale qulity. Table stores record all store information.
I want to get the result look like as below:
Output:

stor_name                                Total       Qtr1        Qtr2        Qtr3        Qtr4       
---------------------------------------- ----------- ----------- ----------- ----------- -----------
Barnum's                                 50          0           50          0           0
Bookbeat                                 55          25          30          0           0
Doc-U-Mat: Quality Laundry and Books     85          0           85          0           0
Fricative Bookshop                       60          35          0           0           25
Total                                    250         60          165         0           25


Answer 4
用動態(tài)SQL實(shí)現(xiàn)

23. Question5: The Fastest Way to Recompile All Stored Procedures
I have a problem with a database running in SQL Server 6.5 (Service Pack 4). We moved the database (object transfer) from one machine to another last night, and an error (specific to a stored procedure) is cropping up. However, I can't tell which procedure is causing it. Permissions are granted in all of our stored procedures; is there a way from the isql utility to force all stored procedures to recompile?

Tips: sp_recompile can recomplie a store procedure each time
Answer 5
在執(zhí)行存儲過程時,使用 with recompile 選項(xiàng)強(qiáng)制編譯新的計劃;使用sp_recompile系統(tǒng)存儲過程強(qiáng)制在下次運(yùn)行時進(jìn)行重新編譯

24. Question6: How can I add row numbers to my result set?
In database pubs, have a table titles , now I want the result shown as below,each row have a row number, how can you do that?
Result:

line-no     title_id
----------- --------
1           BU1032
2           BU1111
3           BU2075
4           BU7832
5           MC2222
6           MC3021
7           MC3026
8           PC1035
9           PC8888
10          PC9999
11          PS1372
12          PS2091
13          PS2106
14          PS3333
15          PS7777
16          TC3218
17          TC4203
18          TC7777

Answer 6
--SQL 2005
的寫法
select row_number() as line_no ,title_id from titles
--SQL 2000的寫法
select line_no identity(int,1,1),title_id into #t from titles
select * from #t
drop table #t

25. Question 7: Can you tell me what the difference of two SQL statements at performance of execution?

Statement 1:
if NOT EXISTS ( select * from publishers where state = 'NY')
begin
SELECT 'Sales force needs to penetrate New York market'
end
else
begin
SELECT 'We have publishers in New York'
end
Statement 2:
if EXISTS ( select * from publishers where state = 'NY')
begin
SELECT 'We have publishers in New York'
end
else
begin
SELECT 'Sales force needs to penetrate New York market'
end
Answer 7
不同點(diǎn):執(zhí)行時的事務(wù)數(shù),處理時間,從客戶端到服務(wù)器端傳送的數(shù)據(jù)量大小

26. Question8: How can I list all California authors regardless of whether they have written a book?
In database pubs, have a table authors and titleauthor , table authors has a column state, and titleauhtor have books each author written.
CA behalf of california in table authors.
Answer 8
select * from  authors where state='CA'

27. Question9: How can I get a list of the stores that have bought both 'bussiness' and 'mod_cook' type books?
In database pubs, use three table stores,sales and titles to implement this requestment. Now I want to get the result as below:

stor_id stor_name                               
------- ----------------------------------------
...
7896    Fricative Bookshop
...
...
...
Answer 9

select distinct a.stor_id, a.stor_name from stores a,sales b,titles c
where a.stor_id=b.stor_id and b.title_id=c.title_id and c.type='business' and
exists(select 1 from sales k,titles g where stor_id=b.stor_id
and k.title_id=g.title_id and g.type='mod_cook')   

28. Question10: How can I list non-contignous data?
In database pubs, I create a table test using statement as below, and I insert several row as below

create table test
( id int primary key )
go

insert into test values (1 )
insert into test values (2 )
insert into test values (3 )
insert into test values (4 )
insert into test values (5 )
insert into test values (6 )
insert into test values (8 )
insert into test values (9 )
insert into test values (11)
insert into test values (12)
insert into test values (13)
insert into test values (14)
insert into test values (18)
insert into test values (19)
go

Now I want to list the result of the non-contignous row as below,how can I do it?
Missing after Missing before
------------- --------------
6             8
9             11
...

Answer 10
select id from test t where not exists(select 1 from test where id=t.id+1)
or not exists(select 1 from test where id=t.id-1)

29. Question11: How can I list all book with prices greather than the average price of books of the same type?
In database pubs, have a table named titles , its column named price mean the price of the book, and another named type mean the type of books.
Now I want to get the result as below:

type         title                                                                            price                
------------ -------------------------------------------------------------------------------- ---------------------
business     The Busy Executive's Database Guide                                              19.9900
...
...
...
...

Answer 11
select a.type,a.title,a.price from titles a,
(select type,price=avg(price) from titles group by type)b
where a.type=b.type and a.price>b.price

      試題點(diǎn)評:通覽整個試題,我們不難發(fā)現(xiàn),這份試題是針對SQL Server數(shù)據(jù)庫人員的。而從難度分析上來看,這份試題也屬于同類試題中比較難的了。之所以說它難,首先是限定時間的全英文試題;其次,盡管這份試題主要是考核開發(fā)能力,但卻涉及到了算法的選擇和性能的調(diào)優(yōu);最后,這份試題還夾進(jìn)了SQL Server數(shù)據(jù)庫的升級問題。因此,綜上所述,我們估計這是一家從事程序外包工作的外企招聘后臺開發(fā)或與后臺開發(fā)相關(guān)的SQL Server高級程序員的試題。



開心過好每一天。。。。。