Ⅰ 如何把高版本的sqlserver 還原到低版本的 sqlserver
是否大家有遇到過開始使用高版本的sql server當部署時卻被告知伺服器環境只能使用當前低版本的sql server,我就遇到了,我開發時使用的是sql 2008 r2 到部署時被告之段時間內不能升級到r2,只要將就部署了 。 但高版本遷移到低版本普通方法是行不通的,
1.我直接在sql2008附加sql2008r2的資料庫,結果 「版本為 661,無法打開。此伺服器支持 655 版及更低版本。不支持降級路徑。」 死路一條,呵呵。
2.在sql2008里建立新資料庫,然後通過復制數據方法,結果「 LiveUpdate returned a non-critical error. Available content updates may have failed to install.」 又是死路一條。
3.用資料庫鏡像,結果「由於資料庫可能有尚未備份的大容量日誌記錄更改,所以無法啟用資料庫鏡像。必須在鏡像上還原主體資料庫的上一次日誌備份。」意思是你不需要去還原,又是死路一條 4.用用導入導出的功能吧。 這個方法關鍵是如何確保保留原有表結構的主鍵、外鍵等 分兩個情況,對於資料庫數據量小的,可以很方便的解決 a.小數據的情況 1.先在低版本的伺服器上建立同名的資料庫。 2.在高版本的伺服器上右鍵點擊目標資料庫->任務->生成腳本 3.在選擇對象->選擇特定資料庫對象 4.選擇表、視圖、存儲過程,然後下一步 5.關鍵在這,這一步里,請選擇」高級「,選項里選擇[編寫DROP和Create腳本]項的」編寫DROP和Create腳本「,以及[編寫腳本和數據類型]項的「架構和數據" 6.保存腳本 7.在低版本的資料庫下執行腳本即可。 b.大數據情況 按理應該也可以通過類似包含架構和數據的方式來做,但是由於包含大數據的時候腳本文件太大,無法在分析器里執行,所以我們得繞一下。 1~4步和a情況相同 5.這步我們選擇」高級「,選項里選擇[編寫DROP和Create腳本]項的」編寫DROP和Create腳本「,以及[編寫腳本和數據類型]項的「架構" 6.保存腳本 7.在低版本的數據下執行腳本,注意(ALTER TABLE 表名 WITH CHECK ADD CONSTRAINT [外鍵名] FOREIGN KEY(欄位) REFERENCES 表名(欄位))這個先不要執行。 8.現在可以通過導入導出任務先將表的內容導入到低版本的資料庫內 9.再執行腳本內(ALTER TABLE 表名 WITH CHECK ADD CONSTRAINT [外鍵名] FOREIGN KEY(欄位) REFERENCES 表名(欄位))這樣的語句,此處將表的外鍵附加上。 10.。。大功告成
Ⅱ 為什麼sql server 高版本的資料庫不能附加低版本 mdf文件
是這樣的,662是SQL Server 2008 SP2以後的資料庫版本號,SP2之前的SQL Server 2008 x0dx0a的資料庫版本好是655,而661是SQL Server 2008 R2的資料庫版本號,本身SQL Server 2008 R2的版本要比SQL Server 2008 要高,按常理661版的資料庫文件是不能附加到支持655版本號的SQL Server 2008里的。至於出現這個蛋疼的提示是因為微軟在SQL Server 2008 SP2里加入了15k分區數的功能,而發布SP2之前就已經發布了SQL Server 2008 R2了,由於SQL Server 2008 R2 RTM並不支持15k分區的功能,如果按常規SQL Server 2008還保持655的版本號的話就可能會出現附加15k分區的數據文件到SQL Server x0dx0a2008 R2 RTM中,這肯定是不能附加的,所以微軟為了解決這個難題,就打破常規,SQL Server 2008 SP2里將資料庫的版本號改為662,這樣,由SQL Server 2008 R2 RTM的資料庫版本號比SQL Server 2008 SP2的低,所以自然就不能附加了,避免了麻煩,不過為了一15k分區的功能改變了版本號帶來的副作用就像樓主這種情況了。x0dx0a這時問題的根本緣由。x0dx0a其實說白了,你是拿SQL Server 2008 R2的資料庫附加到SQL Server 2008中,這肯定是不行的。要麼將你現在的資料庫實例升級到 SQL Server 2008 R2並安裝最新的SP補丁之後再附加。要麼將chat資料庫附加到SQL Server 2008 R2版的資料庫實例里,生成SQL Server 2008版的腳本文件,使用腳本文件部署到SQL Server 2008 SP2里。x0dx0ax0dx0a至於前邊有朋友說用備份的方式,如果理解了我前邊說的就知道肯定也是行不通的。
Ⅲ sql高版本附加到低版本怎麼辦
不行的,普遍規律,低版本DBMS創建的資料庫可以附加到高版本DBMS中,而高版本DBMS創建的資料庫附加到低版本DBMS中提示出錯,版本不夠。
Ⅳ sql高版本向低版本附加報錯,誰能提供解決的方法呀
SQL 只支持向後兼容,
所以高版本的資料庫不能在低版本的SQL 上附加。
解決辦法:先在同版本SQL下附加資料庫,
在使用SQL 腳本導出表結構與資料庫,
或存儲過程等,再在低版本資料庫上創建一個新資料庫,
把腳本執行。
Ⅳ 如何將高版本mysql資料庫的數據導入低版本mysql中
mysqlmp可以導出純sql文本,但是有些建表語句的參數名在高低版本中是不一樣的,
比如說在mysql4.*中的引擎指定用type,而mysql5.5的時候就用engine,
可以先把備份的sql文件先導到5.0左右的,會有警告,但是能導成功,然後再從5.0中導出sql文件,最後遷移到5.5的
建議是在數據遷移的時候版本差距別太大,有可能會出現版本兼容問題。
Ⅵ 如何把SQL Server資料庫從高版本降級到低版本
由於目前還廣泛使用著SQLServer2000,很多公司又想使用新的SQLServer,從而直接【分離/附加】或者【備份/還原】資料庫,在
不同版本之間存放。往往就會遇到版本不兼容的問題。前幾天遇到了從我本機2008R2上備份的一個資料庫還原到2008上面時報錯:
從
運行版本10.50.2500(2008R2是10.50)和10.00.1600(2008是10.00)中可以看出這個版本不兼容問題,大部分情況
下,從低版本升級到高版本,只要不是跨度太大,如2000升級到2012,都不會怎麼報錯。除非使用了一些新版本不兼容的特性如*=來實現left
join的語句。但是就像上圖那樣,從高版本還原到低版本的時候,問題就出現了,而且幾乎一定會報錯。
下面給出幾個小建議,例子是從2008 降級到2005:
方法一:使用圖形化操作(GUI),打開SSMS(SQL Server Management Studio)
步驟1:右鍵你要降級的資料庫,按下圖選擇:
步驟2:在對話框中選擇:
步驟3:在【高級】中選擇下圖:
步驟4:把腳本保存起來,然後在SQLServer2005中運行腳本。
詳細步驟可以看: 中的13樓的回復,有截圖
步驟5:通過【任務】→【導入數據】,把數據從2008導入到使用腳本創建的庫上如下圖,就完成了:
方法二:使用系統自帶的存儲過程實現:sp_dbcmptlevel ——將某些資料庫行為設置為與指定的 SQL Server 版本兼容
下面是其內部實現代碼:
[sql] view plain print?
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
create procere sys.sp_dbcmptlevel -- 1997/04/15
@dbname sysname = NULL, -- database name to change
@new_cmptlevel tinyint = NULL OUTPUT -- the new compatibility level to change to
as
set nocount on
declare @exec_stmt nvarchar(max)
declare @returncode int
declare @comptlevel float(8)
declare @dbid int -- dbid of the database
declare @dbsid varbinary(85) -- id of the owner of the database
declare @orig_cmptlevel tinyint -- original compatibility level
declare @input_cmptlevel tinyint -- compatibility level passed in by user
,@cmptlvl80 tinyint -- compatibility to SQL Server Version 8.0
,@cmptlvl90 tinyint -- compatibility to SQL Server Version 9.0
,@cmptlvl100 tinyint -- compatibility to SQL Server Version 10.0
select @cmptlvl80 = 80,
@cmptlvl90 = 90,
@cmptlvl100 = 100
-- SP MUST BE CALLED AT ADHOC LEVEL --
if (@@nestlevel > 1)
begin
raiserror(15432,-1,-1,'sys.sp_dbcmptlevel')
return (1)
end
-- If no @dbname given, just list the valid compatibility level values.
if @dbname is null
begin
raiserror (15048, -1, -1, @cmptlvl80, @cmptlvl90, @cmptlvl100)
return (0)
end
-- Verify the database name and get info
select @dbid = dbid, @dbsid = sid ,@orig_cmptlevel = cmptlevel
from master.dbo.sysdatabases
where name = @dbname
-- If @dbname not found, say so and list the databases.
if @dbid is null
begin
raiserror(15010,-1,-1,@dbname)
print ' '
select name as 'Available databases:'
from master.dbo.sysdatabases
return (1)
end
-- Now save the input compatibility level and initialize the return clevel
-- to be the current clevel
select @input_cmptlevel = @new_cmptlevel
select @new_cmptlevel = @orig_cmptlevel
-- If no clevel was supplied, display and output current level.
if @input_cmptlevel is null
begin
raiserror(15054, -1, -1, @orig_cmptlevel)
return(0)
end
-- If invalid clevel given, print usage and return error code
-- 'usage: sp_dbcmptlevel [dbname [, compatibilitylevel]]'
if @input_cmptlevel not in (@cmptlvl80, @cmptlvl90, @cmptlvl100)
begin
raiserror(15416, -1, -1)
print ' '
raiserror (15048, -1, -1, @cmptlvl80, @cmptlvl90, @cmptlvl100)
return (1)
end
-- Only the SA or the dbo of @dbname can execute the update part
-- of this procere sys.so check.
if (not (is_srvrolemember('sysadmin') = 1)) and suser_sid() <> @dbsid
-- ALSO ALLOW db_owner ONLY IF DB REQUESTED IS CURRENT DB
and (@dbid <> db_id() or is_member('db_owner') <> 1)
begin
raiserror(15418,-1,-1)
return (1)
end
-- If we're in a transaction, disallow this since it might make recovery impossible.
set implicit_transactions off
if @@trancount > 0
begin
raiserror(15002,-1,-1,'sys.sp_dbcmptlevel')
return (1)
end
set @exec_stmt = 'ALTER DATABASE ' + quotename(@dbname, '[') + ' SET COMPATIBILITY_LEVEL = ' + cast(@input_cmptlevel as nvarchar(128))
-- Note: database @dbname may not exist anymore
exec(@exec_stmt)
select @new_cmptlevel = @input_cmptlevel
return (0) -- sp_dbcmptlevel
GO
語法
[sql] view plain print?
sp_dbcmptlevel [ [ @dbname = ] name ]
[ , [ @new_cmptlevel = ] version ]
參數
[ @dbname = ] name
要為其更改兼容級別的資料庫的名稱。資料庫名稱必須符合標識符的規則。name 的數據類型為 sysname,默認值為 NULL。
[ @new_cmptlevel = ] version
資料庫要與之兼容的 SQL Server 的版本。version 的數據類型為 tinyint,默認值為 NULL。該值必須為下列值之一:
80 = SQL Server 2000
90 = SQL Server 2005
100 = SQL Server 2008
返回代碼值
0(成功)或 1(失敗)
注意事項:
後續版本的 Microsoft SQL Server 將刪除該功能。請不要在新的開發工作中使用該功能,並盡快修改當前還在使用該功能的應用程序。 改為使用 ALTER DATABASE 兼容級別。
Ⅶ 如何把SQL Server資料庫從高版本降級到低版本
直接給SQL Server資料庫降級是不支持的。但您可以使用一個靈活的變通方法來解決這個問題。您可以使用SQL Server Management Studio中首先為一個較低的版本生成資料庫腳本,然後使用數據導入/導出向導將原來資料庫數據傳輸到高版本資料庫中。例如,如果你想降低一個SQL Server 2008資料庫到SQL Server 2005,您可以按照以下步驟:
1. 在SQL Server Management Studio 2008中打開SQL Server2008資料庫。
2.在對象資源管理器中右鍵單擊資料庫名稱並選擇「任務生成腳本......」
3.在「腳本向導」對話框中,選擇資料庫的名稱,並檢查「腳本所有在選擇資料庫對象」。然後點擊「下一步」。
4.設置為SQL Server2005的伺服器版本的腳本「選項」。
5. SQL Server 2005中運行腳本。
6. 使用SQL Server導入和導出向導從SQL Server 2008到SQL Server 2005導入數據
同樣,如果你想降低一個SQL Server 2005資料庫到SQL Server 2000,你也可以在SQL Server 2005 Management Studio中執行上述步驟。
Ⅷ SqlServer高版本數據備份還原到低版本
最近遇見一個問題:
想要將Sqlserver高版本備份的數據還原到低版本SqlServer上去,但是這在SqlServer中是沒法直接還原資料庫的,所以經過一系列的請教總結出來一下可用方法。
首先、你得在電腦上裝有你將要操作的高版本以及低版本的SqlServer或者你能夠連上SqlServer高版本所在的資料庫(便於後面拷貝數據),
第二步、打開高版本資料庫中你需要備份的資料庫,將你備份的資料庫相關的登錄名或者用戶刪除。右鍵資料庫->任務->生成腳本。在生成腳本的「選擇對象」步驟選擇「編寫整個資料庫及所有資料庫對象的腳本選項」。在生成腳本的「設置腳本編寫選項」的高級中選項中設置「編寫USE
DATABASE
腳本」和「架構限定對象名稱」選項為False並將「伺服器版腳本」選擇為你的低版本的資料庫的版本。生成腳本。
第三步、在你低版本的資料庫中新建資料庫(名稱隨便),打開Sql腳本。將腳本中所有關於原資料庫名稱的操作全部刪除,將資料庫從第一個alter操作分成兩部分,對新建資料庫執行第一部分建表操作。
第四步、右鍵新建的資料庫->任務->導入數據,將數據來源設置為高版本的資料庫,目標設置成當前資料庫。然後選擇復制一個或多個圖表。選擇所有的數據表,然後在「編輯映射」將」啟用標識插入「選上。導入數據
第五步、最後再執行前面分割的第二部分Sql腳本,為資料庫建索引!
Ok.到此高版本SqlServer資料庫在低版本SqlServer中恢復成功
分享第二個案例:
想要將Sqlserver2014高版本備份的數據還原到低版本SqlServer2008R2上去,但是這在SqlServer中是沒法直接還原資料庫的,通過以下方法可以順利還原。
通過高版本生成sql腳本在低版本執行,並且數據也能保留。
步驟:任務—》生成腳本—》
下一步-》高級,選擇資料庫版本和編寫腳本數據類型為架構和數據,可以保留數據。
繼續下一步完成。
最後在低版本的sql資料庫中:
先新建腳本中的資料庫,再實行sql生成表結構和數據。
完美還原成功!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。