原文地址不詳....
Oracle 與SQL SERVER概念
-----------------------------------------------------
·Oracle的服務和資料庫 相當於 MS SQL的資料庫服務;
·Oracle的服務= 後台進程+相關記憶體
·資料庫= 資料檔案的集合
Oracle的服務完全可以與資料庫檔案脫離開來;Oracle中的Schema與MS SQL中的資料庫。
Schema“方案”是一個使用者所擁有所有對象的集合。
“對象”包括表、視圖、執行個體化視圖、序列、過程、函數、程式包、同義字。
Oracle類似於MSSQL的資料庫大致過程如下:
·建立資料庫資料表空間(相當於MSSQL的資料庫的資料檔案)
·建立暫存資料表空間(相單于MSSQL的資料庫的交易記錄檔)
·建立使用者,它的預設空間和暫存資料表空間是剛建立的兩個資料表空間
·給使用者授權,最起碼得角色許可權是Connect的角色
·以該使用者登陸,建立自己的表、視圖、執行個體化視圖、序列、過程、函數、程式包、同義字等。
關於Oracle Manager Server與MS SQL的Enterprise manager
-----------------------------------------------------
DBA Studio工具提供了與MS SQL的Enterprise manager同樣的功用,但應該說兩者有很大的區別。
對於一般是用來說,DBA Studio工具已經足夠了。但這裡有必要對Oracle Manager Server解釋一下:
〉它是Oracle管理分散式資料庫的服務,注意她是服務。
〉它預設並不安裝
〉它需要有自己管理所需要的資料庫。在某個資料庫中需要建立相應的使用者
〉它的登陸需要身分識別驗證,注意這裡的身分識別驗證,與管理所需要的資料庫的使用者不是一個概念,也不是資料庫中的SYS,system;
它的預設使用者是oem_temp sysman
> 使用她,在管理端要啟動Manager Server服務和智能代理服務(OracleAgent),被管理的資料庫伺服器要啟動智能代理服務(oracleagent).
關於Oracle的SYS,system的使用者與MSSQL的Master比較
------------------------------------------------
MSSQL的Master資料庫儲存了當前資料庫服務的一些配置資訊,如資料庫裝置、字元集、資料檔案、登陸帳號、擁有的資料庫、整個服務參數配置等資訊。
Oracle的sys儲存了Oracle服務或者執行個體的資訊及所有使用者的資料字典資訊。
Oracle的system使用者擁有資料字典是視圖資訊,有了這些視圖,我們查詢資料庫的資訊就特別方便。預設情況下,system使用者擁有DBA系統角色許可權,
而sys不僅擁有DBA的許可權還擁有sysdba的許可權。
DBA\SYSDBA系統角色的區別:
首先說明一下oracle服務的建立過程:建立執行個體、啟動執行個體、建立資料庫(SYSTEM資料表空間是必需的)
其次啟動過程:執行個體啟動、裝載資料庫、開啟資料庫
Oracle中新的資料庫物件:執行個體化視圖、快照、序列、程式包、同義字、抽象的資料類型
--------------------------------------------------------------------------------
·執行個體化視圖又稱顯形圖:執行個體化說明它有自己的儲存空間;視圖:說明它的資料來源於其他表資料。
·執行個體化視圖中的資料,設定為隔一段時間更新資料,更新的模式可以定義為完全更新和累加式更新。
·快照基本上同執行個體化視圖,只不過資料來源不同,快照資料來源於遠端資料庫,而執行個體化視圖來源於本機資料表
·序列,相當於MSSQL中的identify列,它是一個數字順序列表
·程式包:它是過程、函數、全域變數的集合;它封裝了私人變數、私用程序和私人函數。如:DBMS_OUT包
·同義字:是對資料庫中的對象的別名,同義字可以是全域的也可以是私人的(屬於某個使用者的)如:tab,col等
·抽象的資料類型:類似於C中的結構體或Pascal記錄類型。
Oracle資料庫連接和 Mssql遠端連線
---------------------------------------------
兩者都是為了實現分散式資料庫的操作,兩者都能實現分散式交易
Oracle復原斷和MSSQL的資料庫事物記錄檔
-----------------------------------------------
復原段提供了交易回復需要使用的資料變化以前的映象,這些映象是按條目儲存的,如果這些條目過少,一個事務等待另一個事務的幾率
增大,就會影響資料庫的效能。預設安裝時,提供一個系統復原段它在system資料表空間。
為了提高效能,system資料表空間不應儲存有任何資料字典資訊以外的資訊。
MSSQL資料庫交易記錄檔功能類同於復原段,只不過它是同特定的資料庫密切相關的。
關於資料表的管理
-----------------
超大型資料表的管理:
oracle和MsSQL都提供了一種“把資料檔案及其索引存放在一個特定的資料檔案或資料表空間裡”方法
Oracle將表及索引分割區儲存,即按欄位值的範圍進行分區儲存。
·Oracle索引組織表和Sqlserver簇索引表 :兩者的資料存放順序都是按照索引值的順序存放的
·無交易回復概念的表,對這種表的操作不存在事務的概念;ORacle提供了建表參數nologging,使對該表的操作不參與事務的復原。
·索引:oracle提供了多種MSSQL沒有的索引類型,如:位元影像索引等
外串連
=------------------------------------
·MSSQL支援兩種形式表之間串連
(1)從SYSBASE繼承來的形式:
1)欄位1*=欄位2(左串連)
2)欄位1=*欄位2(右串連)
3)沒有這種形式的全外串連文法
(2)標準的外串連文法:
1)left[outer] join on 邏輯運算式
2)right[outer] join on 邏輯運算式
3)full[outer] jion (全外串連) on 邏輯運算式
·Oracle不支援標準的外串連文法,也沒有全外串連(這是他的缺陷)。
1)欄位1=欄位2(+)(左串連)
2)欄位1(+)=欄位2(右串連)
·使用外串連語句的用處
(1)不想因為表串連而使主表資料行丟失
(2)尋找某條記錄在表A存在,而在B表不存在,按常規做法用not in(select...查詢語句)文法。
使用not in 最大的缺點就是速度慢,原因是每行都去做select查詢語句;而使用如下語句則會更好:
select tu_company.* from TU_company left
join TU_Comp_agent on
TU_company.id=tu_comp_agent.compCode where TU_comp_agent.id is null;
觸發器
=====================
·MSSQL僅有表的觸發器,而且觸發時機不夠豐富,如插入觸發器不區分單條插入還是多條插入;也不區分插入前觸發還是插入後觸發。碰到
多條資料的插入,需要使用遊標處理每條插入的資料。
·Oracle提供的觸發器不僅有基於表的觸發器,而且還有其它類型的,例如資料庫計的觸發器:資料庫的啟動、資料庫關閉。對於表級的觸發器
區分單條插入還是多條插入,也區分插入前觸發還是插入後觸發
表資料複製
-------------
·庫內資料複製
·MSSQL
Insert into 複製表名稱 select 語句(複製表已經存在)
select 欄位列表 into 複製表名 from 表(複製表不存在)
·Oracle
Insert into 複製表名稱 select 語句(複製表已經存在)
create table 複製表名稱 as select 語句(複製表不存在)
·文字檔轉入,轉出的批量處理
·MSSQL
BCP命令列程式
·Oracle
SQLLDR命令列程式
多表更新、刪除
-------------------
一條更新語句是不能更新多張表的,除非使用觸發器隱含更新,這裡的意思是說:根據其他表資料更新你要更新的表。
·MSSQL
update a set 欄位1=B表子段運算式,欄位2=B表子段運算式,。。。。from B where 邏輯運算式
·ORACLE
update a set 欄位1=(Select子段運算式 from B where ...),欄位2=(Select子段運算式 from B where ...),...from B where 邏輯運算式
就以上問題來看假如A需要多個子段更新,MSSQL更簡練!
關於預存程序或函數中使用的暫存資料表
---------------------------------
兩者都有這個功能。暫存資料表最主要的好處是,操作不留任何痕迹、不產生日誌,所以速度快。
·MSSQL
Create table #表名(...),或者select 欄位運算式列表 INTo #表名稱 FRom 表名稱前加#,這些暫存資料表都是旨在一個資料庫連接會話期間有效。
·ORACLE
create [global] temporary table,加上[global]就是全域的暫存資料表(所有資料庫連接會話都是可見的),否則為私人(在一個資料庫連接會話期間有效)。
動態執行SQL語句
------------------
·在預存程序中的參數中傳遞一個表名或者在過程體力動態產生一個SQL語句。
MSSQL:
declare @count int
declare @Sql nvarchar(200)
set @sql=N'select count(*) from sysobjects'
exec sp_executesql @sql,N'@i int output',@count output
ORACLE:
(1)程式包DBMS_SQL,執行一個語句的過程:
開啟遊標(OPen_cursor,對於非查詢語句,無此過程)
分析語句(parse)
綁定變數(bind_variable)
執行語句(execute)
關閉遊標(close_cursor,對於排序查詢語句,無此過程)
(2)Execute immediate ls_SQL
Database Backup和恢複
-----------------------------------------------
MSSQL:
(1)資料庫匯入匯出DTS工具,如果資料來源和目的都是MSSQL則可以完全複製資料庫的結構(表、視圖、索引、觸發器、規則、預設、預存程序、自訂函數、表資料等)
(2)Database Backup和還原命令:
BackUp database
Restore database
匯出的資料檔案還可以壓縮,Database Backup和還原方式可以是增量和完全的。
(3)資料庫的附加attach
只要資料庫的未經處理資料和記錄檔沒有破壞,就可以使用命令:SP_ADDACH_DB.這種情況有時候回出現問題:比方說你見了登陸帳號,
不是使用預設的登陸帳號SA,由於登陸帳號的資訊存放在master資料庫中,所以使用原來建立的帳號就等不上,需要以下後部工作。
ORACLE:
(1)匯入匯出工具:Exp工具、Imp工具
匯入匯出的參數很多
(2)冷備份或者離線備份,備份的時候資料庫是停止的
備份所有的資料檔案、記錄檔、控制檔案
(3)熱備份或者聯機備份
資料庫處在archivelog模式,注意預設情況下都是archivelog恢複時可以選擇完全恢複、時間點恢複、SCN點恢複、使用者自由幹預的
CANCEL恢複可以說是它的熱備份功能是非常強大。
(3)RMAN恢複管理期