国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle8i與MS SQL SERVER之比較

2024-08-29 13:31:05
字體:
供稿:網(wǎng)友
菜鳥學(xué)堂:

下面是我個人的一點體會,由于水平有限,估計有理解的有一些問題,歡迎指正對于oracle 8i初學(xué)者,很有可能會經(jīng)常把ms sql server中的概念拿來與oracle對照,這種對照,從我個人認(rèn)為覺得不需要做過多的這種比較,一個如果才來沒有學(xué)過其他數(shù)據(jù)庫管理的人,可能更容易學(xué)習(xí)oracle.現(xiàn)在我來說一下兩者的區(qū)別和聯(lián)系



1、關(guān)于數(shù)據(jù)庫的概念 
我怎么找到或者創(chuàng)建自己的數(shù)據(jù)庫
oracle的數(shù)據(jù)庫的概念已經(jīng)完全不同于ms sql

oracle的服務(wù)和數(shù)據(jù)庫,相當(dāng)于ms sql的數(shù)據(jù)庫服務(wù)
oracle的服務(wù)=后臺進程+相關(guān)內(nèi)存

數(shù)據(jù)庫=數(shù)據(jù)文件的集合
而且oracle的服務(wù)是完全可以與數(shù)據(jù)文件脫離開來的
那么ms sql的數(shù)據(jù)庫,在oracle哪兒能找到呢,
oracle的schema,schema的中文意思:方案,意思是一個用戶所擁有所有對象的集合
這里的對象包括表、視圖、實例化視圖、序列、過程、函數(shù)、程序包、同義詞
(下面我會詳細(xì)解釋這其中的一些陌生的概念)

所以我們要建立一個在oracle中的類似于ms sql的數(shù)據(jù)庫:大致過程
·建立數(shù)據(jù)表空間(相當(dāng)于ms sql的數(shù)據(jù)庫的數(shù)據(jù)文件)
·建立臨時表空間(相當(dāng)于ms sql的數(shù)據(jù)庫的事務(wù)日志文件)
·建立用戶,他的卻省表空間和臨時表空間是剛建立的兩個表空間
·給用戶授權(quán),最起碼的角色權(quán)限是connect 的角色
·以該用戶登陸,創(chuàng)建自己的表、視圖、實例化視圖、序列、過程、函數(shù)、程序包、同義詞等

2、關(guān)于oracle manager server與ms sql的enetrprise manager
應(yīng)該說這兩者有很大的差別,dba studio工具提供了與ms sql的enetrprise manager同樣的功用,
dba studio工具對一般使用來說已經(jīng)足夠了。
但這里有必要對oracle manager server解釋一下
·它是oracle 管理分布式數(shù)據(jù)庫的服務(wù),注意他是服務(wù)
·它卻省并不安裝
·它需要有自己管理所需要的資料庫,在某個數(shù)據(jù)庫中需要建立相應(yīng)的用戶
·它的等錄需要身份驗證,注意這里的身份驗證,與管理所需要的資料庫的用戶是不是一個概念,
也不是數(shù)據(jù)庫中的sys和、system用戶,它的卻省用戶是oemtemp
·它的功能有
·使用它,在管理端要啟動manager server服務(wù)和智能代理服務(wù)(oracleagent),被管理的數(shù)據(jù)庫服務(wù)器
要啟動智能代理服務(wù)(oracleagent)

3、關(guān)于oracle 的sys、system的用戶與ms sql的master的比較
ms sql的master數(shù)據(jù)庫存儲了當(dāng)前數(shù)據(jù)庫服務(wù)的一些配置信息如
數(shù)據(jù)庫設(shè)備(在ms sql已經(jīng)弱化)、字符集、數(shù)據(jù)文件、登陸帳號、擁有的數(shù)據(jù)庫、整個服務(wù)參數(shù)配制等信息

oracle的sys存儲oracle服務(wù)或者實例的信息及所有用戶的數(shù)據(jù)字典信息
這一點不同于ms sql,ms sql每一個數(shù)據(jù)庫擁有自己的對象的數(shù)據(jù)字典信息
system用戶擁有數(shù)據(jù)字典是視圖信息,有了這些視圖,我們的查詢數(shù)據(jù)庫的信息就特別方便
卻省情況下,system用戶擁有dba系統(tǒng)角色權(quán)限,而sys不僅擁有dba 的權(quán)限還擁有sysdba的權(quán)限

dba、sysdba這兩個系統(tǒng)角色有什么區(qū)別呢

在說明這一點之前我需要說一下oracle服務(wù)的創(chuàng)建過程
·創(chuàng)建實例
·啟動實例
·創(chuàng)建數(shù)據(jù)庫(system表空間是必須的)
啟動過程
·實例啟動
·裝載數(shù)據(jù)庫
·打開數(shù)據(jù)庫

sysdba,是管理oracle實例的,它的存在不依賴于整個數(shù)據(jù)庫完全啟動,
只要實例啟動了,他就已經(jīng)存在,以sysdba身份登陸,裝載數(shù)據(jù)庫、打開數(shù)據(jù)庫
只有數(shù)據(jù)庫打開了,或者說整個數(shù)據(jù)庫完全啟動后,dba角色才有了存在的基礎(chǔ)!

4、oracle中新的數(shù)據(jù)庫對象:實例化視圖、快照、序列、程序包、同義詞、抽象的數(shù)據(jù)類型

·實例化視圖又稱顯形圖:實例化說明他有自己的存儲空間,視圖:說明他的數(shù)據(jù)來源于其他表數(shù)據(jù)。
實例化視圖中的數(shù)據(jù),設(shè)置為隔一段時間更新數(shù)據(jù),更新的模式可以定義為完全更新和增量更新
·快照基本上同實例化視圖,只不過數(shù)據(jù)來源不同,快照數(shù)據(jù)來愿于遠(yuǎn)程數(shù)據(jù)庫,而實例化視圖則來源于本地數(shù)據(jù)表
·序列,相當(dāng)于ms sql中的identity列,他是一個數(shù)字順序列表
·程序包:他是過程、函數(shù)、全局變量的集合,他封裝了私有變量、私有過程和私有函數(shù)
 如:dbms_out包
·同義詞:是對數(shù)據(jù)庫中的對象的別名,同義詞可以是全局的也可以是私有的(屬于某個用戶的)
 如:tab,col等
·抽象的數(shù)據(jù)類型,類似于c中的結(jié)構(gòu)體或pascal記錄類型
關(guān)于類型,這里還有一個題外話:a tab%rowtype,這是一個特別的抽象的數(shù)據(jù)類型,該類型的分量就是tab的字段
b tab.tname%type,這定義了一個和tab的字段tname相同的數(shù)據(jù)類型的變量,想想他有什么好處



5、oracle數(shù)據(jù)庫連接和ms sql遠(yuǎn)程連接
兩者都是為了實現(xiàn)分布式數(shù)據(jù)庫的操作。
兩者都能實現(xiàn)分布式事務(wù),參見ms sql的聯(lián)機幫助

6、oracle回滾段和ms sql的數(shù)據(jù)庫事務(wù)日志文件
  回滾段提供了事物回滾需要使用的數(shù)據(jù)變化以前的映象.這些映象是按條目存儲的,
如果這些條目過少,一個事務(wù)等待另一個事務(wù)的幾率增大,就會影響數(shù)據(jù)庫的性能
卻省安裝時,提供一個系統(tǒng)回滾段他在system表空間.為了提高性能system 表空間
不應(yīng)存儲有任何數(shù)據(jù)字典信息以外的信息.

ms sql數(shù)據(jù)庫事務(wù)日志文件功能雷同于回滾段,只不過他是同特定的數(shù)據(jù)庫密切相關(guān)的

7、關(guān)于數(shù)據(jù)表的管理
·超大型數(shù)據(jù)表的管理
  一個數(shù)據(jù)表,尤其是那種流水帳表,長年累月后急劇膨脹,最后影響查詢性能
 怎么辦,oracle和ms sql都提供了一種方法,把數(shù)據(jù)文件及其索引存放在一個特定的
 數(shù)據(jù)文件或表空間里,但這個還是不能解決問題,怎么辦,開發(fā)人員只能給表添加
 時間的標(biāo)志:如cwsj2000(財務(wù)數(shù)據(jù)2000),cwsj2001,cwsj2002, 這種命名方式,
 確實能提高查詢性能,但是給開發(fā)帶來了不少的麻煩(浪潮財務(wù)就是這樣做的),
 而且當(dāng)你不知道數(shù)據(jù)在哪個表中的時候,你要聯(lián)合這么表進行查詢,豈不長哉!
 oracle提供了很好的手段解決了這個問題:表及索引分區(qū)存儲。按字段值的范圍
 進行分區(qū)存儲.具體做法不在說明。

·oracle索引組織表和ms sql簇索引表
 兩者的數(shù)據(jù)存放順序都是按照索引值的順序存放的。

·無事務(wù)回滾概念的表,對這種表的操作不村在事務(wù)的概念
記得以前mysql是不提供事務(wù)的回滾(不知現(xiàn)在有否變化)
而oracle提供了建表參數(shù)nologging,使對該表的操作不參與事物的回滾

·索引
oracle提供了多種ms sql沒有的索引類型
··位圖索引,
比方說性別:僅有男女
第1條記錄:男
  第2條記錄:男
第3條記錄:女
  第4條記錄:男
  第5條記錄:女
  第6條記錄:男
  .........
那它的索引:110101............

看這種索引多節(jié)省空間,它適用于字段值是的已知幾個中的一個

··基于函數(shù)或者說表達(dá)式的索引,這個功能可謂強大

8、外連接
·ms sql server 支持兩種形式表間連接
①從sybase繼承來的形式:
字段1 *= 字段2 (左連接)
字段1 =* 字段2 (右連接)
沒有這種形式的全外連接語法
②標(biāo)準(zhǔn)的外連接語法
left [outer] join on 邏輯表達(dá)式
  right [outer] join on 邏輯表達(dá)式
full [outer] join (全外連接) on 邏輯表達(dá)式
這里的邏輯表達(dá)式 可以是很復(fù)雜的表達(dá)式例如 :a.id=b.id and (a.parebt_id=1 or a.parent_id=2)

需要提醒大家的是:你寫的查詢語句報告過這樣的錯誤
 joined tables cannot be specified in a query containing outer join operators. joined tables cannot be specified in a query containing outer join operators. view or function 'dbo.vu_caf_bills' contains joined tables
這句話告訴你,你查詢語句引用的視圖或者子查詢也用到了外連接,但是引用視圖或者子查詢外連接語法與你的外連接語法不一直導(dǎo)致的
 例如:select a.[zone],a.flag,a.flagdesc,a.caf_no
  from dbo.vu_caf_bills a,tu_flag
  where a.caf_no*=tu_flag.objno
 視圖dbo.vu_caf_bills的外連接語法是標(biāo)準(zhǔn)的sql語法,而本語句中的外連接語法卻是sybase式的外連接語法。



·oracle不支持標(biāo)準(zhǔn)的外連接語法,也沒有全外連接,這是它的缺陷
 字段1 = 字段2(+) (左連接)
字段1(+) = 字段2 (右連接)

·使用外連接語句的用處
①不想因為表連接而使主表數(shù)據(jù)行丟失,這一點毋庸多說
①找某條記錄在a表存在,而在b表不存在,按常規(guī)做法使用not in (select 查詢子句)語法,
使用not in 最大的缺點速度慢,原因是每個數(shù)據(jù)行都去做: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

9、觸發(fā)器
·從我了解到的,ms sql server,僅有表的觸發(fā)器,而且觸發(fā)時機不夠豐富
如插入觸發(fā)在子,不區(qū)分單條插入還是多條插入,也不區(qū)分插入前觸發(fā)還是插入后觸發(fā)
碰到多條數(shù)據(jù)的插入,需要使用游標(biāo)處理每條插入的數(shù)據(jù)

·oracle提供的觸發(fā)器不僅有基于表的觸發(fā)器,而且其他類型的,例如數(shù)據(jù)庫級的觸發(fā)器:數(shù)據(jù)庫啟動、數(shù)據(jù)庫關(guān)閉
對于表級的觸發(fā)器,區(qū)分單條插入還是多條插入,也區(qū)分插入前觸發(fā)還是插入后觸發(fā)
 
10、表數(shù)據(jù)復(fù)制
·庫內(nèi)數(shù)據(jù)復(fù)制
 ·ms sql server
insert into 復(fù)制表名稱 select 語句 (復(fù)制表已經(jīng)存在)
  select 字段列表 into 復(fù)制表名稱 from 表 (復(fù)制表不存在)
 ·oracle
  insert into 復(fù)制表名稱 select 語句 (復(fù)制表已經(jīng)存在)
  create table 復(fù)制表名稱 as select 語句 (復(fù)制表不存在)
 
·文本文件轉(zhuǎn)入、轉(zhuǎn)出的批量處理
·ms sql server
bcp命令行程序
·oracle
  sqlldr命令行程序
11、多表更新、刪除
一條更新語句是不能更新多張表的,除非使用觸發(fā)器隱含更新,我這里說的意思是:根據(jù)其他表數(shù)據(jù)更新你要更新的表
一般形式:
·ms sql server
 update a
 set 字段1=b表字段表達(dá)式,
  字段2=b表字段表達(dá)式
from b
where 邏輯表達(dá)式
·oracle
 update a
 set 字段1=(select 字段表達(dá)式 from b where ...),
  字段2=(select 字段表達(dá)式 from b where ...)
where 邏輯表達(dá)式
 
 從以上來看,感覺oracle沒有ms sql好,主要原因:假如a需要多個字段更新,ms_sql語句更簡練

你知道剛學(xué)數(shù)據(jù)庫的人怎么做上面這件事情嗎,他們使用游標(biāo)一條一條的處理


12、關(guān)于存儲過程或函數(shù)中使用的臨時表,兩者都提供了這個功能
臨時表,最主要的好處是,操作不留任何痕跡、不產(chǎn)生日志,
所以速度快
 ·ms sql server
  create table #表名稱(........) 或者 select 字段表達(dá)式列表 into #表名稱 from
  表名稱前加#即可,這些臨時表都是只在一個數(shù)據(jù)庫連接會話期間有效
  
·oracle
  create [global] temporary table ,加上[global]就是全局的臨時表(所有數(shù)據(jù)庫連接會話都是可見的),
  不則為私有的(在一個數(shù)據(jù)庫連接會話期間有效)



13、兩者都提供了自己的桌面版的數(shù)據(jù)庫
 ·ms sql server 毋庸我多說了
  基本上桌面版的數(shù)據(jù)庫提供的功能跟服務(wù)器版的功能沒多大區(qū)別
  缺少的全文搜索服務(wù)功能
·oracle
  oracle lite 8,我就看過人家用oracle lite 8做過海關(guān)報關(guān)系統(tǒng)
 補充:sybase 提供了桌面版的sybase sql anywhere
14、動態(tài)執(zhí)行sql語句
 ·ms sql server 7.0好象沒有這個功能,ms sql server 2000已經(jīng)這個功能。
  你是不是想在存儲過程的參數(shù)中傳遞一個表名或者在過程體里動態(tài)
  生成一個sql語句,你會發(fā)現(xiàn)很難辦到。看了下面的例子:你以前的問題全解決了
  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提供了兩種方法實現(xiàn)這個功能
  ①程序包dbms_sql,執(zhí)行一個語句的過程:
   打開游標(biāo)(open_cursor,對于非查詢語句,無此過程)
   分析語句(parse)
   綁定變量(bind_variable)
   執(zhí)行語句(execute)
   關(guān)閉游標(biāo)(close_cursor,對于非查詢語句,無此過程)
  ②execute immediate ls_sql

15、數(shù)據(jù)庫備份和恢復(fù)
兩者都提供了很強的數(shù)據(jù)庫的備份和恢復(fù)能力,oracle提供了更多的手段,
orace宣稱她的數(shù)據(jù)庫是不可摧毀的也不是瞎吹牛
·ms sql server
 ①數(shù)據(jù)庫的倒入倒出dts工具,如果數(shù)據(jù)源和目的都是ms sql server則可以完全復(fù)制數(shù)庫的結(jié)構(gòu)
 (包括表、視圖、索引、觸發(fā)子、規(guī)則、默認(rèn)、存儲過程、用戶定義函數(shù)、表數(shù)據(jù))
 ②數(shù)據(jù)庫備份和恢復(fù)命令
  backup database
  restore database
  倒出的數(shù)據(jù)文件還可以壓縮的,這一點不同于sybase
  而且這種數(shù)據(jù)庫備份和恢復(fù)的方式可以是增量的和完全的
 
 ③數(shù)據(jù)庫的附加attach
  只要數(shù)據(jù)庫的原始數(shù)據(jù)和日志文件沒有損壞,就可以
  命令:sp_attach_db
  這種情況,有時候會出問題:比方說你鍵了登陸帳號,不是使用缺省的登陸帳號sa,
  由于登陸帳號的信息存放在master數(shù)據(jù)庫中,所以你使用原來建立的帳號就登陸不上,
  所以要做一些后補工作

·oracle
 ①倒出倒入工具exp和imp工具
  倒入倒出的參數(shù)何其多
②冷備份或者稱脫機備份,備份的時候數(shù)據(jù)庫是停止的
  備份所有的數(shù)據(jù)文件、日志文件、控制文件
 ③熱備份或者聯(lián)機備份
  數(shù)據(jù)庫處在archivelog模式,注意缺省情況下都是archivelog
  恢復(fù)時可以選擇完全恢復(fù)、時間點恢復(fù)、scn點恢復(fù)、用戶自由干預(yù)的cancel恢復(fù)
  可以說他的熱備份的恢復(fù)功能是非常之強大的
 ④rman恢復(fù)管理器,本人正在研究中,不好亂說
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 平武县| 宁武县| 田东县| 临沂市| 阳东县| 获嘉县| 昌邑市| 察雅县| 宁化县| 二连浩特市| 开原市| 彰武县| 岗巴县| 炉霍县| 延寿县| 普格县| 肇州县| 南充市| 扎赉特旗| 昭觉县| 巍山| 宁武县| 金门县| 潮安县| 德安县| 凤凰县| 遂溪县| 安阳县| 宜丰县| 托克托县| 清流县| 麻江县| 文水县| 宝丰县| 突泉县| 襄垣县| 翁牛特旗| 宁远县| 宁明县| 沐川县| 慈溪市|