oracle面試題

oracle試題

完成下列操作,寫出相應的SQL語句

   1. 創建表空間neuspace,數據文件命名爲neudata.dbf,存放在d:\data目錄下,文件大小爲200MB,設爲自動增長,增量5MB,文件最大爲500MB。(8分)

答:create tablespace neuspace datafile ‘d:\data\neudata.dbf’ size 200m auto extend on next 5m maxsize 500m;

2. 假設表空間neuspace已用盡500MB空間,現要求增加一個數據文件,存放在e:\appdata目錄下,文件名爲appneudata,大小爲500MB,不自動增長。(5分)

答:alter tablespace neuspace add datafile ‘e:\appdata\appneudata.dbf’ size 500m;

3. 以系統管理員身份登錄,創建賬號tom,設置tom的默認表空間爲neuspace。爲tom分配connect和resource系統角色,獲取基本的系統權限。然後爲tom分配對用戶scott的表emp的select權限和對SALARY, MGR屬性的update權限。(8分)

答:create user tom identified by jack default tablespace neuspace;

Grant connect, resource to tom;

Grant select, update(salary, mgr) on scott.emp to tom;

4. 按如下要求創建表class和student。(15分)

屬性


類型(長度)


默認值


約束


含義
CLASSNO 數值 (2) 無 主鍵 班級編號
CNAME 變長字符 (10) 無 非空 班級名稱

屬性


類型(長度)


默認值


約束


含義
STUNO 數值 (8) 無 主鍵 學號
SNAME 變長字符 (12) 無 非空 姓名
SEX 字符 (2) 男 無 性別
BIRTHDAY 日期 無 無 生日
EMAIL 變長字符 (20) 無 唯一 電子郵件
SCORE 數值 (5, 2) 無 檢查 成績
CLASSNO 數值 (2) 無 外鍵,關聯到表CLASS的CLASSNO主鍵 班級編號

答:create table class

(classno number(2) constraint class_classno_pk primary key,

cname varchar2(10) not null);

create table student

(stuno number(8) constraint student_stuno_pk primary key,

sname varchar2(12) not null,

sex char(2) default ‘男’,

birthday date,

email varchar2(20) constraint student_email_uk unique,

score number(5,2) constraint student_score_ck check(score>=0 and score<=100),

classno number(2) constraint student_classno_fk references class(classno)

);

5. 在表student的SNAME屬性上創建索引student_sname_idx(5分)

答:create index student_sname_idx on student(sname);

6. 創建序列stuseq,要求初值爲20050001,增量爲1,最大值爲20059999。(6分)

答:create sequence stuseq increment by 1 start with 20050001 maxvalue 20059999 nocache nocycle;

7. 向表student中插入如下2行。(5分)
STUNO SNAME SEX BIRTHDAY EMAIL SCORE CLASSNO
從stuseq取值 tom 男 1979-2-3 14:30:25 [email protected] 89.50 1
從stuseq取值 jerry 默認值 空 空 空 2

答:insert into student values(stuseq.nextval, ’tom’, ’男’, to_date(‘1979-2-3

14:30:25’, ’yyyy-mm-dd fmhh24:mi:ss’), ’[email protected]’, 89.50, 1);

insert into student (stuno, sname, classno) values(stuseq.nextval, ’jerry’, 2);

8. 修改表student的數據,將所有一班的學生成績加10分。(4分)

答:update student set score=score+10 where classno=1;

9. 刪除表student的數據,將所有3班出生日期小於1981年5月12日的記錄刪除。(4分)

答:delete from student where classno=3 and birthday > ’12-5月-81’;

10. 完成以下SQL語句。(40分)

(1) 按班級升序排序,成績降序排序,查詢student表的所有記錄。

答:select * from student order by classno, score desc;

(2) 查詢student表中所有二班的成績大於85.50分且出生日期大於1982-10-31日的男生的記錄。

答:select * from student where classno=2 and score>85.50 and birthday < ’31-10月-82’ and sex=’男’;

(3) 查詢student表中所有三班成績爲空的學生記錄。

答:select * from student where classno=3 and score is null;

(4) 表student與class聯合查詢,要求查詢所有學生的學號,姓名,成績,班級名稱。(使用oracle與SQL 99兩種格式)

答:select s.stuno, s.sname, s.score, c.cname from student s, class c where s.classno=c.classno;

(5) 按班級編號分組統計每個班的人數,最高分,最低分,平均分,並按平均分降序排序。

答:select classno, count(*), max(score), min(score), avg(score) from student group by classno order by avg(score) desc;

(6) 查詢一班學生記錄中所有成績高於本班學生平均分的記錄。

答:select * from student where classno=1 and score > (select avg(score) from student where classno=1);

(7) 統計二班學生中所有成績大於所有班級平均分的人數。

答:select count(*) from student where classno=2 and score > all (select avg(socre) from student group by classno);

(8) 查詢平均分最高的班級編號與分數。

答:select classno, avg(score) from student group by classno having avg(score) = (select max(avg(score)) from student group by classno);

(9) 查詢所有學生記錄中成績前十名的學生的學號、姓名、成績、班級編號。

答:select stuno, sname, score, classno from (select * from student order by score desc) where rownum<=10;

(10) 創建視圖stuvu,要求視圖中包含student表中所有一班學生的stuno, sname, score, classno四個屬性,並具有with check option限制。

答:create view stuvu

as

select stuno, sname,score,classno from student where classno=1 with check option;
表結構說明:
create table employee(
id number(10) not null, — 員工工號
salary number(10,2) default 0 not null, — 薪水
name varchar2(24) not null — 姓名
);
1.創建序列seq_employee,該序列每次取的時候它會自動增加,從1開始計數,不設最大值,並且一直累加,不循環。(10分)
2.寫一個PL/SQL塊,插入表user.employee中100條數據。插入該表中字段id用序列seq_employee實現,薪水和姓名字段可以任意填寫。(15分)



6.寫一個匿名語句塊,用於執行函數f_employee,並打印執行該函數的結果。(8分)
7.創建存儲過程p_create_emp,用於判斷表employee是否存在,如果存在則刪除該表。(15分)
8.寫一個匿名語句塊,用於執行存儲過程p_create_emp。(7分)
答案如下:
SQL> create table employee(
2 id number(10) not null, — 員工工號
3 salary number(10,2) default 0 not null, — 薪水
4 name varchar2(24) not null — 姓名
5 );
表已創建。
—第一題答案:
SQL> Create sequence seq_employee increment by 1 start with 1 nomaxvalue nocycle;
序列已創建。
—第二題答案:
SQL> declare i number;
2 begin
3 for i in 1 .. 100
4 loop
5 insert into employee
6 values(seq_employee.nextval,1950+i,’王明’||to_char(i));
7 commit;
8 end loop;
9 end;
10 /
PL/SQL 過程已成功完成。
SQL> select * from employee where rownum<11;
ID SALARY NAME
———- ———- ————————
1 1951 王明1
2 1952 王明2
3 1953 王明3
4 1954 王明4
5 1955 王明5
6 1956 王明6
7 1957 王明7
8 1958 王明8
9 1959 王明9
10 1960 王明10
已選擇10行。
3.寫一個語句塊,在語句塊中定義一個顯式遊標,按id升序排列,打印表employee中前十條數據。(15分)
——-第三題答案:
SQL> declare
2 cursor c is select id,salary,name from(select * from employee order by id) where rownum<11;
3 v_record c%rowtype;
4 begin
5 open c;
6 loop
7 fetch c into v_record;
8 exit when c%notfound;
9 dbms_output.put_line(to_char(v_record.id)||’,'||to_char(v_record.salary)||’,'||v_record.name);
10 end loop;
11 close c;
12 end;
13 /
1,1951,王明1
2,1952,王明2
3,1953,王明3
4,1954,王明4
5,1955,王明5
6,1956,王明6
7,1957,王明7
8,1958,王明8
9,1959,王明9
10,1960,王明10
PL/SQL 過程已成功完成。
4.創建存儲過程p_employee,輸入員工薪水範圍,返回員工工號、姓名、薪水結果集,結果集按員工薪水升序排列。(15分)
——-第四題答案
SQL> create or replace procedure p_employee
2 (iminsalary in number,
3 imaxsalary in number)
4 is
5 begin
6 for x in(select id,salary,name from(select * from employee where salary between iminsalary and imaxsalary) order by salary)
7 loop
8 dbms_output.put_line(to_char(x.id)||to_char(x.salary)||x.name);
9 end loop;
10 end;
11 /
過程已創建。
SQL> exec p_employee(2000,2007);
502000王明50
512001王明51
522002王明52
532003王明53
542004王明54
552005王明55
562006王明56
572007王明57
PL/SQL 過程已成功完成。
5.創建函數f_employee實現更新員工薪水的功能,將薪水低於2000且姓wang的員工薪水加5%,其他不變,更新成功則返回0,否則返回1。(15分)
———第五題答案
SQL> create or replace function f_employee return number
is
begin
update employee set salary=salary+salary*0.05 where salary<2000 and name like ‘王%’;
commit;
if sql%rowcount=0 then
return 1;
else
return 0;
end if;
end;
/
函數已創建。
—–第六題答案
SQL> declare a number;
2 begin
3 a:=f_employee();
4 dbms_output.put_line(to_char(a));
5 end;
6 /
0
PL/SQL 過程已成功完成。
SQL> select * from employee where salary<2000 and name like ‘王%’;
未選定行
SQL> select * from employee where rownum<50;
ID SALARY NAME
———- ———- ————————
1 2048.55 王明1
2 2049.6 王明2
3 2050.65 王明3
4 2051.7 王明4
5 2052.75 王明5
6 2053.8 王明6
7 2054.85 王明7
8 2055.9 王明8
9 2056.95 王明9
10 2058 王明10
11 2059.05 王明11
ID SALARY NAME
———- ———- ————————
12 2060.1 王明12
13 2061.15 王明13
14 2062.2 王明14
15 2063.25 王明15
16 2064.3 王明16
17 2065.35 王明17
18 2066.4 王明18
19 2067.45 王明19
20 2068.5 王明20
21 2069.55 王明21
22 2070.6 王明22
ID SALARY NAME
———- ———- ————————
23 2071.65 王明23
24 2072.7 王明24
25 2073.75 王明25
26 2074.8 王明26
27 2075.85 王明27
28 2076.9 王明28
29 2077.95 王明29
30 2079 王明30
31 2080.05 王明31
32 2081.1 王明32
33 2082.15 王明33
ID SALARY NAME
———- ———- ————————
34 2083.2 王明34
35 2084.25 王明35
36 2085.3 王明36
37 2086.35 王明37
38 2087.4 王明38
39 2088.45 王明39
40 2089.5 王明40
41 2090.55 王明41
42 2091.6 王明42
43 2092.65 王明43
44 2093.7 王明44
ID SALARY NAME
———- ———- ————————
45 2094.75 王明45
46 2095.8 王明46
47 2096.85 王明47
48 2097.9 王明48
49 2098.95 王明49
已選擇49行。
—–第七題答案
SQL> create or replace procedure p_create_emp
2 is
3 v_count number;
4 begin
5 select count(*) into v_count from user_tables where table_name=’EMPLOYEE’;
6 if v_count=0 then
7 return;
8 else
9 execute immediate ‘drop table employee’;
10 end if;
11 end;
12 /
過程已創建。

———第八題答案
SQL> exec p_create_emp;
PL/SQL 過程已成功完成。
SQL> select * from employee;
select * from employee
*
ERROR 位於第 1 行:
ORA-00942: 表或視圖不存在

A schema is collection of database objects, including logical structures such as tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links.

schema是數據庫對象的集合,包括表,視圖,序列,存儲過程,邏輯結構,索引,集羣和數據庫鏈接等等邏輯結構。
* A user owns a schema.

一個user擁有一個schema
* A user and a schema have the same name.

user和他的schema的名字相同
* The CREATE USER command creates a user. It also automatically creates a schema for that user.
CREATE USER命令創建一個user,同時也爲這個user創建一個schema
* The CREATE SCHEMA command does not create a “schema” as it implies, it just allows you to create multiple tables and views and perform multiple grants in your own schema in a single transaction.
CREATE SCHEMA命令並不像命令說的那樣創建一個SCHEMA, 他只是給你創建table的權限和在同一個事務中在你創建的schema中查看和進行賦與權限的權限。
* For all intents and purposes you can consider a user to be a schema and a schema to be a user.
在任何情況下你都可以把用戶和schema當作同一個東西。

影響oracle查詢性能的因素都有哪些?
1. 硬件配置:處理器速度,內存大小,磁盤讀寫速度,網絡傳輸速度等等,這些都影響oracle的整體性能和查詢性能

2. 是否建立了索引,索引是否合理

3. 表碎片和索引碎片,生產庫由於長時間運營,碎片可能導致查詢使用錯誤的執行計劃,導致查詢速度變慢

4. 表或者索引的initial 參數配置不同,導致數據擴展區大小不一,也可能 導致查詢速度降低。

5. SQL執行效率低下,導致查詢速度很慢

6. 數據庫負載過大

1 以下權限哪個時系統權限?

A.ALTER

B.EXECUTE

C.PREFERENCES

D.BACKUP ANY TABLE

答案 D

2 以下哪個權限時對象權限?

A.INDEX

B.DROP USER

C.CREATE SESSION

D.BACKUP ANY TABLE

答案 A

3 以下哪個視圖可以查到用戶具有使用權限的表的信息

A.USER_VIEWS

B.USER_TABLES

C.ALL_OBJECTS

D.USER_OBJECTS

答案 C

4 .簡述帶前綴的視圖的區別:V$,DBA_,ALL_,USER_

答案:V$開頭的是描述實例運行的動態性能視圖,

DBA_,數據庫中數據字典的信息

ALL_,用戶具有操作權限的對象 信息

USER_,用戶所擁有的對象的信息

5 數據定義語言是一種方法,用於:

A 確保數據的精確性

B 定義和儲存數據對象

C 幫助查看數據

D 儲存數據

6 關係定於爲

A 網絡之間的關係

B 實體之間的關係

C 屬性之間的關係

D 對象之間的關係

7 下列哪個表可以用來查詢所有的索引

A  ALL_INDEXES_TABLES

B  ALL_INDEXES

C  INDEX_TABLES

D  以上都不是

8 _____數據字典表可以用來查看抽象數據類型的實際結構.

A  USER_TYPE_ATTRS

B  USER_TABLES

C  USER_TYPE_TABS

D  USER_OBJECT

9 哪個初始化參數在數據庫創建後無法改變

A  DB_NAME

B  DB_BLOCK_SIZE

C  DB_CACHE_SIZE

D  SHARED_POOL_SIZE

10 現在要啓動數據庫,那麼下面哪一個啓動語句是錯誤的

A  STRATUP NORMAL

B  STRATUP FORCE

C  STRATUP NOMOUNT

D  STARTUP MOUNT

11 使用哪一條SHUTDOWN語句關閉數據庫時,下次打開數據庫是需要做恢復操作?

A SHUTDOWN TRANSACTIONAL

B SHUTDOWN IMMEDIATE

C SHUTDOWN ABORT

D SHUTDOWN NORMAL

12 關於數據庫存儲結構說法正確的是

A oracle始終都只能以塊作爲存儲單位

B oracle是以塊爲基本存儲單位,然後將塊組合成區,再將區合爲段,最後再由表空間對這些段進行管理。

C oracle的基本存儲單位是表空間

D oracle的基本存儲單位是表,將表存放於表空間,當有數據加入並提交時,最後將表空間的數據寫入數據文件。

13 下列哪個選項不適物理結構中的對象

A 數據文件

B 重做日誌文件

C 表空間

D 控制文件

14 在創建數據庫時,必須得表空間是哪個表空間

A TABLESPACE

B SYSTEM TABLESPACE

C USERS TABLESPACE

D ROLLBACK TABLESPACE

15 關於oracle數據庫啓動的順序,描述錯誤的是

A 當調用STRATUP open命令時,就打開了數據庫

B 啓動時,oracle會先啓動INSTANCE,再由INSTANCE打開數據文件和日誌文件,從而啓動數據庫

C 啓動時,oracle會先啓動INSTANCE,然後加載init.ora文件,根據參數設置,分配SGA和CACHE的大小,之後加載控制文件,根據控制文件的內容,分別讀取數據文件和日誌文件。最後啓動必要的後臺進程和數據庫。

D 啓動後臺進程,在啓動INSTANCE,最後加載數據庫

16 要查看當前用戶下有哪些數據表格,適用下列哪個視圖

A USER_TABLE

B TAB

C USER_ALL_TABLES

D TABLES_USER

17 下面哪一個不是ORACLE實例的組成部分

A SGA

B PGA

C CONTROLFILE

D BGPROCESS

18 Oracle中哪個緩衝區是以循環方式寫入的

A DATABASE BUFFER

B SHARD BUFFER POOL

C REDOLOG BUFFER

D LARGE BUFFER POOL

19 在一個Oracle Instance 中最多可啓動多少個DBWR進程

A 1個

B 10個

C 256個

D 32個

20 如果一個用戶的服務進程意外終止了,Oracle會使用哪一個後臺進程來釋放該用戶所佔的資源

A SMON

B RECV

C PMON

D CKPT

21 當服務進程無法在系統緩存中找到空閒空間時存放數據時,將會應用下列哪一項操作

A 調用DBWR將髒數據寫入到數據文件

B 調用CKPT將髒數據寫入到數據文件

C 調用SMON來收集存儲碎片,以得到空閒空間

D 調用LGWR將數據寫入到日誌文件

22 下列哪個進程不是Oracle必須的後臺進程

A DBWR 數據寫入進程

B LGWR 日誌寫入進程

C SMON 系統監視進程

D ARCn 日誌歸檔進程

23 關於模式描述不正確的是

A 表和視圖等模式對象一定屬於某一個模式

B 一個表可以同時屬於多個模式

C 某些數據庫對象可以不屬於任何模式

D 在Oracle數據庫中,用戶與模式是一一對應的

24 每一個用戶都有一個模式,一般情況下,用戶名與模式名相同,必要時,用戶還可以進入到其他用戶的模式。

A 說法不正確

B 說法正確

C 差不多吧

D 沒有答案

25 當用戶BOB通過ALTER SESSION SET CURRENT_SCHEMA=SCOTT語句,進入到scott模式時,說法正確的是

A BOB擁有了SCOTT模式下的所有權限

B BOB只是可以不用以SCOTT爲前綴來訪問SCOTT用戶的對象了,但是並沒有得到SCOTT的權限

C 如果BOB在該模式下建了一個表,則該表還是屬於BOB,而不屬於SCOTT

D BOB在訪問自己模式下的對象時,也不需要使用BOB作爲前綴

26 ROWID的作用是

A 唯一標識表中的一條記錄

B 這是一個僞列,用戶一般無法使用,是由Oracle自身引用的

C 表示了數據的物理存儲方式

D 沒有作用

27 關於視圖的說法正確的是

A 視圖與表一樣,也佔用系統空間

B 視圖實際上只是在需要時,執行它所代表的SQL語句

C 視圖不用記錄在數據字典中

D 視圖其實就是表

28 視圖能否修改

A 視圖不能修改,因爲它只是一段SQL語句而已

B 可以修改,它就代表了表格

C 沒有使用聯合操作符的,沒有排序的,沒有分組的,沒有使用子查詢和聚合函數的,凡是鍵保留表的值可以修改。

D 只要是兩個表以上的聯合視圖,就都不能修改

29 關於索引的說法錯誤的是

A 索引對於表來說,可有可無

B 索引是用來提高查詢速度的

C 索引是用來裝飾表,是表格好看一點

D 索引會影響更新的速度

30 索引的存儲方式

A 當創建索引的時候,數據庫會將該索引所對應的列和每列相對應ROWID存放在一起,如果查詢時引用了索引列,數據庫就會從索引中找到與列對應的ROWID,從而可以快速的定位記錄。

B 首先建立一個索引段,然後將創建索引的列存在索引段中,每當引用了索引列的時候,就先從索引段中找到該列值,然後再定位記錄。

C 索引只不過是一個數組,每次從數組中取值當然會快一些

D 以上都不對

31 索引的特點

A 索引越多查詢越快

B 索引越多查詢越慢

C 索引越多更新越快

D 索引越多查詢更新就越快

32序列的定義

A 序列不佔用實際的存儲空間

B 序列也是數據庫對象,所以也佔空間

C 序列佔的空間較少,這個可以調

D 上面都不對

33 要創建一個從1開始,每次增加1,最大值爲99999,達到最大值從頭開始的序列,方法正確的是

A CREATE SEQUENCE SEQ_NAME

INCREMENT BY  1

START BY  1

MAXVALUE  99999

CYCLE

B CREATE SEQUENCE SEQ_NAME

INCREMENT BY  1

START WITH  1

MAXVALUE  99999

CYCLE

C CREATE SEQUENCE SEQ_NAME

INCREMENT BY  1

START WITH  1

MAXVALUE  99999

NOCYCLE

D CREATE SEQUENCE SEQ_NAME

INCREMENT  1

START BY  1

MAXVALUE  99999

CYCLE

34 當定義了一個序列(SEQUTEST)後,使用序列方法正確的是

A 直接使用SEQUTEST.CURRVAL;

B 必須先使用SEQUTEST.NEXTVAL 然後才能使用 SEQUTEST.CURRVAL

C 只能使用SEQUTEST.NEXTVAL

D 必須兩者一起使用

35 同義詞有哪幾種類型

A 公有同義詞和私有同義詞

B 就一種 同義詞

C 系統同義詞

D 用戶同義詞

36 什麼是同義詞

A同義詞是一個模式對象的別名,通過爲模式對象創建同義詞,可以隱藏對象的實際名稱和所有者信息

B 在數據庫中兩個相同意義的單詞

C 給數據庫對象起個別名,這樣一來,可以用多種名字來引用該對象,但只能使創建該同義詞的用戶才能訪問

D 上面都不對

37 查詢用戶同義詞的數據字典視圖是

A USERS_SYNONYM

B USER_SYNONYMS

C ALL_ SYNONYM

D VIEW_ SYNONYMS

38 有一個商品表,需要爲該表的id列,產生一個有序的,唯一的連續整數,應該採用以下的那種結構

A VIEW

B SEQUENCE

C SYNONYM

D INDEX

39 數據庫設計中,第二範式的作用主要是

A 消除重複值

B 消除函數依賴

C 消除傳遞依賴

D 消除規範化

1.    解釋FUNCTION,PROCEDURE和PACKAGE區別
答:function 和procedure是PL/SQL代碼的集合,通常爲了完成一個任務。procedure 不需要返回任何值而function將返回一個值在另一方面,Package是爲了完成一個商業功能的一組function和procedure的集合。

2.    取某個序列的當前值的PL/SQL語句怎麼寫?
答:SELECT 序列名.CURRVAL  FROM  DUAL;

3.    說明ORACLE數據庫實例與ORACLE用戶的關係?
答:實例可以包含多個用戶,一個用戶只能在一個實例下

4.    創建數據庫時,自動建立的tablespace名稱?
答:SYSTEM tablespace

5.    創建用戶時,需要賦予新用戶什麼權限才能使它連上數據庫?
答:CONNECT

6.    IMPORT和SQL*LOADER這2個工具的不同點?
答:這兩個ORACLE工具都是用來將數據導入數據庫的。
區別是:IMPORT工具只能處理由另一個ORACLE工具EXPORT生成的數據。而SQL*LOADER可以導入不同的ASCII格式的數據源。

7.解釋冷備份和熱備份的不同點以及各自的優點?
答:熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工作狀態時進行備份。而冷備份指在數據庫關閉後,進行備份,適用於所有模式的數據庫。熱備份的優點在於當備份時,數據庫仍舊可以被使用並且可以將數據庫恢復到任意一個時間點。冷備份的優點在於它的備份和恢復操作相當簡單,並且由於冷備份的數據庫可以工作在非歸檔模式下,數據庫性能會比歸檔模式稍好。(因爲不必將archive log寫入硬盤)

8.比較truncate和delete命令?
答:兩者都可以用來刪除表中所有的記錄。區別在於:truncate是DDL(data defining language數據定義語言),它移動HWK,不需要rollback segment(處理事務回滾操作)而Delete是DML(data manufacturing language數據操作語言)操作,需要rollback segment(處理事務回滾操作)且花費較長時間。

9.給出數據的相關約束類型?
答:主鍵約束,外鍵約束,非空約束,唯一約束,檢查約束。

10.說明索引的類型與作用?
答:索引類型上分爲聚集索引,非聚集索引其作用是加快查詢速度。

11.解釋歸檔和非歸檔模式之間的不同和它們各自的優缺點
答:歸檔模式是指你可以備份所有的數據庫 transactions並恢復到任意一個時間點。非歸檔模式則相反,不能恢復到任意一個時間點。但是非歸檔模式可以帶來數據庫性能上的少許提高。

12.解釋$ORACLE_HOME和$ORACLE_BASE的區別?
答:ORACLE_BASE是oracle的根目錄,ORACLE_HOME是oracle產品的目錄。

13.獲取某個字符字段的最後3個字符的函數是什麼?
答:select substr (字段,(length(字段)-3)) from 表

14.取當前系統時間點日期(不包括年月)的SQL寫法是怎樣的?
答:Select substr (to_char(sysdate,’YYYYMMDDh24hh:MM:SS’),5) from dual;

15.返回大於等於N的最小整數值?
答:select ceil(N) from dual;

16.將根據字符查詢轉換後結果,規則爲:’A’轉換爲’男’,’B’轉換爲’女’,其他字符轉換爲’未知’,請用一個SQL語句寫出。
答:select decode(字符,’A’,’男’,’B’,’女’,’未知’) from dual;

17.如何搜索出前N條記錄?
答:select * from 表 where  Rownum <= N;

18.如何搜索出第N~M條記錄?
答:select * from 表 where Rownum <= M
Minus
select * from 表 where Rownum <= N;

19.有一個數據表(TEST),字段如下:
ID      number
PARENT_ID      number
NAME      Varchar(20)
請使用PL/SQL來按父子層次關係查詢出該表的所有數據
答:Select * from test a, test b Where a.parent_id = b.id;

20.怎樣用SQL語句實現查找一列中的第N大值?
答:select * from (select * from 表 order by 列名 Desc) where Rownum <= N
Minus
select * from (select * from 表 order by 列名 Desc) where Rownum <= N-1;
1. Oracle安裝完成後的初始口令? 

   internal/oracle
   sys/change_on_install
    system/manager
    scott/tiger
    sysman/oem_temp  

  2. ORACLE9IAS WEB CACHE的初始默認用戶和密碼?  

   administrator/administrator 

  3. oracle 8.0.5怎麼創建數據庫?  

   用orainst。如果有motif界面,可以用orainst /m 

  4. oracle 8.1.7怎麼創建數據庫?

   dbassist 

  5. oracle 9i 怎麼創建數據庫? 

   dbca  

  6. oracle中的裸設備指的是什麼?  

   裸設備就是繞過文件系統直接訪問的儲存空間 

  7. oracle如何區分 64-bit/32bit 版本??? 

  $ sqlplus ‘/ AS SYSDBA’
  SQL*Plus: Release 9.0.1.0.0 – Production on Mon Jul 14 17:01:09 2003
  (c) Copyright 2001 Oracle Corporation. All rights reserved.
  Connected to:
  Oracle9i Enterprise Edition Release 9.0.1.0.0 – Production
  With the Partitioning option
  JServer Release 9.0.1.0.0 – Production
  SQL> select * from v$version;
  BANNER
  Oracle9i Enterprise Edition Release 9.0.1.0.0 – Production
  PL/SQL Release 9.0.1.0.0 – Production
  CORE 9.0.1.0.0 Production
  TNS for Solaris: Version 9.0.1.0.0 – Production
  NLSRTL Version 9.0.1.0.0 – Production
  SQL>  

  8. SVRMGR什麼意思? 

  svrmgrl,Server Manager.

  9i下沒有,已經改爲用SQLPLUS了

  sqlplus /nolog
  變爲歸檔日誌型的 

  9. 請問如何分辨某個用戶是從哪臺機器登陸ORACLE的?

  SELECT machine , terminal FROM V$SESSION;  

  10. 用什麼語句查詢字段呢? 

  desc table_name 可以查詢表的結構
  select field_name,… from … 可以查詢字段的值
  select * from all_tables where table_name like ‘%’
  select * from all_tab_columns where table_name=’??’  

  11. 怎樣得到觸發器、過程、函數的創建腳本? 

  desc user_source
  user_triggers   

  12. 怎樣計算一個表佔用的空間的大小? 

  select owner,table_name,
  NUM_ROWS,
  BLOCKS*AAA/1024/1024 “Size M”,
  EMPTY_BLOCKS,
  LAST_ANALYZED
  from dba_tables
  where table_name=’XXX’;
  Here: AAA is the value of db_block_size ;
  XXX is the table name you want to check 

14. 如何查看系統被鎖的事務時間?
  select * from v$locked_object ;

  15. 如何以archivelog的方式運行oracle。
  init.ora
  log_archive_start = true
  RESTART DATABASE
  16. 怎麼獲取有哪些用戶在使用數據庫
  select username from v$session;

  17. 數據表中的字段最大數是多少?

  表或視圖中的最大列數爲 1000  

  18. 怎樣查得數據庫的SID ?

  select name from v$database;

  也可以直接查看 init.ora文件

  19. 如何在Oracle服務器上通過SQLPLUS查看本機IP地址 ?

  select sys_context(’userenv’,'ip_address’) from dual;

  如果是登陸本機數據庫,只能返回127.0.0.1,呵呵  

  20. unix 下怎麼調整數據庫的時間?

  su -root

  date -u 08010000

如何高效率的查找一個月以內的數據?
進行時間比較要儘量避免用sysdate. 比如:如果使用select * from eventtable where eventdate>sysdate-30進行查找,當數據量小的時候看不出來,數據量大一些就會發現執行很慢,但日期型字段上也是有索引的,爲什麼會慢呢?原來是Oracle在進行查找的時候不斷地去取sysdate這個不斷變化的值,而不是我們想象中的一次產生一個條件語句然後進行查找。爲了加快速度,我們可以先把當天的日期取出來,然後轉成字符串後再用如下語句查,select * from eventtable where eventdate > to_date(’2001-12-1′,’yyyy-mm-dd’)。速度相差幾十倍。

簡要介紹一下Oracle快照(snapshot)
照是指表的或者表的行或者列的子集的副本, 快照在分佈式的系統環境下很有用。 可以通過create snapshot語法來創建一個snapshot, 可以在創建快照的時候指定刷新頻率
什麼是Oracle的同義詞(synonym)? 如何創建synonym?
同義詞是相當於別名,是爲了簡化一些表名或者數據對象。 當我們以一個用戶登陸而要去訪問另一個用戶創建的數據對象時,我們需要使用用戶名.對象名的方法來使用,這樣造成對象名難記,麻煩,使用同義詞可以解決這個問題。

假定我們現在以system的身份的登陸進去,我們需要訪問scott用戶下面的一個表emp;

常規的寫法是:select * from scott.emp;

現在我們可以先建立一個同義詞:
create synonym my_syn for scott.emp;

然後我們這樣來訪問這個表了:
select * from my_syn;
什麼是表空間(tablespace)和系統表空間(System tablespace)?
表空間(tablespace)是數據庫的一個邏輯的存儲單元,用來將相關的數據結構到組織到一起。

系統表空間是在數據庫建立的時候自動創建的,它包含了整個數據庫的數據字典

什麼是數據庫的約束?
數據庫約束是防止非法記錄的規則, 約束保存在數據字典(data dictionary)中, 約束可以被定義在列級或者表級。

Oracle中包括一下集中約束:

1. Not Null – 明確一列數據不能包含null值

2. Unique – 強制所有數據行不能有重複值

3. Primary Key – 每一行數據的唯一標示

4. Foreign Key – 強制一列數據與引用表的外鍵約束關係

5. Check – 檢查,明確規定一個必須爲true的condition
什麼是數據庫鎖?Oracle中都有哪些類型的鎖?
鎖是用來在多個用戶同時訪問同一個表的時候保護數據的。 它是Oracle的一種併發控制技術。鎖使數據庫最大併發的情況下保證數據的完整性。 Oracle會在需要的時候自動的提供鎖的功能。

鎖的種類:

共享鎖: 這個鎖是數據在被viewed的時候放置的。

排他鎖: 這種鎖在Insert, Update, Delete命令執行的時候放置的,每一條記錄同一時間只能有一個排他鎖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章