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

首頁 > 數據庫 > SQL Server > 正文

Oracle 數據庫向 MS SQL Server 7.0 的遷移(2)

2024-08-31 00:52:03
字體:
來源:轉載
供稿:網友

  索引數據存儲參數
  Microsoft SQL Server 中 FILLFACTOR 選項和 Oracle 中的 PCTFREE 變量的作用基本相同。隨著表的增大,索引頁就會拆分,以容納新數據。索引必須重新組織,來容納新的數據值。填充因子百分比只在索引創建時使用,以后不再維護。
  
  在索引最初創建時,FILLFACTOR 選項(值從 0 到 100 )控制索引頁上保留多少空間。假如沒有指定,使用默認的填充因子 0 - 這將完全填充索引葉級頁,并在每個決定節點頁上保留至少一個條目的空間(對于非唯一的聚集索引保留兩個)。
  
   Oracle 數據庫向 MS SQL Server 7.0 的遷移(2)(圖一)
  
  使用較低的填充因子值,最初會減少索引頁的拆分,并增加 B 樹索引結構中級別的數目。使用較高的填充因子值,可更有效地使用索引頁空間,訪問索引數據需要較少的磁盤 I/O,并減少了 B 樹索引結構中級別的數目。
  
  PAD_INDEX 選項指定了,將填充因子應用到索引的決定節點頁以及數據頁中。
  
  盡管在 Oracle 中,必須調整 PCTFREE 參數來優化性能,但在 CREATE INDEX 語句中,一般不需要加入 FILLFACTOR 選項。填充因子可用于優化性能。僅當使用現有數據在表上創建新索引,并且能夠準確預估該數據以后的變化時,填充因子才是有用的。
  
  假如已經把 Oracle 索引的 PCTFREE 設為 0,則考慮使用值為 100 的填充因子。它用于不發生插入和更新的表(只讀表)。填充因子設為 100 時,SQL Server 創建每頁均百分之百填充的索引。
  
  忽略重復的要害字
  對于 Oracle 和 Microsoft SQL Server,用戶不能向唯一索引的列插入重復的值。假如這樣做,就會產生錯識消息。但是,使用 SQL Server,開發人員可以選擇 INSERT 或 UPDATE 語句對該錯誤作出何種反應。
  
  假如在 CREATE INDEX 語句中指定了 IGNORE_DUP_KEY,并執行了產生重復鍵的 INSERT 或 UPDATE 語句,SQL Server 就會發出一條警告消息,并忽略(不插入)此重復的行。假如沒有給索引指定 IGNORE_DUP_KEY,SQL Server 就會發出一個錯誤信息,并回滾整個 INSERT 語句。有關這些選項的具體信息,請參見 SQL Server Books Online。
  
  Oracle 應用程序可能需要創建只存在很短時間的表。應用程序必須確保,在某些時候可以刪除所有為此目的創建的表。假如應用程序做不到這一點,表空間很快就會變得混亂和難以治理。
  
  Microsoft SQL Server 提供了臨時表數據庫對象,它正是為此目的創建的。這些表總是創建在 tempdb 數據庫中。表名稱決定了它們在 tempdb 數據庫中保留多長時間。
  
   Oracle 數據庫向 MS SQL Server 7.0 的遷移(2)(圖二)
  
  可以給臨時表定義索引。僅能在 tempdb 中顯式創建且不帶有 # 或 ## 前綴的表上定義視圖。下面的例子給出了,如何創建一個臨時表及其相關索引。用戶退出時,表和索引被自動刪除。
  
  SELECT SUM(ISNULL(TUITION_PAID,0)) SUM_PAID, MAJOR INTO #SUM_STUDENT
  FROM USER_DB.STUDENT_ADMIN.STUDENT GROUP BY MAJOR
  
  CREATE UNIQUE INDEX SUM STUDENT IDX ON #SUM STUDENT (MAJOR)
  
  
  您可能會發現,使用臨時表帶來了很多優勢,完全有理由為此而修改程序代碼。
  
  Microsoft SQL Server 有一些比 Oracle 更為強健的數據類型。Oracle 和 SQL Server 數據類型之間有多種轉換方式。建議使用 DTS 向導自動創建新的 CREATE TABLE 語句。必要時,可修改這些語句。
  
   Oracle 數據庫向 MS SQL Server 7.0 的遷移(2)(圖三)
  
  使用 Unicode 數據
  Unicode 規范給世界各地廣泛使用的幾乎所有字符定義了統一的編碼方案。所有計算機使用該 Unicode 規范,將 Unicode 數據中的位模式統一轉換為字符。這就保證了在所有的計算機上,相同的位模式總是轉換成相同的字符。數據可以從一個數據庫或計算機自由地傳輸到另一個上,而不必擔心接收系統不能把位模式正確轉換為字符。
  
  對于每個字符使用 1 個字節編碼的數據類型來說,一個問題是這種數據類型只能表示 256 個不同的字符。這就要求對于不同的字母表,必須采用多個編碼規范(或代碼頁)。它也不能處理像日語 Kanji 或韓國語 Hangul 字母表這樣有幾千個字符的系統。
  
  Microsoft SQL Server 使用與 SQL Server 一起安裝的代碼頁中的定義,將 char、varchar 和 text 列中的位模式轉換成字符。客戶計算機使用與操作系統一起安裝的代碼頁解釋位模式。
有許多種不同的代碼頁。有些字符在一些代碼頁中,但不在其它代碼頁中。有些字符在一些代碼頁中用一種位模式定義,在其它代碼頁中則使用另一種位模式。當創建必須處理各種語言的國際化系統時,要為所有計算機挑選滿足多個國家語言要求的代碼頁,就變得十分困難。而且也很難保證,所有計算機與使用不同代碼頁的系統交互時,能夠進行正確轉換。
  
  在 Unicode 規范 中,每個字符使用 2 字節編碼,從而解決了這一問題。兩字節中有足夠多的不同模式 (65,536),可以使單一規范涵蓋大多數通用的商務語言。因為所有的 Unicode 系統均使用相同的位模式表示所有字符,當字符從一個系統遷移到另一個系統時,不會出現字符轉換錯誤的問題。
  
  在 SQL Server 中,nchar、nvarchar 和 ntext 數據類型均支持 Unicode 數據。有關 SQL Server 數據類型的具體信息,請參見 SQL Server Books Online。
  
  用戶定義的數據類型。
  可為 model 數據庫或單個用戶數據庫創建用戶定義的數據類型。假如用戶定義的數據類型是為 model 定義的,此后創建的所有新用戶數據庫均可使用該數據類型。用戶定義的數據類型是用 sp_addtype 系統存儲過程定義的。有關具體信息,請參見 SQL Server Books Online。
  
  可以在 CREATE TABLE 和 ALTER TABLE 語句中使用用戶定義的數據類型,并將其與默認值和規則綁定在一起。表創建過程中,假如使用用戶定義的數據類型時,明確地定義了為空性,則它優先于數據類型創建時定義的為空性。
  
  此例給出了,如何創建一個用戶定義的數據類型。參數為用戶類型名稱、數據類型和為空性。
  
  sp_addtype gender_type, 'varchar(1)', 'not null'
  go
  
  
  乍看起來,此功能解決了 Oracle 表創建腳本向 SQL Server 遷移的問題。比如,可以方便地增添 Oracle DATE 數據類型:
  
  sp_addtype date, datetime
  
  
  但對于需要大小可變的數據類型,例如 Oracle 數據類型 NUMBER,則沒有什么用處。返回的錯誤消息表明,長度也必須指定。
  
  sp_addtype varchar2, varchar
  Go
  Msg 15091, Level 16, State 1
  You must specify a length with this physical type.
  
  
  Microsoft timestamp(時間戳)列
  timestamp 列答應 BROWSE 模式更新,并使游標更新操作更為有效。timestamp 是一種數據類型,每次包含 timestamp 列的行被插入或更新時,它都會自動更新。
  
  timestamp 中的值不是作為實際的日期或時間存儲的,而是以 binary(8) 或 varbinary(8) 存儲的,它表示表中行的事件序列。一個表只能有一個 timestamp 列。
  
  有關具體信息,請參見 SQL Server Books Online。
  
  Microsoft SQL Server 對象的權限可以授予給其它數據庫用戶、數據庫組和 public 角色,也可以被其拒絕或撤銷。與 Oracle 不同,SQL Server 不答應對象所有者給對象授予 ALTER TABLE 和 CREATE INDEX 權限。這些權限必須只屬于對象所有者。
  
  GRANT 語句在安全系統中創建一個條目,答應當前數據庫中的用戶處理當前數據庫中的數據或執行特定的 Transact-SQL 語句。在 Oracle 和 SQL Server 中,GRANT 語句的語法是相同的。
  
  DENY 語句在安全系統中創建一個條目,拒絕當前數據庫中安全帳戶的權限,并禁止安全帳戶以組或角色成員身份繼續權限。Oracle 沒有 DENY 語句。REVOKE 語句撤銷以前授予當前數據庫中一個用戶的權限或被其拒絕的權限。
  
   Oracle 數據庫向 MS SQL Server 7.0 的遷移(2)(圖四)
  
  有關對象級權限的具體信息,請參見 SQL Server Books Online。
  
  在 Oracle 中,REFERENCES 權限只能授予一個用戶。SQL Server 則答應將 REFERENCES 權限授予數據庫用戶和數據庫組。在 Oracle 和 SQL Server 中,INSERT、UPDATE、DELETE 和 SELECT 權限授予的方式相同。
  
  實施數據完整性和業務規則
  實施數據完整性確保了數據庫中數據的質量。在表的規劃中,有兩個重要的步驟,即識別列的有效值,以及確定如何在列中實施數據完整性。數據完整性可以分為四個類別,并用不同的方法來實施。
  
   Oracle 數據庫向 MS SQL Server 7.0 的遷移(2)(圖五)
  
  實體完整性把一行定義為特定表的一個單獨實體。實體完整性通過索引、UNIQUE 約束、PRIMARY KEY 約束或 IDENTITY 屬性,來實施表的標識符列或主鍵的完整性。
  
  約束的命名
  應該始終顯式命名約束。假如沒有,則 Oracle 和 Microsoft SQL Server 使用不同的命名規則隱式命名約束。這些命名上的差別會給遷移過程帶來不必要的麻煩。在刪除或禁用約束時,就會造成不一致,因為必須使用名稱,約束才能被刪除。對于 Oracle 和 SQL Server 來說,顯式命名約束的語法是相同的。
  
  CONSTRAINT constraint_name
  
  
  主鍵和唯一列
  SQL-92 標準要求,主鍵中的所有值應該唯一,并且該列不答應有空值。
一旦定義了 PRIMARY KEY 或 UNIQUE 約束,Oracle

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福贡县| 监利县| 郁南县| 渑池县| 定襄县| 藁城市| 平远县| 河西区| 镶黄旗| 辰溪县| 峨眉山市| 改则县| 临潭县| 会宁县| 商都县| 洪洞县| 灵武市| 虞城县| 肃南| 石首市| 瑞丽市| 敖汉旗| 平顶山市| 上高县| 从江县| 平罗县| 和硕县| 大关县| 德惠市| 霍州市| 车致| 丁青县| 桑日县| 南丰县| 磐石市| 资兴市| 原平市| 中山市| 曲靖市| 华阴市| 吐鲁番市|