web-dev-qa-db-ja.com

T-SQLスクリプトを使用してSQL Server 2008の特定のテーブルのバックアップを取得する方法

データベースの.bakファイルにある特定のテーブルのバックアップを取りたいのですが、これらはすべてT-SQLスクリプトを使用して実行する必要があります。

15
Firoz Tennali

バックアップの種類は、SQL Server復旧モデルに依存しています。すべての復旧モデルでは、SQL Serverデータベースの全体または一部、またはデータベースの個々のファイルまたはファイルグループをバックアップできます。テーブルレベルのバックアップは作成できません。そのようなオプションはありません。しかし、これには回避策があります

SQL Serverで可能なSQL Serverテーブルのバックアップを取る。 SQL SQL Serverでテーブルをバックアップするには、さまざまな代替方法があります

  1. BCP(一括コピープログラム)
  2. データを含むテーブルスクリプトを生成する
  3. SELECT INTOを使用してテーブルのコピーを作成する
  4. フラットファイルにテーブルデータを直接保存する
  5. SSISを使用して任意の宛先にデータをエクスポートする

ここでは、あなたが知っているかもしれない最初の休息だけを説明しています

方法1 – BCPを使用してSQLテーブルをバックアップ(一括コピープログラム)

SQL Server AdventureWorksにある "Person.Contact"という名前のSQLテーブルをバックアップするには、次のスクリプトを実行する必要があります。

-- SQL Table Backup
-- Developed by DBATAG, www.DBATAG.com
DECLARE @table VARCHAR(128),
@file VARCHAR(255),
@cmd VARCHAR(512)
SET @table = 'AdventureWorks.Person.Contact' --  Table Name which you want    to backup
SET @file = 'C:\MSSQL\Backup\' + @table + '_' + CONVERT(CHAR(8), GETDATE(), 112) --  Replace C:\MSSQL\Backup\ to destination dir where you want to place table data backup
+ '.dat'
SET @cmd = 'bcp ' + @table + ' out ' + @file + ' -n -T '
EXEC master..xp_cmdshell @cmd

[〜#〜]出力[〜#〜]

enter image description here

注意 -

  1. 一括インポート/エクスポート権限が必要です
  2. 上記のスクリプトでは、-nはネイティブSQLデータ型を示します。これは、復元中に重要
  3. -Tは、SQL Server認証を使用して接続する場合に、Windows認証を使用してSQL Serverに接続していることを示します-U -P
  4. これにより、データ転送の速度がわかります。私の場合、これは1秒あたり212468.08行でした。
  5. このコマンドが完了すると、「AdventureWorks.Person.Contact_20120222」という名前のファイルが作成され、指定された宛先フォルダーになります

または、コマンドプロンプトでBCPを実行し、コマンドプロンプトで次のコマンドを入力できます。どちらの操作でも同じアクティビティが実行されますが、コマンドプロンプトを開いてタイプを保存するため、上記の方法が好きです。タイプ。

bcp AdventureWorks.Person.Contact out C:\MSSQL\Backup\AdventureWorks.Person.Contact_20120222.dat -n -T

enter image description here

11
Tufan Chand

方法1:

テーブル内のデータと、同じデータベースおよびサーバー内でローカルに使用されるデータのみに関心がある場合は、以下のクエリを使用して、選択したテーブルのバックアップを作成できます。

SELECT * INTO newtable1
FROM originalTable1

---表2の場合

SELECT * INTO newtable2
FROM originalTable2

など... n個のテーブルに対して

このステートメントは、newtable1、newtable1、..と呼ばれるテーブルを作成するため、事前に作成する必要はありません。

注*この方法では、バックアップが非常に高速になりますが、主な欠点は、テーブルのキー、インデックス、および制約が引き継がれず、バックアップがファイルの外部ではなくデータベース内に保存されることです。

方法2:

災害復旧ソリューションまたはデータ損失防止のためにテーブルを他のサーバーにバックアップする場合は、タスクの[スクリプトの生成]オプションを使用してテーブルをスクリプト化できます。

  1. まず、バックアップするテーブルを含むデータベースを右クリックし、[タスク]-> [スクリプトの生成]を選択します。

  2. テーブルをバックアップする必要があるリストからデータベースを選択します

  3. 次に表示される画面はスクリプトオプションです。

  4. テーブル/表示オプションが表示されるまで、スクリプトオプションを下にスクロールします。制約、スクリプトデータ、外部キー、主キー、トリガー、一意のキーを確認します。 (またはもちろん、必要なものは何でも選択できます)。 [次へ]を選択すると、[オブジェクトタイプの選択]画面が表示されます

  5. テーブルを選択し、次にヒットします。最後に、バックアップするテーブルを選択して、次にヒットします

方法3:

テーブルのバックアップにも bcpユーティリティ を使用できます。

9
KASQLDBA

SSMSの一括エクスポート機能を使用する ここ は、言及されている最良かつ最も簡単な方法です

SQL Serverインポートおよびエクスポートウィザード:SQL Serverインポートおよびエクスポートウィザードは、SQL Server Integration Services(SSIS)パッケージにグラフィカルユーザーインターフェイスを提供します。作成されたパッケージは、スケジュールに従って実行するために自動化できます。 SQL Serverデータツール(SSDT)を使用して、さらに構成および変更できます。

まず、インポートとエクスポートウィザードを開き、データベースを右クリックして、[タスク]サブメニュー-> [データのエクスポート]コマンドを選択します。

enter image description here

1
Sayyed Dawood

特定のテーブルを.bakファイルにバックアップすることはできません。テーブルをcsvにエクスポートするか、それらをスクリプト化するか、bcpを使用してファイルに格納することができます。

特定のテーブルをバックアップしたい場合(そして常に同じである場合)に実行できることは、それらを別のfile groupに移動し、そのファイルグループをバックアップすることです。

ドキュメントについては ファイルとファイルグループのバックアップ を参照してください。

たとえば、T-SQLを使用して特定のファイルまたはファイルグループをバックアップする場合は、(リンクから)使用できます。

--Back up the files in SalesGroup1.
BACKUP DATABASE Sales
   FILEGROUP = 'SalesGroup1',
   FILEGROUP = 'SalesGroup2'
   TO DISK = 'C:\MySQLServer\Backups\Sales\SalesFiles.bck';
GO

そして

--Backup the files in the SalesGroup1 secondary filegroup.
BACKUP DATABASE Sales
   FILE = 'SGrp1Fi2', 
   FILE = 'SGrp2Fi2' 
   TO DISK = 'G:\SQL Server Backups\Sales\SalesGroup1.bck';
GO

KASQLDBAの応答から方法1を基にして:

テーブルのバックアップコピーを保持する別のデータベースを作成します。 KASQLDBAが提供するクエリを変更して、元のテーブルから選択して代替データベースにコピーするようにします。

SELECT * INTO MyNewDatabase.dbo.newtable1
FROM OriginalDatabase.dbo.originalTable1

--- For table 2
SELECT * INTO MyNewDatabase.dbo.newtable2
FROM OriginalDatabase.dbo.originalTable2

新しいデータベースにテーブルを削除するスクリプトを作成し、必要なすべてのテーブルに対してselect intoコマンドを実行できます。インデックスやその他のオブジェクトを使用可能にしたい場合は、それらを新しいデータベースに構築し、テーブルを切り捨ててから、データを再設定します。切り捨てが必要な場合は、select intoの代わりにinsertステートメントを使用する必要があります。

このオプションは、.BAKファイルを作成する方法を提供します。新しいデータベースのテーブルにデータを入力した後で、データベースのバックアップコマンドを実行するだけです。

1
Gary