當前位置:首頁 » 數據倉庫 » 資料庫遷移約束不見了
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫遷移約束不見了

發布時間: 2022-07-30 21:33:16

資料庫之前沒加約束後來又加約束,之前的數據又會被怎麼處理呢

如果現有的數據違反約束條件,則添加約束的操作會失敗,如果不違反約束條件,則可以添加成功,並且後續的數據在進入表之前都會進行約束條件的檢查。

sql server 2005 中導入資料庫時,主鍵及約束都不能導入,誰有解決辦法急用,謝謝!!!

先把約束去掉, 可以去使約束 與 NOCHECK 狀態;
ALTER TABLE 表名 NOCHECK CONSTRAINT ALL
詳細點 請參見SQL SERVER 2005幫助文檔。

⑶ powerdesigner直接生成SQLSERVER資料庫時外鍵約束怎麼沒有了

不可能吧,應該是你沒設好,我就可以呀

⑷ 資料庫的遷移要注意哪些問題

1.程序邏輯部分,新邏輯上線,注意對老邏輯的兼容,千萬不要不管三七二十一暴力替換。

2.資料庫部分:
1)能建新表盡量建新表以避免對老數據的破壞。
2)如果老表有欄位增加,千萬不要做非空,唯一性的約束,否則後果自負。
3)假如需要減欄位,那麼請考慮臨時替代的方案,比如新建一張臨時表,讓程序先取臨時表數據,最後等新表建立後再切換過來,導入數據。

3.CACHE等需要序列化,反序列化的部分。一定要兼容原先在緩存中的數據,例如SID千萬不要變化,否則反序列化失敗,假如有欄位需要增加,那麼考慮第一次讀入先取資料庫。

4.外部介面相關的,能不要求外部介面聯調,盡量就不做聯調,一是麻煩,二是風險大。盡量對原介面傳入和傳出的數據保持兼容。假如有變化,考慮用適配器封裝,實在沒辦法再實行下策。

5.注意操作的先後順序,這個也是非常重要,例如你先發了資料庫,但是程序還是老的,並且會受到影響,那麼就掛了。

⑸ 怎麼樣保證資料庫遷移的完整性

資料庫的安全性、完整性、並發控制和恢復

from: http://bbs.chinaunix.net/viewthread.php?tid=188100

為了保證資料庫數據的安全可靠性和正確有效,DBMS必須提供統一的數據保護功能。數據保護也為數據控制,主要包括資料庫的安全性、完整性、並發控制和恢復。

1. 資料庫的存取控制
ORACLE保護信息的方法採用任意存取控制來控制全部用戶對命名對象的存取。用戶對對象的存取受特權控制。一種特權是存取一命名對象的許可,為一種規定格式。
ORACLE使用多種不同的機制管理資料庫安全性,其中有兩種機制:模式和用戶。模式為模式對象的集合,模式對象如表、視圖、過程和包等。第一資料庫有一組模式。
每一ORACLE資料庫有一組合法的用戶,可存取一資料庫,可運行一資料庫應用和使用該用戶各連接到定義該用戶的資料庫。當建立一資料庫用戶時,對該用戶建立一個相應的模式,模式名與用戶名相同。一旦用戶連接一資料庫,該用戶就可存取相應模式中的全部對象,一個用戶僅與同名的模式相聯系,所以用戶和模式是類似的。

用戶的存取權利受用戶安全域的設置所控制,在建立一個資料庫的新用戶或更改一已有用戶時,安全管理員對用戶安全域有下列決策:
l 是由資料庫系統還是由操作系統維護用戶授權信息。
l 設置用戶的預設表空間和臨時表空間。
l 列出用戶可存的表空間和在表空間中可使用空間份額。
l 設置用戶資源限制的環境文件,該限制規定了用戶可用的系統資源的總量。
l 規定用戶具有的特權和角色,可存取相應的對象。

每一個用戶有一個安全域,它是一組特性,可決定下列內容:
l 用戶可用的特權和角色;
l 用戶可用的表空間的份額;
l 用戶的系統資源限制。

1) 用戶鑒別:
為了防止非授權的資料庫用戶的使用,ORACLE提供二種確認方法
操作系統確認和相應的ORACLE資料庫確認。
如果操作系統允許,ORACLE可使用操作系統所維護的信息來鑒定用戶。由操作系統鑒定用戶的優點是:
l 用戶可更方便地連接到ORACLE,不需要指定用戶名和口令。
l 對用戶授權的控制集中在操作系統,ORACLE不需要存儲和管理用戶口令。然而用戶名在資料庫中仍然要維護。
l 在資料庫中的用戶名項和操作系統審計跟蹤相對應。

ORACLE資料庫方式的用戶確認:ORACLE利用存儲在資料庫中的信息可鑒定試圖接到資料庫的一用戶,這種鑒別方法僅當操作系統不能用於資料庫用戶鑒別時才使用。當用戶使用一ORACLE資料庫時執行用戶鑒別。每個用戶在建立時有一個口令,用戶口令在建立對資料庫連接時使用,以防止對資料庫非授權的使用。用戶的口令以密碼的格式存儲在資料庫數據字典中,用戶可隨時修改其口令。

2) 用戶的表空間設置和定額
關於表空間的使用有幾種設置選擇:
l 用戶的預設表空間;
l 用戶的臨時表空間;
l 資料庫表空間的空間使用定額。

3) 用戶資源限制和環境文件
用戶可用的各種系統資源總量的限制是用戶安全域的部分。利用顯式地設置資源限制;安全管理員可防止用戶無控制地消耗寶貴的系統資源。資源限制是由環境文件管理。一個環境文件是命名的一組賦給用戶的資源限制。另外ORACLE為安全管理員在資料庫級提供使能或使不能實施環境文件資源限制的選擇。
ORACLE可限制幾種類型的系統資源的使用,每種資源可在會話級、調用級或兩者上控制。在會話級:每一次用戶連接到一資料庫,建立一會話。每一個會話在執行SQL語句的計算機上耗費CPU時間和內存量進行限制。對ORACLE的幾種資源限制可在會話級上設置。如果會話級資源限制被超過,當前語句被中止(回滾),並返回指明會話限制已達到的信息。此時,當前事務中所有之前執行的語句不受影響,此時僅可作COMMIT、ROLLBACK或刪除對資料庫的連接等操作,進行其它操作都將出錯。
在調用級:在SQL語句執行時,處理該語句有好幾步,為了防止過多地調用系統,ORACLE在調用級可設置幾種資源限制。如果調用級的資源限制被超過,語句處理被停止,該語句被回滾,並返回一錯誤。然而當前事務的已執行所用語句不受影響,用戶會話繼續連接。

二、 數據完整性

它是指數據的正確性和相容性。數據的完整性是為了防止資料庫存在不符合主義的數據,防止錯誤信息輸入和輸出,即數據要遵守由DBA或應用開發者所決定的一組預定義的規則。ORACLE應用於關系資料庫的表的數據完整性有下列類型:
l 在插入或修改表的行時允許不允許包含有空值的列,稱為空與非空規則。
l 唯一列值規則,允許插入或修改的錶行在該列上的值唯一。
l 引用完整性規則,同關系模型定義
l 用戶對定義的規則,為復雜性完整性檢查。
ORACLE允許定義和實施上述每一種類型的數據完整性規則,這些規則可用完整性約束和資料庫觸發器定義。
完整性約束,是對表的列定義一規則的說明性方法。
資料庫觸發器,是使用非說明方法實施完整性規則,利用資料庫觸發器(存儲的資料庫過程)可定義和實施任何類型的完整性規則。

1. 完整性約束
ORACLE利用完整性約束機制防止無效的數據進入資料庫的基表,如果任何DML執行結果破壞完整性約束,該語句被回滾並返回一上個錯誤。ORACLE實現的完整性約束完全遵守ANSI
X3。135-1989和ISO9075-1989標准。
利用完整性約束實施數據完整性規則有下列優點:
l 定義或更改表時,不需要程序設計,便很容易地編寫程序並可消除程序性錯誤,其功能是由ORACLE控制。所以說明性完整性約束優於應用代碼和資料庫觸發器。
l 對表所定義的完整性約束是存儲在數據字典中,所以由任何應用進入的數據都必須遵守與表相關聯的完整性約束。
l 具有最大的開發能力。當由完整性約束所實施的事務規則改變時,管理員只需改變完整性約束的定義,所有應用自動地遵守所修改的約束。
l 由於完整性約束存儲在數據字典中,資料庫應用可利用這些信息,在SQL語句執行之前或由ORACLE檢查之前,就可立即反饋信息。
l 由於完整性約束說明的語義是清楚地定義,對於每一指定說明規則可實現性能優化。
l
由於完整性約束可臨時地使不能,以致在裝入大量數據時可避免約束檢索的開銷。當資料庫裝入完成時,完整性約束可容易地使其能,任何破壞完整性約束的任何新行在例外表中列出。
ORACLE的DBA和應用開始者對列的值輸入可使用的完整性約束有下列類型:
l NOT NULL約束:如果在表的一列的值不允許為空,則需在該列指定NOT NULL約束。
l
UNIQUE碼約束:在表指定的列或組列上不允許兩行是具有重復值時,則需要該列或組列上指定UNIQUE碼完整性約束。在UNIQUE碼約束定義中的列或組列稱為唯一碼。所有唯一完整性約束是用索引方法實施。
l PRIMARY KEY約束:在資料庫中每一個表可有一個PRIMARY KEY約束。包含在PRIMARY
KEY完整性約束的列或組列稱為主碼,每個表可有一個主碼。ORACLE使用索引實施PRIMARY KEY約束。
l FOREIGN
KEY約束(可稱引用約束):在關系資料庫中表可通過公共列相關聯,該規則控制必須維護的列之間的關系。包含在引用完整性約束定義的列或組列稱為外來碼。由外來碼所引用的表中的唯一碼或方碼,稱為引用碼。包含有外來碼的表稱為子表或從屬表。由子表的外來碼所引用的表稱為雙親表或引用表。如果對表的每一行,其外來碼的值必須與主碼中一值相匹配,則需指定引用完整性約束。
l
CHECK約束:表的每行對一指定的條件必須是TRUE或未知,則需在一列或列組上指定CHECK完整性約束。如果在發出一個DML語句時,CHECK約束的條件計算得FALSE時,該語句被回滾。

3. 並發控制
資料庫是一個共享資源,可為多個應用程序所共享。這些程序可串列運行,但在許多情況下,由於應用程序涉及的數據量可能很大,常常會涉及輸入/輸出的交換。為了有效地利用資料庫資源,可能多個程序或一個程序的多個進程並行地運行,這就是資料庫的並行操作。在多用戶資料庫環境中,多個用戶程序可並行地存取資料庫,如果不對並發操作進行控制,會存取不正確的數據,或破壞資料庫數據的一致性。
例:在飛機票售票中,有兩個訂票員(T1,T2)對某航線(A)的機動性票作事務處理,操作過程如圖所示:
資料庫中的A111100
T1 READ A A:=A-1 WRITE A
T2 READ A A:=A-1 WRITE A
T1工作區中的A110000
T2工作區中的A 11000

首先T1讀A,接著T2也讀A。然後T1將其工作區中的A減1,T2也採取同樣動作,它們都得0值,最後分別將0值寫回資料庫。在這過程中沒有任何非法操作,但實際上多出一張機票。這種情況稱為資料庫的不一致性,這種不一致性是由於並行操作而產生的。所謂不一致,實際上是由於處理程序工作區中的數據與資料庫中的數據不一致所造成的。如果處理程序不對資料庫中的數據進行修改,則決不會造成任何不一致。另一方面,如果沒有並行操作發生,則這種臨時的不一致也不會造成什麼問題。數據不一致總是是由兩個因素造成:一是對數據的修改,二是並行操作的發生。因此為了保持資料庫的一致性,必須對並行操作進行控制。最常用的措施是對數據進行封鎖。

1) 資料庫不一致的類型
l 不一致性
在一事務期間,其它提交的或未提交事務的修改是顯然的,以致由查詢所返回的數據集不與任何點相一致。
l 不可重復讀
在一個事務范圍內,兩個相同查詢將返回不同數據,由於查詢注意到其它提交事務的修改而引起。
l 讀臟數據
如果事務T1將一值(A)修改,然後事務T2讀該值,在這之後T1由於某種原因撤銷對該值的修改,這樣造成T2讀取的值是臟的。
l 丟失更改
在一事務中一修改重寫另一事務的修改,如上述飛機票售票例子。
l 破壞性的DDL操作
在一用戶修改一表的數據時,另一用戶同時更改或刪除該表。

1) 封鎖
在多用戶資料庫中一般採用某些數據封鎖來解決並發操作中的數據一致性和完整性問題。封鎖是防止存取同一資源的用戶之間破壞性的干擾的機制,該干擾是指不正確地修改數據或不正確地更改數據結構。
在多用戶資料庫中使用兩種封鎖:排它(專用)封鎖和共享封鎖。排它封鎖禁止相關資源的共享,如果一事務以排它方式封鎖一資源,僅僅該事務可更改該資源,直至釋放排它封鎖。共享封鎖允許相關資源可以共享,幾個用戶可同時讀同一數據,幾個事務可在同一資源上獲取共享封鎖。共享封鎖比排它封鎖具有更高的數據並行性。
在多用戶系統中使用封鎖後會出現死鎖,引起一些事務不能繼續工作。當兩個或多個用戶彼此等待所封鎖數據時可發生死鎖。

2) ORACLE多種一致性模型。
ORACLE利用事務和封鎖機制提供數據並發存取和數據完整性。在一事務內由語句獲取的全部封鎖在事務期間被保持,防止其它並行事務的破壞性干擾。一個事務的SQL語句所作的修改在它提交之後所啟動的事務中才是可見的。在一事務中由語句所獲取的全部封鎖在該事務提交或回滾時被釋放。
ORACLE在兩個不同級上提供讀一致性:語句級讀一致性和事務級一致性。ORCLE總是實施語句級讀一致性,保證單個查詢所返回的數據與該查詢開始時刻相一致。所以一個查詢從不會看到在查詢執行過程中提交的其它事務所作的任何修改。為了實現語句級讀一致性,在查詢進入執行階段時,在注視SCN的時候為止所提交的數據是有效的,而在語句執行開始之後其它事務提交的任何修改,查詢將是看不到的。
ORACLE允許選擇實施事務級讀一致性,它保證在同一事務內所有查詢的數據

4) 封鎖機制
ORACLE自動地使用不同封鎖類型來控制數據的並行存取,防止用戶之間的破壞性干擾。ORACLE為一事務自動地封鎖一資源以防止其它事務對同一資源的排它封鎖。在某種事件出現或事務不再需要該資源時自動地釋放。
ORACLE將封鎖分為下列類:
l
數據封鎖:數據封鎖保護表數據,在多個用戶並行存取數據時保證數據的完整性。數據封鎖防止相沖突的DML和DDL操作的破壞性干擾。DML操作可在兩個級獲取數據封鎖:指定行封鎖和整個表封鎖,在防止沖突的DDL操作時也需表封鎖。當行要被修改時,事務在該行獲取排它數據封鎖。表封鎖可以有下列方式:行共享、行排它、共享封鎖、共享行排它和排它封鎖。
l DDL封鎖(字典封鎖)
DDL封鎖保護模式對象(如表)的定義,DDL操作將影響對象,一個DDL語句隱式地提交一個事務。當任何DDL事務需要時由ORACLE自動獲取字典封鎖,用戶不能顯式地請求DDL封鎖。在DDL操作期間,被修改或引用的模式對象被封鎖。
l 內部封鎖:保護內部資料庫和內存結構,這些結構對用戶是不可見的。

⑹ mysql數據遷移達夢資料庫違反表的唯一性約束

摘要 MySQL是一個關系型資料庫管理系統,由瑞典MySQL AB 公司開發,屬於 Oracle 旗下產品。MySQL 是最流行的關系型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系資料庫管理系統) 應用軟體之一。

⑺ 如何將 Access 資料庫轉換到 SQL Server

ACCESS2000文件

用ACCESS2007打開,並遷移到SQLSERVER2005里

打開ACCESS2007的資料庫工具

方法一:使用ACCESS2007自帶的資料庫遷移工具

1、打開ACCESS2007的資料庫遷移向導

2、點擊SQLSERVER按鈕,彈出升遷向導對話框

3、選擇新建資料庫

4、輸入計算機名,我的本地計算機名字叫joe,因為SQLSERVER安裝在本地,所以選擇使用可信連接就可以了

資料庫名稱默認就可以了

5、選擇所有表,移動到右邊框

6、把表索引也一起升遷到SQLSERVER里

7、由於沒有應用程序,這一步可以直接跳過

8、點擊完成按鈕開始遷移資料庫到SQLSERVER

9、開始遷移

10、刷新一下SQLSERVER2005里的對象資源管理器里的資料庫

遷移到SQLSERVER之後,SQLSERVER會自動在ACCESS資料庫的名稱後加SQL這三個字母

11、打開LygSQL中的某個數據表,看是否遷移成功

12、表約束也完整遷移成功

方法二:使用SQLSERVER2005自帶的數據導入導出向導

限制:SQLSERVER2005自帶的數據導入導出向導工具只支持ACCESS2003或以下文件

1、在SQLSERVER里新建一個與ACCESS資料庫同名的資料庫Lygl

2、選中Lygl資料庫,然後按右鍵—》任務-》導入數據

3、打開SQLSERVER導入導出向導

4、下一步

提示:如果ACCESS資料庫有密碼的話,點擊下一步會出錯,所以在點擊下一步之前請先去除ACCESS資料庫的密碼!

5、點擊下一步

6、再點擊下一步

7、再點擊下一步

勾選第一個方框就可以了,SQLSERVER會自動幫你勾選ACCESS資料庫中的所有表格

8、點擊下一步

9、最後點擊完成按鈕

10、刷新一下SQLSERVER對象資源管理器里的資料庫

11、打開表

數據都導入進來了

但是表約束沒有導入進來,這個比ACCESS自帶的資料庫遷移向導差了一點

⑻ 把表格導入SQL資料庫時出現這個約束問題,該怎麼解決

把約束drop掉就好了