Oracle8i與MS SQL SERVER之比較
添加時間:2012-11-14 16:54:48
添加:
思海網絡
1、關于數據庫的概念
我怎么找到或者創建自己的數據庫
Oracle的數據庫的概念已經完全不同于MS SQL
Oracle的服務和數據庫,相當于MS SQL的數據庫服務
Oracle的服務=后臺進程+相關內存
數據庫=數據文件的集合
而且Oracle的服務是完全可以與數據文件脫離開來的
那么MS SQL的數據庫,在Oracle哪兒能找到呢,
Oracle的Schema,Schema的中文意思:方案,意思是一個用戶所擁有所有對象的集合
這里的對象包括表、視圖、實例化視圖、序列、過程、函數、程序包、同義詞
(下面我會詳細解釋這其中的一些陌生的概念)
所以我們要建立一個在Oracle中的類似于MS SQL的數據庫:大致過程
·建立數據表空間(相當于MS SQL的數據庫的數據文件)
·建立臨時表空間(相當于MS SQL的數據庫的事務日志文件)
·建立用戶,他的卻省表空間和臨時表空間是剛建立的兩個表空間
·給用戶授權,最起碼的角色權限是Connect 的角色
·以該用戶登陸,創建自己的表、視圖、實例化視圖、序列、過程、函數、程序包、同義詞等
2、關于Oracle Manager Server與MS SQL的Enetrprise manager
應該說這兩者有很大的差別,DBA Studio工具提供了與MS SQL的Enetrprise manager同樣的功用,
DBA Studio工具對一般使用來說已經足夠了。
但這里有必要對Oracle Manager Server解釋一下
·它是Oracle 管理分布式數據庫的服務,注意他是服務
·它卻省并不安裝
·它需要有自己管理所需要的資料庫,在某個數據庫中需要建立相應的用戶
·它的等錄需要身份驗證,注意這里的身份驗證,與管理所需要的資料庫的用戶是不是一個概念,
也不是數據庫中的Sys和、system用戶,它的卻省用戶是oemtemp
·它的功能有
·使用它,在管理端要啟動Manager Server服務和智能代理服務(OracleAgent),被管理的數據庫服務器
要啟動智能代理服務(OracleAgent)
3、關于Oracle 的Sys、System的用戶與MS SQL的master的比較
MS SQL的master數據庫存儲了當前數據庫服務的一些配置信息如
數據庫設備(在MS SQL已經弱化)、字符集、數據文件、登陸帳號、擁有的數據庫、整個服務參數配制等信息
Oracle的Sys存儲Oracle服務或者實例的信息及所有用戶的數據字典信息
這一點不同于MS SQL,MS SQL每一個數據庫擁有自己的對象的數據字典信息
System用戶擁有數據字典是視圖信息,有了這些視圖,我們的查詢數據庫的信息就特別方便
卻省情況下,system用戶擁有DBA系統角色權限,而sys不僅擁有DBA 的權限還擁有SysDBA的權限
DBA、SysDBA這兩個系統角色有什么區別呢
在說明這一點之前我需要說一下Oracle服務的創建過程
·創建實例
·啟動實例
·創建數據庫(system表空間是必須的)
啟動過程
·實例啟動
·裝載數據庫
·打開數據庫
SysDBA,是管理Oracle實例的,它的存在不依賴于整個數據庫完全啟動,
只要實例啟動了,他就已經存在,以SysDBA身份登陸,裝載數據庫、打開數據庫
只有數據庫打開了,或者說整個數據庫完全啟動后,DBA角色才有了存在的基礎!
4、Oracle中新的數據庫對象:實例化視圖、快照、序列、程序包、同義詞、抽象的數據類型
·實例化視圖又稱顯形圖:實例化說明他有自己的存儲空間,視圖:說明他的數據來源于其他表數據。
實例化視圖中的數據,設置為隔一段時間更新數據,更新的模式可以定義為完全更新和增量更新
·快照基本上同實例化視圖,只不過數據來源不同,快照數據來愿于遠程數據庫,而實例化視圖則來源于本地數據表
·序列,相當于MS SQL中的identity列,他是一個數字順序列表
·程序包:他是過程、函數、全局變量的集合,他封裝了私有變量、私有過程和私有函數
如:dbms_out包
·同義詞:是對數據庫中的對象的別名,同義詞可以是全局的也可以是私有的(屬于某個用戶的)
如:Tab,col等
·抽象的數據類型,類似于C中的結構體或Pascal記錄類型
關于類型,這里還有一個題外話:A Tab%RowType,這是一個特別的抽象的數據類型,該類型的分量就是TAB的字段
B Tab.TName%Type,這定義了一個和tab的字段TNAME相同的數據類型的變量,想想他有什么好處
5、Oracle數據庫連接和MS SQL遠程連接
兩者都是為了實現分布式數據庫的操作。
兩者都能實現分布式事務,參見MS SQL的聯機幫助
6、Oracle回滾段和MS SQL的數據庫事務日志文件
回滾段提供了事物回滾需要使用的數據變化以前的映象.這些映象是按條目存儲的,
如果這些條目過少,一個事務等待另一個事務的幾率增大,就會影響數據庫的性能
卻省安裝時,提供一個系統回滾段他在System表空間.為了提高性能system 表空間
不應存儲有任何數據字典信息以外的信息.
MS SQL數據庫事務日志文件功能雷同于回滾段,只不過他是同特定的數據庫密切相關的
7、關于數據表的管理
·超大型數據表的管理
一個數據表,尤其是那種流水帳表,長年累月后急劇膨脹,最后影響查詢性能
怎么辦,Oracle和MS SQL都提供了一種方法,把數據文件及其索引存放在一個特定的
數據文件或表空間里,但這個還是不能解決問題,怎么辦,開發人員只能給表添加
時間的標志:如CWSJ2000(財務數據2000),CWSJ2001,CWSJ2002, 這種命名方式,
確實能提高查詢性能,但是給開發帶來了不少的麻煩(浪潮財務就是這樣做的),
而且當你不知道數據在哪個表中的時候,你要聯合這么表進行查詢,豈不長哉!
Oracle提供了很好的手段解決了這個問題:表及索引分區存儲。按字段值的范圍
進行分區存儲.具體做法不在說明。
·Oracle索引組織表和MS SQL簇索引表
兩者的數據存放順序都是按照索引值的順序存放的。
·無事務回滾概念的表,對這種表的操作不村在事務的概念
記得以前MySQL是不提供事務的回滾(不知現在有否變化)
而Oracle提供了建表參數nologging,使對該表的操作不參與事物的回滾
·索引
Oracle提供了多種MS SQL沒有的索引類型
··位圖索引,
比方說性別:僅有男女
第1條記錄:男
第2條記錄:男
第3條記錄:女
第4條記錄:男
第5條記錄:女
第6條記錄:男
.........
那它的索引:110101............
看這種索引多節省空間,它適用于字段值是的已知幾個中的一個
··基于函數或者說表達式的索引,這個功能可謂強大
8、外連接
·MS SQL SERVER 支持兩種形式表間連接
①從Sybase繼承來的形式:
字段1 *= 字段2 (左連接)
字段1 =* 字段2 (右連接)
沒有這種形式的全外連接語法
②標準的外連接語法
left [outer] join on 邏輯表達式
right [outer] join on 邏輯表達式
full [outer] join (全外連接) on 邏輯表達式
這里的邏輯表達式 可以是很復雜的表達式例如 :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
這句話告訴你,你查詢語句引用的視圖或者子查詢也用到了外連接,但是引用視圖或者子查詢外連接語法與你的外連接語法不一直導致的
例如: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的外連接語法是標準的SQL語法,而本語句中的外連接語法卻是Sybase式的外連接語法。
·Oracle不支持標準的外連接語法,也沒有全外連接,這是它的缺陷
字段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
9、觸發器
·從我了解到的,MS SQL SERVER,僅有表的觸發器,而且觸發時機不夠豐富
如插入觸發在子,不區分單條插入還是多條插入,也不區分插入前觸發還是插入后觸發
碰到多條數據的插入,需要使用游標處理每條插入的數據
·Oracle提供的觸發器不僅有基于表的觸發器,而且其他類型的,例如數據庫級的觸發器:數據庫啟動、數據庫關閉
對于表級的觸發器,區分單條插入還是多條插入,也區分插入前觸發還是插入后觸發
10、表數據復制
·庫內數據復制
·MS SQL Server
Insert into 復制表名稱 select 語句 (復制表已經存在)
select 字段列表 into 復制表名稱 from 表 (復制表不存在)
·Oracle
Insert into 復制表名稱 select 語句 (復制表已經存在)
create table 復制表名稱 as select 語句 (復制表不存在)
·文本文件轉入、轉出的批量處理
·MS SQL Server
BCP命令行程序
·Oracle
SQLLDR命令行程序
11、多表更新、刪除
一條更新語句是不能更新多張表的,除非使用觸發器隱含更新,我這里說的意思是:根據其他表數據更新你要更新的表
一般形式:
·MS SQL Server
update A
SET 字段1=B表字段表達式,
字段2=B表字段表達式
from B
WHERE 邏輯表達式
·Oracle
update A
SET 字段1=(select 字段表達式 from B WHERE ...),
字段2=(select 字段表達式 from B WHERE ...)
WHERE 邏輯表達式
從以上來看,感覺oracle沒有ms sql好,主要原因:假如A需要多個字段更新,MS_SQL語句更簡練
你知道剛學數據庫的人怎么做上面這件事情嗎,他們使用游標一條一條的處理
12、關于存儲過程或函數中使用的臨時表,兩者都提供了這個功能
臨時表,最主要的好處是,操作不留任何痕跡、不產生日志,
所以速度快
·MS SQL SERVER
CREATE TABLE #表名稱(........) 或者 SELECT 字段表達式列表 INTO #表名稱 FROM
表名稱前加#即可,這些臨時表都是只在一個數據庫連接會話期間有效
·Oracle
create [Global] Temporary Table ,加上[Global]就是全局的臨時表(所有數據庫連接會話都是可見的),
不則為私有的(在一個數據庫連接會話期間有效)
13、兩者都提供了自己的桌面版的數據庫
·MS SQL SERVER 毋庸我多說了
基本上桌面版的數據庫提供的功能跟服務器版的功能沒多大區別
缺少的全文搜索服務功能
·Oracle
Oracle Lite 8,我就看過人家用Oracle lite 8做過海關報關系統
補充:Sybase 提供了桌面版的Sybase SQL anywhere
14、動態執行SQL語句
·MS SQL SERVER 7.0好象沒有這個功能,MS SQL SERVER 2000已經這個功能。
你是不是想在存儲過程的參數中傳遞一個表名或者在過程體里動態
生成一個SQL語句,你會發現很難辦到。看了下面的例子:你以前的問題全解決了
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提供了兩種方法實現這個功能
①程序包DBMS_SQL,執行一個語句的過程:
打開游標(open_cursor,對于非查詢語句,無此過程)
分析語句(Parse)
綁定變量(bind_variable)
執行語句(execute)
關閉游標(close_cursor,對于非查詢語句,無此過程)
②execute immediate ls_SQL
15、數據庫備份和恢復
兩者都提供了很強的數據庫的備份和恢復能力,Oracle提供了更多的手段,
Orace宣稱她的數據庫是不可摧毀的也不是瞎吹牛
·MS SQL SERVER
①數據庫的倒入倒出DTS工具,如果數據源和目的都是MS SQL SERVER則可以完全復制數庫的結構
(包括表、視圖、索引、觸發子、規則、默認、存儲過程、用戶定義函數、表數據)
②數據庫備份和恢復命令
backup database
restore database
倒出的數據文件還可以壓縮的,這一點不同于Sybase
而且這種數據庫備份和恢復的方式可以是增量的和完全的
③數據庫的附加Attach
只要數據庫的原始數據和日志文件沒有損壞,就可以
命令:SP_ATTACH_DB
這種情況,有時候會出問題:比方說你鍵了登陸帳號,不是使用缺省的登陸帳號sa,
由于登陸帳號的信息存放在master數據庫中,所以你使用原來建立的帳號就登陸不上,
所以要做一些后補工作
·Oracle
①倒出倒入工具exp和imp工具
倒入倒出的參數何其多
②冷備份或者稱脫機備份,備份的時候數據庫是停止的
備份所有的數據文件、日志文件、控制文件
③熱備份或者聯機備份
數據庫處在ARCHIVELOG模式,注意缺省情況下都是ARCHIVELOG
恢復時可以選擇完全恢復、時間點恢復、SCN點恢復、用戶自由干預的CANCEL恢復
可以說他的熱備份的恢復功能是非常之強大的
關鍵字:Oracle、數據庫
我怎么找到或者創建自己的數據庫
Oracle的數據庫的概念已經完全不同于MS SQL
Oracle的服務和數據庫,相當于MS SQL的數據庫服務
Oracle的服務=后臺進程+相關內存
數據庫=數據文件的集合
而且Oracle的服務是完全可以與數據文件脫離開來的
那么MS SQL的數據庫,在Oracle哪兒能找到呢,
Oracle的Schema,Schema的中文意思:方案,意思是一個用戶所擁有所有對象的集合
這里的對象包括表、視圖、實例化視圖、序列、過程、函數、程序包、同義詞
(下面我會詳細解釋這其中的一些陌生的概念)
所以我們要建立一個在Oracle中的類似于MS SQL的數據庫:大致過程
·建立數據表空間(相當于MS SQL的數據庫的數據文件)
·建立臨時表空間(相當于MS SQL的數據庫的事務日志文件)
·建立用戶,他的卻省表空間和臨時表空間是剛建立的兩個表空間
·給用戶授權,最起碼的角色權限是Connect 的角色
·以該用戶登陸,創建自己的表、視圖、實例化視圖、序列、過程、函數、程序包、同義詞等
2、關于Oracle Manager Server與MS SQL的Enetrprise manager
應該說這兩者有很大的差別,DBA Studio工具提供了與MS SQL的Enetrprise manager同樣的功用,
DBA Studio工具對一般使用來說已經足夠了。
但這里有必要對Oracle Manager Server解釋一下
·它是Oracle 管理分布式數據庫的服務,注意他是服務
·它卻省并不安裝
·它需要有自己管理所需要的資料庫,在某個數據庫中需要建立相應的用戶
·它的等錄需要身份驗證,注意這里的身份驗證,與管理所需要的資料庫的用戶是不是一個概念,
也不是數據庫中的Sys和、system用戶,它的卻省用戶是oemtemp
·它的功能有
·使用它,在管理端要啟動Manager Server服務和智能代理服務(OracleAgent),被管理的數據庫服務器
要啟動智能代理服務(OracleAgent)
3、關于Oracle 的Sys、System的用戶與MS SQL的master的比較
MS SQL的master數據庫存儲了當前數據庫服務的一些配置信息如
數據庫設備(在MS SQL已經弱化)、字符集、數據文件、登陸帳號、擁有的數據庫、整個服務參數配制等信息
Oracle的Sys存儲Oracle服務或者實例的信息及所有用戶的數據字典信息
這一點不同于MS SQL,MS SQL每一個數據庫擁有自己的對象的數據字典信息
System用戶擁有數據字典是視圖信息,有了這些視圖,我們的查詢數據庫的信息就特別方便
卻省情況下,system用戶擁有DBA系統角色權限,而sys不僅擁有DBA 的權限還擁有SysDBA的權限
DBA、SysDBA這兩個系統角色有什么區別呢
在說明這一點之前我需要說一下Oracle服務的創建過程
·創建實例
·啟動實例
·創建數據庫(system表空間是必須的)
啟動過程
·實例啟動
·裝載數據庫
·打開數據庫
SysDBA,是管理Oracle實例的,它的存在不依賴于整個數據庫完全啟動,
只要實例啟動了,他就已經存在,以SysDBA身份登陸,裝載數據庫、打開數據庫
只有數據庫打開了,或者說整個數據庫完全啟動后,DBA角色才有了存在的基礎!
4、Oracle中新的數據庫對象:實例化視圖、快照、序列、程序包、同義詞、抽象的數據類型
·實例化視圖又稱顯形圖:實例化說明他有自己的存儲空間,視圖:說明他的數據來源于其他表數據。
實例化視圖中的數據,設置為隔一段時間更新數據,更新的模式可以定義為完全更新和增量更新
·快照基本上同實例化視圖,只不過數據來源不同,快照數據來愿于遠程數據庫,而實例化視圖則來源于本地數據表
·序列,相當于MS SQL中的identity列,他是一個數字順序列表
·程序包:他是過程、函數、全局變量的集合,他封裝了私有變量、私有過程和私有函數
如:dbms_out包
·同義詞:是對數據庫中的對象的別名,同義詞可以是全局的也可以是私有的(屬于某個用戶的)
如:Tab,col等
·抽象的數據類型,類似于C中的結構體或Pascal記錄類型
關于類型,這里還有一個題外話:A Tab%RowType,這是一個特別的抽象的數據類型,該類型的分量就是TAB的字段
B Tab.TName%Type,這定義了一個和tab的字段TNAME相同的數據類型的變量,想想他有什么好處
5、Oracle數據庫連接和MS SQL遠程連接
兩者都是為了實現分布式數據庫的操作。
兩者都能實現分布式事務,參見MS SQL的聯機幫助
6、Oracle回滾段和MS SQL的數據庫事務日志文件
回滾段提供了事物回滾需要使用的數據變化以前的映象.這些映象是按條目存儲的,
如果這些條目過少,一個事務等待另一個事務的幾率增大,就會影響數據庫的性能
卻省安裝時,提供一個系統回滾段他在System表空間.為了提高性能system 表空間
不應存儲有任何數據字典信息以外的信息.
MS SQL數據庫事務日志文件功能雷同于回滾段,只不過他是同特定的數據庫密切相關的
7、關于數據表的管理
·超大型數據表的管理
一個數據表,尤其是那種流水帳表,長年累月后急劇膨脹,最后影響查詢性能
怎么辦,Oracle和MS SQL都提供了一種方法,把數據文件及其索引存放在一個特定的
數據文件或表空間里,但這個還是不能解決問題,怎么辦,開發人員只能給表添加
時間的標志:如CWSJ2000(財務數據2000),CWSJ2001,CWSJ2002, 這種命名方式,
確實能提高查詢性能,但是給開發帶來了不少的麻煩(浪潮財務就是這樣做的),
而且當你不知道數據在哪個表中的時候,你要聯合這么表進行查詢,豈不長哉!
Oracle提供了很好的手段解決了這個問題:表及索引分區存儲。按字段值的范圍
進行分區存儲.具體做法不在說明。
·Oracle索引組織表和MS SQL簇索引表
兩者的數據存放順序都是按照索引值的順序存放的。
·無事務回滾概念的表,對這種表的操作不村在事務的概念
記得以前MySQL是不提供事務的回滾(不知現在有否變化)
而Oracle提供了建表參數nologging,使對該表的操作不參與事物的回滾
·索引
Oracle提供了多種MS SQL沒有的索引類型
··位圖索引,
比方說性別:僅有男女
第1條記錄:男
第2條記錄:男
第3條記錄:女
第4條記錄:男
第5條記錄:女
第6條記錄:男
.........
那它的索引:110101............
看這種索引多節省空間,它適用于字段值是的已知幾個中的一個
··基于函數或者說表達式的索引,這個功能可謂強大
8、外連接
·MS SQL SERVER 支持兩種形式表間連接
①從Sybase繼承來的形式:
字段1 *= 字段2 (左連接)
字段1 =* 字段2 (右連接)
沒有這種形式的全外連接語法
②標準的外連接語法
left [outer] join on 邏輯表達式
right [outer] join on 邏輯表達式
full [outer] join (全外連接) on 邏輯表達式
這里的邏輯表達式 可以是很復雜的表達式例如 :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
這句話告訴你,你查詢語句引用的視圖或者子查詢也用到了外連接,但是引用視圖或者子查詢外連接語法與你的外連接語法不一直導致的
例如: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的外連接語法是標準的SQL語法,而本語句中的外連接語法卻是Sybase式的外連接語法。
·Oracle不支持標準的外連接語法,也沒有全外連接,這是它的缺陷
字段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
9、觸發器
·從我了解到的,MS SQL SERVER,僅有表的觸發器,而且觸發時機不夠豐富
如插入觸發在子,不區分單條插入還是多條插入,也不區分插入前觸發還是插入后觸發
碰到多條數據的插入,需要使用游標處理每條插入的數據
·Oracle提供的觸發器不僅有基于表的觸發器,而且其他類型的,例如數據庫級的觸發器:數據庫啟動、數據庫關閉
對于表級的觸發器,區分單條插入還是多條插入,也區分插入前觸發還是插入后觸發
10、表數據復制
·庫內數據復制
·MS SQL Server
Insert into 復制表名稱 select 語句 (復制表已經存在)
select 字段列表 into 復制表名稱 from 表 (復制表不存在)
·Oracle
Insert into 復制表名稱 select 語句 (復制表已經存在)
create table 復制表名稱 as select 語句 (復制表不存在)
·文本文件轉入、轉出的批量處理
·MS SQL Server
BCP命令行程序
·Oracle
SQLLDR命令行程序
11、多表更新、刪除
一條更新語句是不能更新多張表的,除非使用觸發器隱含更新,我這里說的意思是:根據其他表數據更新你要更新的表
一般形式:
·MS SQL Server
update A
SET 字段1=B表字段表達式,
字段2=B表字段表達式
from B
WHERE 邏輯表達式
·Oracle
update A
SET 字段1=(select 字段表達式 from B WHERE ...),
字段2=(select 字段表達式 from B WHERE ...)
WHERE 邏輯表達式
從以上來看,感覺oracle沒有ms sql好,主要原因:假如A需要多個字段更新,MS_SQL語句更簡練
你知道剛學數據庫的人怎么做上面這件事情嗎,他們使用游標一條一條的處理
12、關于存儲過程或函數中使用的臨時表,兩者都提供了這個功能
臨時表,最主要的好處是,操作不留任何痕跡、不產生日志,
所以速度快
·MS SQL SERVER
CREATE TABLE #表名稱(........) 或者 SELECT 字段表達式列表 INTO #表名稱 FROM
表名稱前加#即可,這些臨時表都是只在一個數據庫連接會話期間有效
·Oracle
create [Global] Temporary Table ,加上[Global]就是全局的臨時表(所有數據庫連接會話都是可見的),
不則為私有的(在一個數據庫連接會話期間有效)
13、兩者都提供了自己的桌面版的數據庫
·MS SQL SERVER 毋庸我多說了
基本上桌面版的數據庫提供的功能跟服務器版的功能沒多大區別
缺少的全文搜索服務功能
·Oracle
Oracle Lite 8,我就看過人家用Oracle lite 8做過海關報關系統
補充:Sybase 提供了桌面版的Sybase SQL anywhere
14、動態執行SQL語句
·MS SQL SERVER 7.0好象沒有這個功能,MS SQL SERVER 2000已經這個功能。
你是不是想在存儲過程的參數中傳遞一個表名或者在過程體里動態
生成一個SQL語句,你會發現很難辦到。看了下面的例子:你以前的問題全解決了
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提供了兩種方法實現這個功能
①程序包DBMS_SQL,執行一個語句的過程:
打開游標(open_cursor,對于非查詢語句,無此過程)
分析語句(Parse)
綁定變量(bind_variable)
執行語句(execute)
關閉游標(close_cursor,對于非查詢語句,無此過程)
②execute immediate ls_SQL
15、數據庫備份和恢復
兩者都提供了很強的數據庫的備份和恢復能力,Oracle提供了更多的手段,
Orace宣稱她的數據庫是不可摧毀的也不是瞎吹牛
·MS SQL SERVER
①數據庫的倒入倒出DTS工具,如果數據源和目的都是MS SQL SERVER則可以完全復制數庫的結構
(包括表、視圖、索引、觸發子、規則、默認、存儲過程、用戶定義函數、表數據)
②數據庫備份和恢復命令
backup database
restore database
倒出的數據文件還可以壓縮的,這一點不同于Sybase
而且這種數據庫備份和恢復的方式可以是增量的和完全的
③數據庫的附加Attach
只要數據庫的原始數據和日志文件沒有損壞,就可以
命令:SP_ATTACH_DB
這種情況,有時候會出問題:比方說你鍵了登陸帳號,不是使用缺省的登陸帳號sa,
由于登陸帳號的信息存放在master數據庫中,所以你使用原來建立的帳號就登陸不上,
所以要做一些后補工作
·Oracle
①倒出倒入工具exp和imp工具
倒入倒出的參數何其多
②冷備份或者稱脫機備份,備份的時候數據庫是停止的
備份所有的數據文件、日志文件、控制文件
③熱備份或者聯機備份
數據庫處在ARCHIVELOG模式,注意缺省情況下都是ARCHIVELOG
恢復時可以選擇完全恢復、時間點恢復、SCN點恢復、用戶自由干預的CANCEL恢復
可以說他的熱備份的恢復功能是非常之強大的
關鍵字:Oracle、數據庫
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解