数据库迁移:从SQL2005到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,不知道是不是跟这个有关系。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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