【Oracle】082基础知识
1.interval使用
Oracle提供了兩種日期時間數據類型:DATE和TIMESTAMP用于存儲時間點數據。另外,它提供INTERVAL數據類型用于存儲一段時間。
INTERVAL YEAR TO MONTH - 間隔使用年份和月份。
INTERVAL DAY TO SECOND - 使用包括小數秒在內的天,小時,分鐘和秒存儲間隔。
INTERVAL ‘year[-month]’ leading (precision) TO trailing
INTERVAL '120-3' YEAR(3) TO MONTH間隔120年,3個月; 由于前導字段的值大于默認精度(2位),因此必須指定前導字段精度YEAR(3)。INTERVAL '105' YEAR(3)間隔105年0個月。INTERVAL '500' MONTH(3)間隔500個月。2.default role,set role
可以給某個用戶分配一些角色,比如role r1,r2,r3,r4,而其中可以將某些角色比如r1設置為default role,其他的不設置成default role,這樣,當該用戶登錄時,自動具有default role中所包含的權限,其他的角色所具有的權限要通過set role 角色來獲得。
(1)sys用戶作為sysdba登錄,創建4個角色: create role r1; create role r2 identified by r2; create role r3 identified by r3; create role r4 identified by r4;(2)sys用戶賦予這四個角色對應的權限: grant create session to r1; grant select on hr.test to r2; (這里hr.test是我新創建的一個表,里面有ID和name兩列) grant update(name) on hr.test to r3; grant insert on hr.test to r3;grant delete on hr.test to r4;(3)sys用戶創建一個用戶u3 create user u3 identified by u3;(4)將角色r1,r2,r3,r4賦予用戶u3 grant r1,r2,r3,r4 to u3;在修改用戶u3的默認角色前,r1,r2,r3,r4 角色均為u3的 default role,以u3用戶登錄,查詢、增刪改hr.test,都沒有問題。(5)現在sys用戶修改用戶u3的default role,僅將r1作為u3的默認角色: alter user u3 default role r1; --此時將覆蓋原來的設置,u3 的default role =r1,僅僅有登錄權限。(6)用戶u3 log off ,然后再log on,進去后發現, 查詢、增刪改hr.test都不能進行。(7) 用戶自己打開role權限 set role r2 identified by r2; 這時執行 select * from hr.test,發現沒有問題。增刪改不行。 將對應的角色打開: set role r3 identified by r3; 此時修改和插入記錄沒有問題,但是select * from hr.test 確發現不行了。證明此時用戶所屬的角色僅僅是默認角色r1,和剛剛打開的角色r3,而r2被set role r3 identified by r3;覆蓋掉了。那要同時有r2,r3,r4的權限怎么辦呢? set role r2 identified by r2,r3 identified by r3,r4 identified by r4。此時就同時對hr.test可以進行查詢,增刪改了。不過set role 的效果是臨時的,只是當前session有效,其他的session無效,當結束當前session后再登錄,又只有default role 的權限了。3.Enterprise Manager (EM)
Enterprise Manager 中基于Web 的Database Control 可充當管理Oracle 數據庫的主要工具。
僅在數據庫open的狀態下才能被使用
在安裝數據庫實例的過程中,每個數據庫實例都會對應一組數據庫服務,比如我安裝了兩個數據庫實例orcl和ruledb,則對應的的服務分別是OracleDBConsoleorcl、OracleJobSchedulerORCL和OracleServiceORCL以及OracleDBConsoleruledb、OracleJobSchedulerRULEDB和OracleServiceRULEDB,其中OracleDBConsoleorcl就是Oracle企業管理控制臺服務,OracleServiceORCL是Oracle數據庫服務,要想使用Oracle企業管理控制臺,則必須啟用OracleDBConsoleorcl服務,要想連接數據庫,必須啟用OracleServiceORCL服務,這里把這兩個服務都啟動
4.|| 代表的含義
在oracle中 此符號|| 代表“+”,即拼接“||”左右兩邊的的字符串
5.q’
在轉義特殊字符的時候通常使用的就是單引號。但這種轉義方式很不直觀。在oracle中使用q’ 來對特殊字符進行轉義。q’轉義符通常后面使用! [] {} () <>等轉義符號,也可以使用\ ,也可以用字母、數字、=、+、-、*、&、$、%、#等,不可以使用空格,如下所示:
6.Oracle段(segment) 區(extent) 塊(block)
Data blocks ,Extents,Segment 這就是他們之間的邏輯結構。 先看Data blocks(也叫邏輯塊,oracle塊,頁)吧,oracle存儲數據都是在這些數據塊中,一個數據塊是磁盤上數據庫物理空間一系列物理字節的組成。 比Data blocks更高一層的邏輯數據塊空間是extent,一個extent是由一系列臨近的存儲信息的數據塊組成。 最高一層的邏輯結構是segment,一個segment是同一表空間extents的一個集合。每一個segment有不同的數據結構。如每一個表的數據就存儲在自己的data segment,每一個索引存儲在自己的索引段,如果表或者索引是是分區存儲的,那么每一個分區都存儲在他們各自的segment中。一個segment和他所有的extent都是在一個表空間中,并且一個segment可以跨越幾個數據文件。
data block是oracle數據庫中分配和私用的最小存儲單元。但這僅僅對數據庫來說,在物理層次,操作系統層次,所有的數據仍舊是按字節存儲的。每一個操作系統都有自己的塊尺寸(block size),在oracle數據庫中,數據塊的大小都有參數db_block_size在創建數據庫的時候來確定,他的數值應該是操作系統塊尺寸的整數倍。
7.行鏈接、行遷移
8.表空間
database數據庫–tablespaces表空間–segments段–exents區–blocks塊
(1).表空間管理方式
段的管理方式和區的管理方式是建立在表空間時確定的,后續不可更改
段管理方式有auto、manual兩種,區管理方式有本地管理和字典管理(已淘汰)兩種
如果system表空間時數據字典管理,其他表空間可以是數據字典管理也可以是本地管理(默認)
(只有system表空間為字典方式管理,其他表空間才有機會被設置為字典管理;若system表空間是本地管理,其他表空間一定是本地管理)
字典管理可以轉換成本地管理,但是對于系統表空間,要執行一些附加步驟(步驟如下)
execute dbms_space_admin.tablespace_migragte_to_local('tablespace');(2).大文件與小文件
小文件:一個表空間里面可以有多個數據文件,便于擴充
大文件:只能建立一個數據文件,需要使用標準快(8k的block,datafile maxsize可以是32T)
rman備份放在不同的通道。
簡化管理:一個表空間對應一個數據文件
向大文件表空間增加一個數據文件
SQL> alter tablespace big_tbs add datafile '/u01/app/oracle/oradata/SINGLE04/bigtbs02.dbf' size 100m; alter tablespace big_tbs add datafile '/u01/app/oracle/oradata/SINGLE04/bigtbs02.dbf' size 100m * ERROR at line 1: ORA-32771: cannot add file to bigfile tablespace9.current_date與sysdate區別
在oracle中current_date與sysdate都是顯示當前系統時間, 其結果基本相同,但是有三點區別:
1.current_date返回的是當前會話時間,而sysdate返回的是服務器時間.
2.current_date有時比sysdate快一秒,這可能是四舍五入的結果.
3.如果修改當前會話的時區,比如將中國的時區為東八區,修改為東九區,則current_date顯示的時間為東九區時間, 根據東加西減的原則,current_date應該比sysdate快一小時.
10.savepoint 檢查點
1)檢查點在事務提交前回退到任意已創建檢查點的事務。
2)檢查點在事務提交后就不存在了
11.CASCADE
級聯刪除(DELETE CASCADE)是指當主表(parent table)中的一條記錄被刪除,子表中關聯的記錄也相應的自動刪除。
備注:外鍵字段在該表中為主鍵的表,即為主表;外鍵字段在該表中為普通字段的表,即為從表。
CREATE TABLE table_name(column1 datatype null/not null,column2 datatype null/not null,...CONSTRAINT fk_columnFOREIGN KEY (column1,column2,...column_n)REFERENCES parent_table (column1, column2,... column_n)ON DELETE CASECADE);12.invisible列
一個列是否可見的屬性可以由用戶來控制。除非在選擇列表中顯式指定,否則看不到Invisible columns。表的任何一般訪問(such as a SELECT * FROM table or a DESCRIBE)都不顯示invisible columns.。
例如,以下操作不顯示輸出中的不可見列:
? SELECT * FROM statements in SQL
? DESCRIBE commands in SQL*Plus
? %ROWTYPE attribute declarations in PL/SQL
? Describes in Oracle Call Interface (OCI)
這個特性有什么用?
- 一個是安全方面
- 一次性數據庫發布先發上去。但是應用功能還沒開發完成,沒關系,等下次開發好了,只要做一個字段可見的打開就好了
13.unused列
在oracle中 unused的作用主要是隱藏列
對于隱藏的列我們可以通過如下方式進行查看。對于隱藏的列是不可以進行恢復操作的,只能查看和刪除。
它的應用不僅僅是隱藏列,對于大數據表的處理通常在做刪除列的時候由于數據量非常大,所以在刪除的時候無法直接刪除而采用先隱藏的方式,然后在空閑的時候再刪除。通過下圖方式可以刪除隱藏列
1.可以添加索引
2.通過alter table set unused…可以指定多個列
3.執行set unused指令后,該列的約束都會被移除
14.Read-only模式
Oracle11g推出了一個新的特性,可以將table置于read only狀態,處于該狀態的table的不能執行DML操作和某些DDL操作。
可以執行
- 創建索引
- 刪除unused列
- 刪除該表
15.ASSM
PCTREE默認10%
insert操作插入前會選擇合適的空間大小塊
16.段類型
Oracle數據庫中有多少類型的段,除了常見的TABLE、INDEX之外還有哪些?下面通過dba_segments視圖來探討Oracle的段類型。
17.Oracle 函數
單行函數:single row funcation
指一行數據輸入,返回一個值的函數,常見的有
字符函數(如:substr)
日期函數(如:months_between)
數字函數(如:MOD)
轉換函數(如:to_char)
通用函數(如:NVL)
多行函數 :muti row function
指多行數據輸入,返回一個值的函數
常見的有sum 、 max等
(1).常見單行函數用法
- CONCAT:連接
- MOD:取余
- to_date:據庫格式匹配與字符串轉換成date類型
- substr 方法參數(‘被截取的字符串’,‘從哪一位開始截取’,‘截取的位數’);
- nvl相當于mysql中的ifnull
- CEIL(n)函數:取大于等于數值n的最小整數
- FLOOR(n)函數:取小于等于數值n的最大整數
- trunc(數值1,n):將列或表達式所表示的數值截取到小數點后的第n位;trunc(日期,‘截止日期單位’)
(2).TRUNC
1.TRUNC(for dates)
其具體的語法格式如下:
TRUNC(date[,fmt])
2.TRUNC(number[,decimals])
其中:
number待做截取處理的數值
decimals指明需保留小數點后面的位數。可選項,忽略它則截去所有的小數部分
下面是該函數的使用情況:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
(3).instr()函數
1)instr()函數的格式 (俗稱:字符查找函數)
INSTR( string, substring [, start_position [, th_appearance ] ] )
參數:
string - 要搜索的字符串。字符串可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB等類型。
substring - 要在字符串(string)中搜索的子字符串。 子字符串可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB等類型。
start_position - 可選的。 在搜索將開始的字符串中的位置。 如果省略,則默認為1。字符串中的第一個位置為1.如果start_position為負數,INSTR函數會從字符串末尾開始計算start_position字符數,然后搜索字符串的開頭。
nth_appearance - 可選的。 子串的第n個出現。 如果省略,則默認為1。
(4).nullif
NULLIF ( expression1 , expression2 )
如果兩個指定的表達式相等,則返回空值。
如果兩個表達式不相等,NULLIF 返回第一個 expression1 的值。
null不可以作為第一個表達式,可以為第二個表達式
(5).coalesce
取出第一個不為空的列的數據
coalesce函數里面的數據類型,必須全部都跟第一列的數據類型一致。
(6).nvl()與nvl2()
-
函數nvl(expression1,expression2)根據參數1是否為null返回參數1或參數2的值;若expression1值為null,則該函數返回expression2、若expression1值不為null,則該函數返回expression1;
參數expression1和expression2可以是字符型、數字型或日期型,但參數expression1與expression2的類型必須一致。 -
函數nvl2(expression1,expression2,expression3)根據參數1是否為null返回參數2或參數3的值.若expression1值不為null,則該函數返回expression2值;
expression1的類型不需要與expression2和expression3的類型保持一致;
expression2與expression3的類型盡量保持一致,若不一致,當expression1為null時,則expression3會自動轉換為expression2的類型,若兩個數據類型之間無法轉換,則會報錯。
18.data dictionary
數據字典(Data Dictionary):包含關于數據庫結構所有信息的表的集合.
Oracle數據字典中,對象名稱多數以"USER.",“ALL.”,"DBA."為前綴.
"USER."視圖中記錄通常記錄執行查詢的帳戶所擁有的對象的信息,
"ALL."視圖中記錄包括"USER"記錄和授權至PUBLIC或用戶的對象的信息,
"DBA."視圖包含所有數據庫對象,而不管其所有者。
19.v$tablespace
區別: v$tablespace (v$視圖) :是動態性能視圖,存在于controlfile中,數據庫在mount狀態下可以查詢 dba_tablespace (dba_數據字典) :是靜態視圖,存在于數據庫中,只能在open時查詢相同點: 都是表示空間信息的20.Trace files
跟蹤文件包含了大量而詳細的診斷和調試信息。跟蹤文件分為以下三類:
-
警報日志文件
警報日志的名稱:alert_<ORACLE_SID>.log。報警日志主要保存以下信息:
(1)數據庫的啟動、停止;
(2)記錄所有的非默認值的初始化參數;
(3)記錄日志的切換情況;
(4)記錄檢查點的完成情況;
(5)記錄數據庫工作時遭遇的錯誤信息。 -
后臺進程跟蹤文件
DBWR、LGWR、SMON 等后臺進程創建的后臺跟蹤文件。后臺進程跟蹤文件也保存在BACKGROUND_DUMP_DEST參數指定的目錄中,文件名格式為:<ORACLE_SID>_進程名_進程號.trc
- 用戶進程跟蹤文件
由連接到 Oracle 的用戶進程生成的用戶跟蹤文件。這些文件僅在用戶會話期間遇到錯誤時產生。用戶可以通過執行Oracle 跟蹤事件來生成該類文件。用戶跟蹤文件保存在 SER_DUMP_DEST 參數指定的目錄中,文件命名格式為:<ORACLE_SID>_ora_服務進程的spid.trc。
21.兩個日期間的天數
select floor(sysdate - to_date(‘20020405’,‘yyyymmdd’)) from dual;
22.dual表
Dual簡單的說就是一個空表,Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。常用來通過select語句計算常數表達式。
Oracle的SELECT語法的限制為 SELECT * | [column1 [AS alias1], column2 [AS alias2]] FROM table
所以沒有表名就沒有辦法查詢,而時間日期并不存放在任何表中,于是這個dual虛擬表的概念就被引入了。
dual是Oracle中的一個實際存在的表,任何用戶均可讀取,常用在沒有目標表的Select語句塊中。
23、內連接、等值、非等值連接、外連接
(1).等值連接-內連接
等值連接也被稱為簡單連接(simple joins)或內連接(inner joins)。是通過等號來判斷連接條件中的數據值是相匹配。
(2).非等值連接
一個非等值連接是一種不使用相等(=)作為連接條件的查詢。如!=、>、<、>=、<=、BETWEEN AND等都是非等值鏈接的條件判斷。
(3).自連接
join ,inner join
1 --自連接 :只返回兩張表連接列的匹配項。
2 --以下三種查詢結果一樣。
3 select * from student s inner join class c on s.classid=c.id;
4 select * from student s join class c on s.classid=c.id;
5 select * from student s,class c where s.classid=c.id;
(4).外連接
LEFT | RIGHT | FULL JOIN
外連接是指查詢出符合連接條件的數據同時還包含孤兒數據。左外鏈接包含左表的孤兒數據,右外連接包含右表的孤兒數據,全外連接包含兩個表中的孤兒數據。
孤兒數據是指被連接的列的值為空的數據
(5).SQL99 中的自然連接(NATURAL JOIN)
NATURAL JOIN子句基于兩個表之間有相同名字的所有列。
它從兩個表中選擇在所有的匹配列中有相等值的行。
如果有相同名字的列的數據類型不同,返回一個錯誤。
(6).笛卡兒乘積:cross join
除了cross join不可以加on外,其它join連接都必須加上on關鍵字,后都可加where條件。
1 --笛卡兒乘積連接 :即不加任何條件,達到 M*N 的結果集。
2 --以下兩種查詢結果一樣。
3 select * from student s cross join class c;
4 select * from student,class;
注意:如果cross join加上where s.classid=c.id條件,會產生跟自連接一樣的結果:
1 --加上條件,產生跟自連接一樣的結果。
2 select * from student s cross join class c where s.classid=c.id;
(7).using
oracle 中 using關鍵字使用規則:
1.查詢必須是等值連接。
2.等值連接中的列必須具有相同的名稱和數據類型。
3.不能用于自然連接
使用using關鍵字簡化連接時,需要注意以下幾點:
1.使用 table1表和 table2表中的字段列進行連接時,在using子句和select子句中,都不能為字段列指定表名或表別 名。
2.如果在連接查詢時使用了兩個表中相同的多個列,那么久可以在using子句中指定多個列名,形式如下:
select... from table1 inner join table2 using(column1,column2);24.time
date類型存儲數據的格式為年月日時分秒,可以精確到秒
timestamp類型存儲數據的格式為年月日時分秒,可以精確到納秒(9位)
(1).timestamp
timestamp with time zone 表達的是 針對 標準時區(格林尼治時間)的差。
timestamp with local time zone 表達的是 ,根據你當前所處時區,變化你和格林尼治時間的差。如果過去相對標準時區 -8 ,那么移動到+10 時區的時候,需要加:10-(-8)=18 ,
(2).DBTIMEZONE、SESSIONTIMEZONE
DBTIMEZONE:是數據庫服務器所在的時區。
SESSIONTIMEZONE :是你的會話的時區。
例如:數據庫服務器是放在英國(+00:00時區),而你在中國(+08:00)訪問數據庫,則SESSIONTIMEZONE 就是+08:00,DBTIMEZONE就是+00:00
(3).current_timestamp、current_date
current_timestamp :以timestamp with time zone數據類型返回當前會話時區中的當前日期,與時區設置有關,返回的秒是系統的,返回的日期和時間是根據時區轉換過的。
current_date:CURRENT_TIMESTAMP準確到秒的四舍五入。
(4).sysdate、systimestamp
sysdate返回的是是服務器時間。
systimestamp也是當前系統的時間戳。
(5).TIMESTAMP WITH TIME ZONE
可以發現,如果客戶端和數據庫中的時區是一致的,那么TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE存儲的數據是完全一樣的。
TIMESTAMP WITH TIME ZONE則略有不同,它保存的是0時區的時間,和所處的時區信息。
修改時區會導致系統TIMESTAMP時間發生變化,但是對于TIMESTAMP WITH LOCAL TIME ZONE類型,總是將系統的時間轉化到數據庫服務器上時區的時間進行存儲。
TIMESTAMP WITH TIME ZONE保存的是當前時間轉化到0時區的對應的時間,并通過最后兩位來保存時區信息。
CREATE TABLE TEST_TIMESTAMP(TIME1 TIMESTAMP(9), TIME2 TIMESTAMP(6) WITH LOCAL TIME ZONE, TIME3 TIMESTAMP(4) WITH TIME ZONE);修改客戶端主機的時區,由東8區(+8區)改為0時區。 SELECT * FROM TEST_TIMESTAMP; 11-1月 -05 11.08.15.027000000 下午 11-1月 -05 11.08.15.027000 下午 11-1月 -05 11.08.15.0270 下午 +08:00(6).localtimestamp
返回會話中的日期和時間
【示例】select localtimestamp from dual;返回:14-11月-08 12.35.37.453000 上午25.shrink
shrink命令用于收縮表,降低高水位線,減少表所使用的塊的個數.
特性:
1)可在線收縮表,基本不影響DML
2)收縮表的同時自動維護索引
3)不需要額外的磁盤空間
shrink同時全減少高水位線以上和以下未使用的空間.數據庫會壓縮段(表),將水位線降低到合適的位置,然后釋放回收的空間.
shrink命令需要開啟row movement,因為在收縮表時,行的位置可能改變.
shrinK命令只能用在自動管理的段空間(automatic segment space mangement)的表空間上.
以下段不支持shrink命令:
1)IOT mapping 表(?)
2)rowid創建的物化視圖的基表
3)表上的函數索引
4)securefile lobs
5)壓縮表
shrink命令有兩種執行方式:
1)直接執行alter table shirnk space;
2)先執行alter table shirnk space compact; 再執行alter table shirnk space.
alter table shirnk space 會直接整理塊碎片壓縮表并重置高水位線.
compact的作用是整理塊碎片并壓縮表,然后把壓縮后的信息寫在磁盤上,再次執行alter table shirnk space時, 重置高水位線并釋放回收的空間.這樣做的好處是避免大量鎖定對大事務產生影響.
在執行shrink命令時加上cascade,會同時收縮表相關的對象,如索引.
26.sqlldr
Oracle數據庫中,我們通常在不同數據庫的表間記錄進行復制或遷移時會用以下幾種方法:
(1)A表的記錄導出為一條條分隔開的insert語句,然后執行插入到B表中。這種方法在記錄多時是個噩夢,需要三五百條的分批提交,否則客戶端會死掉,而且導入過程很慢。
(2)建立數據庫間的dblink,然后用create table B as select * from A@dblink where …或 insert from A@dblink where …
(3)exp A表,再imp到B表,exp時可加查詢條件
(4)程序實現select from A …, 然后insert into B …,也要分批提交
(5)再就是Sql Loader(sqlldr)來導入數據,效果比起逐條insert來很明顯。
sqlldr的使用,有兩種方法:
(1)只使用一個控制文件,在這個控制文件中包含數據。
(2)使用一個控制文件(作為模板)和一個數據文件
27.symonym
同義詞就是給表、視圖等對象取得別名,用于簡化對其的訪問
分為2種:
私有同義詞:用戶自己創建自己使用的
公共同義詞:dba創建,給其它用戶使用的
28.PL/SQL
PL/SQL 是一種塊結構的語言:
它把一組SQL語句放到一個模塊中執行,使其更具模塊化程序的特點;
28.Drop table
執行Drop table后
1.數據會被刪除
2.事務先提交
3.視圖、同義詞保留但是不能用
4.索引刪除
5.約束刪除
6.進入recycle bin
29.external table
外部表,是指不存在于數據庫中的表
1.外部數據表都是只讀的,因此在外部表不能夠執行DML操作
2.也不能創建索引。
3.能被分區?
4.外部表可以加載和卸載數據泵格式的數據,只需把organization external里的參數type設置為oracle_datapump
30.expdb
1)導出用戶
expdp test/test@test schemas=test directory=DUMP_DIR dumpfile=expdp_1.dmp ;
2)導出表
expdp test/test@test tables=users dumpfile=users.dmp directory=DUMP_DIR3;
3)按查詢條件導
expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=empquery=‘where deptno=20’;
4)按表空間導
expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmptablespaces=temp,example;
5)導整個數據庫
expdp test/test@test directory=DUMP_DIR3 dumpfile=full.dmp full=y;
31.undo、redo
redo的原因是:每次commit時,將數據的修改立即寫到online redo中,但是并不一定同時將該數據的修改寫到數據文件中。因為該數據已經提交,但是只存在聯機日志文件中,所以在恢復時需要將數據從聯機日志文件中找出來,重新應用一下,使已經更改數據在數據文件中也改過來!
undo的原因是:在oracle正常運行時,為了提高效率,假如用戶還沒有commit,但是空閑內存不多時,會由DBWR進程將臟塊寫入到數據文件中,以便騰出寶貴的內存供其它進程使用。這就是需要UNDO的原因。因為還沒有發出commit語句,但是oracle的dbwr進程已經將沒有提交的數據寫到數據文件中去了。
undo 也是也是datafile, 可能dirty buffer 沒有寫回到磁盤里面去。
(1).undo_retention
undo數據分為三種:
活動的undo:未提交事務的undo數據,這些undo數據永遠不能覆蓋,用于回滾rollback事務。
過期的undo(expired):已提交事務的undo數據,這些undo數據可以覆蓋。
未過期的undo(unexpired):事務已提交,但事務提交前,有些查詢正在進行,它要讀取的是提交前的數據,這部分數據就是未過期數據。如果這部分undo數據被覆蓋了,就會發生ora-01555錯誤。
一個解決方法是,指定undo表空間參數UNDO_TABLESPACE,并將undo空間管理方法設置成自動擴展:UNDO_MANAGEMENT=AUTO。
這種方法可能產生的結果是:
因為undo表空間裝了太多未過期(unexpired)的undo數據,新的transaction無法向其中寫入undo數據,這時transaction就會發生ORA-30036錯誤。
Undo_Retention是Oracle提供出的用于控制Undo過期數據保留的“調節Tune”參數。注意:這里不是控制參數。Oracle中的控制參數起到強制作用,比如目錄空間位置,歸檔文件存儲等。但是另一部分參數起到的是目標調節的作用,比如檢查點間隔控制,SGA_TARGET。
事實上,Undo_retention是一個“目標期望值”。用戶設置出這個值之后,Oracle內部會盡量保證將Undo數據保留超過undo_retention設置的時間。在這個過程中,Oracle會涉及到比如嘗試拓展Undo表空間數據文件、Undo Segment管理等內容。但是,如果“現實比較殘酷”,比如說Undo使用緊張、沒有額外的方法,那么這個時間段也是不能保證的。
(2).undo segment
undo segment可以擴展
undo segment最少有3個區
undo segment可以存儲在system表空間中
(3).特點
1.undo用來保證讀取一致性
2.用于閃回操作
3. redo用來閃回操作
4.undo 生成redo
32.pmon
PMON的工作內容如下:
1,監控后臺進程運行狀況
2,如果某些進程異常中斷,PMON去釋放會話資源以及占用的鎖LOCK
3,更新事務表的標志以及清除事務XID的標記
4,清除異常中斷會話在BUFFER CACHE占用的緩存
5,PMON也負責定期把數據庫實例注冊到監聽器中
33.temporary table
(1).global temporary table
所有的操作都在一個事務里,事務提交后,此表清空,特別適合做插入刪除頻率特別高的臨時表操作,比如插入完數據就開始查詢,查詢完就刪掉等,用完就扔!
這個表是實實在在的表,這個表結構任何一個SESSION都能看到。但是每個SESSION的數據都是隔離的。定義保留在數據字典,數據保存在臨時表空間里。
臨時表分事務級臨時表和會話級臨時表。
1.事務級臨時表只對當前事務有效,通過語句:ON COMMIT DELETE ROWS 指定。 (默認值)
2.會話級臨時表對當前會話有效,通過語句:ON COMMIT PRESERVE ROWS語句指定。
全局臨時表特點:
1.定義多個索引
2.定義視圖是被引用
3.可以定義觸發器
4.不能分區,不能集簇化,不能iot化
5.不能指定外鍵約束
6.drop臨時表之前必須先truncate
(2).Private Temporary Tables
私有臨時表是數據庫的臨時對象,私有臨時表在事務或者會話結束后被自動drop掉。私有臨時表定義在內存中,只能被創建他的會話看見該表的定義和數據。
私有臨時表存儲在臨時表空間中,元數據存儲在內存中。
創建私有臨時表是DDL,會觸發事務提交
私有臨時表類別:
1.事務私有臨時表(on commit drop definition)
在事務結束后drop掉私有事務臨時表。
語法:create private temporary table ORA$PTT_tab1(a number) on commit drop definition;
2.會話私有臨時表(on commit preserve definition):
當會話結束時,drop掉私有會話臨時表
語法:CREATE PRIVATE TEMPORARY TABLE ORA$PTT_tab2(id number) ON COMMIT PRESERVE DEFINITION;
34.數據字典
1.數據字典在數據庫被創建時創建。
2.被數據庫服務器自動更新和維護
oracle的數據字典就是oracle存放有關數據庫信息的地方。用途就是用來描述數據的。
數據庫數據字典是一組表和視圖結構。它們存放在SYSTEM表空間中,owned by sys 用戶
按照前綴不同可以分為四類:
1、以user開頭的數據字典:
包含當前用戶所擁有的相關對象信息。–能夠查到對象的所有者是當前用戶的所有對象
user_tables;
user_views;
user_sequences;
user_constraints;
2、以all開頭的數據字典:
包含當前用戶有權限訪問的所有對象的信息。–能夠查到所有當前用戶有權限訪問的對象
3、以dba開頭的數據字典:
包含數據庫所有相關對象的信息。–只能是有dba權限的用戶查詢,能查到數據庫中所有對象
4、以V$開頭的是動態服務性能視圖:
select table_name from dba_tables (sys system)
數據字典內容包括:
1,數據庫中所有模式對象的信息,如表、視圖、簇、及索引等。
當前用戶的對象信息存放在user_objects
2,分配多少空間,當前使用了多少空間等。
3,列的缺省值。
4,約束信息的完整性。
5,Oracle用戶的名字。
6,用戶及角色被授予的權限。
7,用戶訪問或使用的審計信息。
8,其它產生的數據庫信息。
(1).dynamic performance view動態性能視圖
1.動態性能視圖屬于數據字典,它們的所有者為SYS
2.當數據庫處于不同狀態時,可以訪問的動態性能視圖有所不同。啟動例程時,ORACLE會自動建立動態性能視圖;停止例程時,ORACLE會自動刪除動態性能視圖。:
(1).NOMOUNT
啟動例程時,ORACLE會打開參數文件,分配SGA并啟動后臺進程。因此例程處于NOMOUNT狀態時,只能訪問從SGA中獲取信息的動態性能視圖。
(2).MOUNT
裝載數據庫時,ORACLE根據初始化參數control_file 打開所有控制文件。當例程處于MOUNT狀態時,不僅可以訪問從SGA中獲取信息的動態性能視圖,還可以訪問從控制文件中獲取信息的動態性能視圖。
(3).OPEN
數據庫打開時,ORACLE按照控制文件所記載的信息打開所有數據文件和重做日志。除了可以訪問SGA和控制文件中獲取信息的動態性能視圖外,還可以訪問與ORACLE性能相關的動態性能視圖(V$FILESTAT V$SESSION_WAIT V$WAITSTAT)
注意的是,只有處于OPEN狀態時,才能訪問數據字典視圖。
35.nomount,mount以及open狀態
oracle啟動分為三步:
startup nomount ; --啟動oracle例程.
alter database mount ; --讀取控制文件
alter database open ; --打開數據庫
36.Express Mode
Oracle Database 12C中的SQL*Loader 新增加了Express Mode,借助這個特性,可以在最小化配置的情況下加載數據(比如無需要創建Control file)
◆ 創建測試表SYS% cdb1> conn study/study@pdb1Connected.STUDY% pdb1> create table test( region char(3),region_name varchar2(12),bill_month number(6),fee number(10,2));Table created.STUDY% pdb1>◆ 準備測試數據STUDY% pdb1> host cat test.dat530,HZ,200501,100.01530,HZ,200502,800.23531,JN,200501,5000.81531,JN,200502,5360.00532,QD,200501,20670.32532,QD,200502,22000.08533,ZB,200501,3050.56533,ZB,200502,3108.14STUDY% pdb1>◆用SQL*Loader Express Mode快速加載數據STUDY% pdb1> host sqlldr study/study@pdb1 TABLE=test --是不是很簡單特點:
1.可并行加載數據
2.不需要datafile
37.view
創建視圖
create [or replace] [force] view [屬主.]<view_name> (col1, col2, ..., colN) -- 可省略 asselect 語句 [with check option] [with read only]; with check option1. 對于 insert,有 with check option 時,要保證 insert 后,數據能被視圖查詢出來(符合 where 條件) 2. 對于 update,有 with check option 時,要保證 update 后,數據能被視圖查詢出來(符合 where 條件) 3. 對于 delete,有無 with check option 都一樣 4. 對于沒有 where 子句的視圖,使用 with check option 是多余的 TRUNCATE TABLE stu_info; -- 清除歷史數據 INSERT INTO stu_info (id, NAME, sex) VALUES (1, '瑤瑤', '女'); INSERT INTO stu_info (id, NAME, sex) VALUES (2, '倩倩', '女'); INSERT INTO stu_info (id, NAME, sex) VALUES (3, '優優', '男'); COMMIT;CREATE OR REPLACE VIEW vw_stu_info AS (SELECT si.id,si.name,si.sexFROM stu_info SIWHERE si.id <= 5 ) WITH CHECK OPTION; /-- id = 6 > 5, 不符合視圖中的 where 條件會報錯!!! INSERT INTO vw_stu_info (id, NAME, sex) VALUES (6, '測試66', '男');特點:
1.不能創建索引
2.增刪改查操作不需要單獨賦予權限
3.不只是能通過表來定義
38.DBMS_PRIVILEGE_CAPTURE
在12c中,oracle引入了DBMS_PRIVILEGE_CAPTURE包,可以使用該包來記錄授予給用戶的系統和對象權限,然后基于這些信息你就可以判斷這些權限在一段時間之內是否被用到。這樣,你就可以收回那些未被使用的權限,從而對用戶的權限分配進行更精確的控制,使其符合權限最小化原則,以便提升系統的安全性。
39.virtual column(虛擬列)
1.虛擬列特點
(1)可以為虛擬列創建索引(oracle為其創建function index)
(2)可以搜集虛擬列的統計信息statistics,為CBO提供一定的采樣分析。
(3)可以在where 后面使用虛擬列作為選擇條件
(4)只在一處定義,不存儲多余數據,查詢是動態生成,不可update
(5)不能通過虛擬列創建虛擬列
(6)可以顯示指定字段類型
2.語法
HR@bear> create table inv(inv_id number,inv_count number,inv_status generated always as case when inv_count <= 100 then 'GETTING LOW'when inv_count > 100 then 'OKAY'end));其中 inv_status 為虛擬列
我們插入一條數據,然后再查詢,可以看到虛擬列的值會根據定義動態生成。
HR@bear> insert into inv (inv_id, inv_count) values (1, 100);1 row created.HR@bear> select * from inv;INV_ID INV_COUNT INV_STATUS ---------- ---------- -----------1 100 GETTING LOW40.Scalar subquery
在Oracle-SQL中,當一個子查詢介于select和from之間時,這種子查詢就叫做標量子查詢,一個范例如下:
select a.name, a.sex, (select b.salary from salary b where b.deptno = a.deptno) salaryfrom user a;41.OMF
當指定了下?的參數之后,在創建相關對象的可以不指定路徑,由ORACLE?動幫你創建。
1)DB_CREATE_FILE_DEST:定義數據?件的默認存儲位置
2)DB_CREATE_ONLINE_LOG_DEST_n:定義Redo或者control files的存儲位置
3)DB_RECOVERY_FILE_DEST:定義RMAN備份的存儲位置
OMF適?于以下的數據庫對象:
1)Tablespace
2)Redo log files
3)Control files
4)Archived files
5)Block change tracking files
6)Flashback logs
7)RMAN backups
42.shutdown transactional
特點:
1.在執行shutdown transactional命令之后,不允許有新的用戶連接到數據庫。
2.在執行shutdown transactional命令之后,所有連接到數據庫的用戶執行的DDL語句都無效。
3.在執行shutdowntransactional命令之后,不允許啟動新的事務。
4.在執行shutdown transactional命令之后,在完成所有事務后,任何一個仍連接到實例的客戶都將被解除連接。
43.locally managed tablespace
地管理(locally managed)的表空間使用在每個數據文件中存儲的位圖(bitmpa)來管理區(extents)
本地管理表空間提供以下好處:
1)快速的并發的空間操作。空間分配和取消分配修改本地管理的資源(存儲在文件頭部中的位圖)。
2)增強的性能
3)允許可讀的備數據庫,因為本地管理的臨時表空間不會道理任何undo或redo
4)簡化空間分配,因為當指定AUTOALLOCATE子語句時,數據庫自動選擇合適的區大小。
5)減少了用戶對數據字典的依賴,因為必要的信息存儲在文件頭部和位圖塊中。
6)對于本地管理的表空間,合并空閑的區是不必要的。
本地化管理的表空間的創建過程 語法 CREATE TABLESPACE 表空間名字 DATAFILE 數據文件詳細信息 [EXTENT MANAGEMENT { LOCAL {AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } } ]關鍵字EXTENT MANAGEMENT LOCAL 指定這是一個本地化管理的表空間 對于系統表空間 只能在創建數據庫的時候指定EXTENT MANGEMENT LOCAL 因為它是數據庫創建時建立的第一個表空間
44.五種網絡服務
oracle提供了五種網絡服務解析:
1、Oracle Internet Directory
2、External Naming
3、host naming
4、Oracle Easy Connect
5、local naming
(1).Oracle Internet Directory
Oracle Internet Directory:管理許多Oracle服務器的復雜網絡時有優勢,管理員可以在一個比較集中位置配置和管理Net Service Names。
(2).External Naming
External Naming:使用非Oracle工具管理和解析Oracle服務名稱
(3). host naming
host naming:主機命名方法(客戶端為windows xp,服務器端為linux+oracle 9i)
1、配置客戶端的sqlnet.ora SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME)2、配置服務器端的listener.ora LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = linuxoracle)(PORT = 1521)) #注意HOST配置為主機名 )SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = linuxoracle) #注意GLOBAL_DBNAME為主機名(ORACLE_HOME = /u01/app/oracle/product/9.2.0)(SID_NAME = dg1))(SID_DESC =(GLOBAL_DBNAME = linuxoracle)(ORACLE_HOME = /u01/app/oracle/product/9.2.0)(SID_NAME = OEMREP)))3、鏈接:C:Documents and Settings ew>sqlplus system/lijie123@linuxoracle注:1、如果沒有正確配置GLOBAL_DBNAME,sqlplus連接時,會報如下錯誤:ORA-12514: TNS: 監聽程序當前無法識別連接描述符中請求的服務2、ORA-12154: TNS: 無法解析指定的連接標識符。可能是客戶端hosts或dns問題,打開hosts# 102.54.94.97 rhino.acme.com # source server# 38.25.63.10 x.acme.com # x client host127.0.0.1 localhost修該為:...............................................................# 102.54.94.97 rhino.acme.com # source server# 38.25.63.10 x.acme.com # x client host127.0.0.1 localhost192.168.1.61 linuxoracle(4).Oracle Easy Connect
1、使用oracle easy connect naming必須滿足以下要求 Oracle 10g以上版本支持; 客戶端及服務器端必須支持TCP/IP,并啟用; 不允許高級連接描述符特性,如:連接池、外部過程調用;2、配置oracle easy connect naming 在sqlnet.ora增加下面這行: NAMES.DIRECTORY_PATH=(EZCONNECT,TNSNAMES) #注意增加了EZCONNECT3、oracle easy connect naming方法示例 eg: connect scott/tiger@hostname:port/servicesname connect scott/tiger@//hostname/servicesname解釋:語法構件 描述// 任選:通過URL連接時使用hostname 必選: 主機名或IPport 任選:端口號servicesname 必選:oracle服務的名稱(5). 本地命名法,也叫tnsnames.ora方法
客戶端tnsnames.ora中添加如下內容:TEST =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = dg1))45.Alert log
告警日志文件是一類特殊的跟蹤文件(trace file)。
告警日志文件命名一般為alert_<SID>.log,其中SID為ORACLE數據庫實例名稱。
數據庫告警日志是按時間順序記錄message和錯誤信息。
Alert log contents:
1:所有的內部錯誤(ORA-600)信息,塊損壞錯誤(ORA-1578)信息,以及死鎖錯誤(ORA-60)信息等。
2:管理操作,例如CREATE、ALTER、DROP語句等,以及數據庫啟動、關閉以及日志歸檔的一些信息。
2.1 涉及物理結構的所有操作:例如創建、刪除、重命名數據文件與聯機重做日志文件的ALTER DATABASE命令.此外還涉及重新分配數據文件大小以及將數據文件聯機與脫機的操作。 2.2 表空間操作,例如DROP與CREATE命令,此外還包括為了進行用戶管理的備份而將表空間置入和取出熱備份模式的操作3:與共享服務器或調度進程相關功能的消息和錯誤信息。
4:物化視圖的自動刷新過程中出現的錯誤。
5:動態參數的修改信息。
46.非標準塊表空間
1.創建非標準塊表空間
show parameter db_block_size;
2.創建數據塊大小為2k的表空間
修改動態參數db_2k_cache_size=3m
alter system set db_2k_cache_size=3m;創建數據塊大小為2k的表空間
SQL> create tablespace test2k datafile '/opt/oracle/app/oradata/orcl/test2k01.dbf' size 10m blocksize 2k;Tablespace created.47.deferred_segment_creation
EFERRED_SEGMENT_CREATION 參數的作用是:創建表的時候延遲創建這個表相關的segment(包括lobs,indexes),直到第一次插入數據的時候才創建segment.
48.user authentication
(1).REMOTE_LOGIN_PASSWORDFILE
關于Oracle數據庫REMOTE_LOGIN_PASSWORDFILE參數的設置
Oracle的實用程序orapwd命令可以用來創建口令文件,該命令的參數有3個:
File參數:口令文件名稱
Password參數:sys用戶的口令
Entries參數:為其他特許的Oracle用戶帳戶保留的條目數量
在參數文件中設置初始化參數:remote_login_passwordfile
EXCLUSIVE值:該參數說明只有一個數據庫可以使用這個口令文件。在這種模式下,口令文件可以包含用于多個特許的Oracle賬戶的口令。這是推薦的操作模式,特別是在運行RMAN時。如果希望將RMAN與來自于遠程客戶端的數據庫連接,則必須使用該參數設置。
另外還可以設置的值有:
NONE參數:這是默認值。在這種情況下,Oracle會忽略口令文件,并且sysdba訪問只給予本地特許的登錄。
SHARED參數:該參數說明多個數據庫可以使用相同的口令文件。這種模式只能保存SYS用戶帳戶的口令。
(2).password file
密碼文件的位置與名稱為:$ORACLE_HOME/dbs/orapw<ORACLE_SID>
[oracle@rac1 dbs]$ pwd /u01/app/oracle/product/11.2.0/db_1/dbs [oracle@rac1 dbs]$ ll total 16 -rw-rw---- 1 oracle asmadmin 1544 Jul 31 17:11 hc_orcl1.dat -rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora -rw-r----- 1 oracle oinstall 35 Apr 21 17:24 initorcl1.ora -rw-r----- 1 oracle oinstall 1536 Jul 30 21:53 orapworcl1 ## 密碼文件 SQL> select * from v$pwfile_users;USERNAME SYSDB SYSOP SYSAS ------------------------------ ----- ----- ----- SYS TRUE TRUE FALSE-- 把 sysdba 權限授予普通用戶 scott SQL> grant sysdba to scott; Grant succeeded./* remote_login_passwordfile= NONE | EXCLUSIVE | SHARED說明:該參數有三個取值,含義如下: (1)NONE: 不使用密碼文件,使用操作系統驗證 (2)EXCLUSIVE(默認值): 密碼文件驗證。以獨占模式使用密碼文件,此時在數據庫中可以執行對于 sysdba 用戶的增加,修改,刪除操作 (3)SHARED: 密碼文件驗證。密碼文件可以被一臺服務器上的多個數據庫或者 RAC 集群數據庫共享;shared 下的密碼文件不可被修改,這意味著無法授權 sysdba 權限給非 sys 用戶,也不允許修改 sysdba 權限用戶的密碼,包括 sys 用戶的密碼。 Oracle 建議首先將需要 sysdba 權限的用戶在 exclusive 模式下設置好,然后再將 REMOTE_LOGIN_PASSWORDFILE 修改為 shared。 */4.Oracle尋找口令文件的順序:orapw$ORACLE_SID --> orapw --> Failure#### 總結:SQL> select * from v$pwfile_users; USERNAME SYSDB SYSOP SYSAS ------------------------------ ----- ----- ----- SYS TRUE TRUE FALSE SCOTT TRUE FALSE FALSE49.resumable space allocation(可恢復空間分配)
從9i開始,Oracle提供了一種避免因為space Error而導致事務異常的操作: resumable spaceallocation
1.當我們執行一個事務操作,如果使用了resumable space allocation,那么如果遇到space空間不夠的情況,事務不會中斷,而是生成一條alert log 發送給DBA,當DBA 解決這個問題之后,事務自動恢復運行。
2.設置resumable_timeout 之后,在指定的timeout 時間內會自動恢復,如果超過這個時間沒有解決問題,事務操作還是會被中斷。
50.Enterprise Manager cloud control
1.和my oracle support融合
2.提供oracle中間件管理
3.提供oracle引擎系統管理
51.order by
1.大小寫敏感
2.可以使用alias name
3.復合查詢不指定order by 默認使用第一個select的第一個字段作為默認排序輸出。
52.index
1.unused索引沒有段
2.函數索引。
53.dedicated server(專用服務器)
如果安裝oracle時保持默認安裝 那么是 dedicated 模式,官方dedicated架構
1.一個專有服務進程獨享進程,不可復用
2.可以通過listener創建也可以不通過listener創建
54.check約束
1.建表時:
create table tbl_name(
column_name1 char(5) primary key,
column_name2 number(2),
constraint ck_name CHECK(column_name1=‘A’ or column_name1=‘B’),
constraint ck_name2 CHECK(column_name2 between 6 and 20)
)
右側value必須是一個實際值,不能是其他列
55.替代變量 && &
在使用&&替代變量的時候,當第一次執行語句的時候會提示要輸入替代變量的值,當兩次執行語句的時候,就不會提示要輸入替代變量的值了。因為這個替代變量的值 已經寫入到session里面了
(1).set verify on/off
當在sqlplus中運行的sql語句中有替代變量(以&或&&打頭)的時候,
set verify(或ver) on/off可以設置是否顯示替代變量被替代前后的語句。
& 不會寫入session,每次執行都需要重新輸入
56.三種模式(Template)
一般事務處理(General Purpose or Transportion Processing):許多并發用戶執行許多需要快速訪問數據的事務。可用性、速度、并發性和可恢復性是關鍵問題。
定制數據庫(Custom Database):此模板允許用戶在定義數據庫時具有最大的靈活性,用戶可以更改正在創建的數據庫的任何設置。
數據倉庫(Data Warehouse):用戶執行大量的復雜查詢,處理大量數據。響應時間、準確性和可用性是關鍵問題。這些查詢(SELECT語句)范圍從幾個記錄到許多不同的表中以千計的記錄進行查詢。
57.sequence
create sequence seq_testincrement by 1start with 1noMaxValue noCycle cache 10;minValue: 指定序列最小值。 maxValue: 指定序列最大值。 increment by: 指定序列增長步長,可以為正(升序)、負整數(降序),但不能為0。 start with:指定序列起始數,默認為序列最小值。 noMaxValue:無最大值(實際為10^27或-1),默認。 noMinValue:無最小值(實際為1或-10^26),默認。 cycle:指定序列達到最大值或最小值后繼續從頭開始生成。 noCycle:不循環生成,默認。 cache:指定數據庫內存中預分配的序列值個數,以便快速獲取,最小cache值為2。如果系統關閉或者其它情況將會導致序列不連續,也可以設置為nocache。 noCache:不指定緩存數,默認緩存20。 order:指定order條件保證序列按請求順序生成。 noOrder:不保證序列按請求順序生成。
刪除sequence:
drop sequence seq_test; drop sequence seq_test2;查看sequence值:
--查看sequence當前值 select seq_test.currval from dual; --查看sequence下一個值,sequence發生變化 select seq_test.nextval from dual;58.dispatchers in a shared server configuration
共享服務環境中,一個客戶端請求的步驟:
1、 客戶端發送一個請求到調度器
2、 調度器將請求放入到請求隊列中
3、 共享服務進程從請求隊列中取出請求進行處理
4、 共享服務進程將處理后的結果放到調度器的響應隊列中
5、 調度器從響應隊列中取出結果返回給客戶端
調度器執行過程:
1.從所有共享服務器連接將入站請求寫入公共請求隊列
2.使用共享服務器連接接收來自進程的入站請求
3.將共享服務器會話響應發送回到適當連接上的請求者
59.Database Configuration Assistant (DBCA)
1.配置數據庫Vault(保險庫)在ORACLE_HOME中
2.配置Label Security
3.注冊新的庫通過Enterprise Manager Management server
4.為新庫配置增量備份
60.參數設置
(1).remote_login_passwordfile
語法:REMOTE_LOGIN_PASSWORDFILE = { shared | exclusive | none }
默認值:exclusive
通過alter system修改
此為基本參數
RAC中各實例需設定相同的值
shared
密碼文件可供同一臺機器上的不同數據庫共享使用
密碼文件可供RAC中的各實例共享使用
由于是共享的,所以該模式下密碼文件不能修改
密碼文件可包含sys用戶和非sys用戶
exclusive
密碼文件只能被一個數據庫使用
可修改密碼文件
密碼文件可包含sys用戶和非sys用戶
none
忽略密碼文件,因此sysdba/sysoper權限必須采用操作系統認證
注意:如果參數設成shared及exclusive而沒有密碼文件存在,則相當于none
61.ADR(動態診斷庫)
如果沒有設置diagnostic_dest 初始化參數,ADR base 將會按照下面的方式設置:
1、如果設置了環境變量ORACLE_BASE ,diagnostic_dest 就設置成ORACLE_BASE指定的值。
2、如果沒有設置ORACLE_BASE ,diagnostic_dest 會設置成ORACLE_HOME/log。
通過查詢動態性能視圖 V$diag_info 查看當前數據庫實例所有重要的 ADR位置。
SQL> select * from V$diag_info;62.sys和system用戶
1.數據庫的啟動需要以SYSDBA/SYSOPER身份登錄。
2.如果在同一主機上使用IPC連接到數據庫使用操作系統授權,登錄任何一個用戶都可以擁有as sysdba和as sysoper。
3.sys和system用戶的區別
SYS用戶具有DBA權限,并具有SYS模式。只能通過SYSDBA登錄數據庫,是Oracle數據庫中權限最高的帳號。sys用戶具有“SYSDBA”和“SYSOPER”權限,登陸em時也只能用這兩個身份,不能用normal。而system登錄em時只能用normal模式登錄。sys擁有數據字典(dictionary),或者說dictionary屬于sys schema。
system用戶具有DBA權限,但是沒有SYSDBA權限。平常一般用該帳號管理數據庫。登錄em時只能使用normal登錄。
63.spfile、pfile
scope參數說明:
靜態參數 必須指定scope
動態參數issys_modifiable為IMMEDIATE不加scope默認的是 both
動態參數issys_modifiable為DEFERRED的必須加上scope=spfile或者加上derferred
| 靜態參數(issys_modifiable為false) | 可以,重啟服務器生效 | 不可以 | 不可以 | 不可以 |
| 動態參數(issys_modifiable為immediate) | 可以,重啟服務器生效 | 可以,立即生效,重啟服務失效 | 可以,立即生效,重啟服務器仍然有效果 | 可以 |
| 動態參數(issys_modifiable為deferred) | 可以,重啟服務器生效 | 不可以 | 不可以 | 可以,新建會話有效 |
64.錯誤:snapshot too old
假設你的emp表很大,你在18:00運行
select * from emp;
這個語句的輸出結果應該只取決于18:00的時候emp表的數據狀態,但事實上,由于emp表很大,你這個語句可能要運行10分鐘,然后才看到輸出結果
在18:01,有人在emp表上做了一個update,update直接做到表上了,怎樣使你18:00運行的select還能看到之前的數據呢?oracle用的是查詢前映的辦法,即把update之前的數據放到回滾段里保存,使你的select在查詢到那個block的時候,會跳轉去找前映,這樣可以使你的select能正確運行下去。
但可能發生這種情況,就是做update的人commit了,于是前映就有可能在被你的select訪問到之前被覆蓋,假如真的發生了這種情況,snapshot too old的錯誤就出現了 ------------------------
65.標量子查詢
當一個子查詢介于select和from之間時,這種子查詢就叫做標量子查詢
select a.name, a.sex, (select b.salary from salary b where b.deptno = a.deptno) salaryfrom user a;標量子查詢類似一個天然的嵌套循環,而且驅動表固定為主表。由于嵌套循環的被驅動表的連接列(b.deptno = a.deptno)必須包含在索引中,所以標量子查詢中的表連接也必須包含在索引中。
66.Database Vault
Oracle Database Vault 能夠在 Oracle Database 18c 中實施功能強大的安全控制。這些獨特的安全控制限制了數據庫特權用戶對應用數據的訪問,減少了內部和外部威脅的風險,并解決了常見的合規性要求。
總結
以上是生活随笔為你收集整理的【Oracle】082基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: seo模拟快排浏览器指纹进行识别过滤
- 下一篇: 一政:公务员笔试备考注意这几点