ホームページ データベース mysql チュートリアル 数据库迁移:从SQL2005到SQL2008

数据库迁移:从SQL2005到SQL2008

Jun 07, 2016 pm 03:30 PM
sql2008 データベース 移行する トイレ

最近我们网站新增了一台数据库服务器,需要将现有的主要数据库迁移到新服务器上。 现有的这台数据库服务器装的是SQL2005。考虑到SQL2008已经出来很久了,想必已经比较成熟,功能又比2005强,据说2005是个过渡产品,趁现在是台全新的服务器,索性安装SQL 2008

最近我们网站新增了一台数据库服务器,需要将现有的主要数据库迁移到新服务器上。


现有的这台数据库服务器装的是SQL2005。考虑到SQL2008已经出来很久了,想必已经比较成熟,功能又比2005强,据说2005是个过渡产品,趁现在是台全新的服务器,索性安装SQL 2008,不然以后再升级可能更麻烦。


2008肯定可以兼容2005,问题是,我们除了这台主数据库,还有好几台辅助用的数据库,它们全都是2005,并且要使用主数据库的部分数据。现在主数据库升级为2008,其他的还能正常使用吗?


花了一些时间进行测试,发现2005和2008可以协同使用。除了用2005的SQL Server Management Studio去连2008不行以外,其他并没有什么问题,程序没问题,链接服务器(2005连2008)也没有什么问题。


现在是怎么个迁移法?


我想到的有两种方案:第一是备份数据库,然后在新服务器还原;第二是停掉数据库,直接拷贝数据文件到新服务器,然后在新服务器附加。


因为数据库文件太多太大了,备份还原显然不现实,耗时太长。第二种主要是附加的时候,原先各种数据文件放得很乱,没有什么章法,可能附加的时候要稍为改一下路径。


无论是备份还原还是附加数据库,都有个问题,就是原先的数据库用户怎么办?比如权限、密码等等。我们的权限甚至细分到每个表的每个字段,如果手动重新建一遍,即使没有遗漏也会累死。


用脚本搞定:
1、    脚本一,建立登录名

CREATE LOGIN [ 登录名 ] WITH PASSWORD = N' 密码 ' , DEFAULT_DATABASE = [ 默认数据库 ], DEFAULT_LANGUAGE = [ 简体中文 ], CHECK_EXPIRATION = OFF , CHECK_POLICY = OFF

GO

 


用SQL Server Management Studio创建的这个脚本,里面的密码加了密,结果跑到目标服务器运行之后,用原先的密码登录根本不行。也不知道怎么处理,所以要手动将脚本这里的密码改成明文。
另外,用SQL Server Management Studio创建的脚本,后面还有一句:

 

ALTER LOGIN [ 登录名 ] DISABLE

 


会自动将该登录帐号设为禁用!不知道是何居心!所以这句也要去掉。


2、    脚本二,将数据库用户映射到登录名
主要语句是
EXEC sp_change_users_login 'update_one' , [ 数据库用户名 ],[ 登录名 ];


因为我们数据库用户比较多,所以写了个游标

use [myDb]

go

 

DECLARE curT CURSOR FOR SELECT Name FROM sysusers WHERE Name LIKE 'myUser%' ;

DECLARE @User VARCHAR ( 50);

 

OPEN curT ;

FETCH NEXT FROM curT INTO @User ;

WHILE @@FETCH_STATUS = 0

BEGIN

    EXEC sp_change_users_login 'update_one' , @User , @User ;

    FETCH NEXT FROM curT INTO @User ;

END

CLOSE curT ;

DEALLOCATE curT ;


更新全过程:
1、    机器买回来,装操作系统,装SQL2008
2、    机器送到机房,上架
3、    挑一个良辰吉日,夜半无人,停掉网站,停掉主数据库
4、    拷贝数据库文件到新服务器
5、    在新服务器附加数据库文件
6、    依次运行脚本1、2
7、    开网站,OK


后记
切换成功以后,我陆续在一些辅助数据库服务器上升级SQL2005到SQL2008。第一台,数据量不大,访问很少,升级成功,没什么问题;第二台,因为访问量非常大,结果失败,整个数据库引擎和实例都没有了!提示什么文件或卷标名错误!只好卸载所有的SQL,然后直接装SQL2008,幸好数据库文件还在,没出什么乱子。

另外,将SQL2005升级到SQL2008,数据库是停止工作的,我后来才发现,不是什么在线。

 

再有就是作业的迁移。从老数据库中生成作业脚本,粘贴到新数据库中运行。有些不成功,提示:


不能将值 NULL 插入列 'owner_sid',表 'msdb.dbo.sysjobs';列不允许有 Null 值。INSERT 失败。


这是因为作业的所有者不同所致。比如,老数据库中作业的所有者,在新数据库中不存在,就会出现这种错误。换成sa一般都可以。

 

注:安装SQL2008的时候,需要先安装.NET FrameWork 3.5。我们机器全都装了3.5,上面的SQL2005能访问2008,不知道是不是跟这个有关系。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WeChat のチャット履歴を新しい電話に移行する方法 WeChat のチャット履歴を新しい電話に移行する方法 Mar 26, 2024 pm 04:48 PM

1. 古いデバイスで WeChat アプリを開き、右下の [自分] をクリックし、[設定] 機能を選択して、[チャット] をクリックします。 2. [チャット履歴の移行とバックアップ]を選択し、[移行]をクリックして、デバイスを移行するプラットフォームを選択します。 3. [移行するチャットを選択] をクリックするか、左下の [すべて選択] をクリックするか、チャット記録を自分で選択します。 4. 選択後、右下隅の [開始] をクリックして、新しいデバイスを使用してこの WeChat アカウントにログインします。 5. 次に QR コードをスキャンしてチャット レコードの移行を開始し、ユーザーは移行が完了するまで待つだけです。

Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Mar 27, 2024 pm 09:39 PM

Go 言語は、効率的かつ簡潔で習得が容易なプログラミング言語であり、同時プログラミングやネットワーク プログラミングに優れているため、開発者に好まれています。実際の開発ではデータベースの操作が欠かせませんが、今回はGo言語を使ってデータベースの追加・削除・変更・クエリ操作を実装する方法を紹介します。 Go 言語では、データベースを操作するために通常、よく使用される SQL パッケージや gorm などのサードパーティ ライブラリを使用します。ここでは SQL パッケージを例として、データベースの追加、削除、変更、クエリ操作を実装する方法を紹介します。 MySQL データベースを使用していると仮定します。

Hibernate はポリモーフィック マッピングをどのように実装しますか? Hibernate はポリモーフィック マッピングをどのように実装しますか? Apr 17, 2024 pm 12:09 PM

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

WeChatのチャット履歴を別の携帯電話に転送する方法 WeChatのチャット履歴を別の携帯電話に転送する方法 May 08, 2024 am 11:20 AM

1. 旧端末で「自分」→「設定」→「チャット」→「チャット履歴の移行とバックアップ」→「移行」をクリックします。 2. 移行するターゲットプラットフォームデバイスを選択し、移行するチャットレコードを選択して、「開始」をクリックします。 3. 新しいデバイスで同じ WeChat アカウントでログインし、QR コードをスキャンしてチャット履歴の移行を開始します。

C++ によるクラウドのモダナイゼーション: レガシー アプリケーションのクラウドへの移行 C++ によるクラウドのモダナイゼーション: レガシー アプリケーションのクラウドへの移行 Jun 01, 2024 am 09:21 AM

レガシー C++ アプリケーションをクラウドに移行する最良の方法: 再プラットフォーム化: アプリケーション コードをクラウド ネイティブ プラットフォーム (Kubernetes など) に移行し、クラウド サービスを利用します。クラウド化: コードのリファクタリングを行わずに、アプリケーションをクラウド プラットフォームにデプロイし、クラウド サービスを利用します。

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

WeChatのチャット履歴を別の電話に転送する方法 WeChatのチャット履歴を別の電話に転送する方法 Mar 26, 2024 pm 04:50 PM

古いデバイスで WeChat を開き、[チャット履歴の移行とバックアップ] を選択し、指示に従うことで、ユーザーはチャット履歴を新しいデバイスに移行できます。移行プロセスには、移行する必要があるチャットの選択、QR コードのスキャン、移行が完了するのを待つことが含まれます。

See all articles