Topik ini menjelaskan metode untuk mengimpor beberapa data ke instance ApsaraDB RDS for SQL Server sekaligus. Metode impor meliputi fitur impor data Database Management (DBS), utilitas bcp, SQLServerBulkCopy untuk Java Database Connectivity (JDBC), dan ADO.NET SQLBulkCopy.
Perhatikan hal-hal berikut:
Sebelum melakukan operasi berisiko tinggi seperti memodifikasi konfigurasi atau data instance Alibaba Cloud, pastikan untuk memeriksa kemampuan pemulihan bencana dan toleransi kesalahan instance guna memastikan keamanan data.
Sebelum memodifikasi konfigurasi atau data instance, seperti instance Elastic Compute Service (ECS) atau instance RDS, buat snapshot atau aktifkan pencadangan untuk instance tersebut. Sebagai contoh, Anda dapat mengaktifkan pencadangan log untuk instance RDS.
Jika memberikan izin pada informasi sensitif atau mengirimkan informasi sensitif di Konsol Manajemen Alibaba Cloud, modifikasi informasi sensitif tersebut sesegera mungkin. Informasi sensitif mencakup nama pengguna dan kata sandi.
Catatan Penggunaan
ApsaraDB RDS for SQL Server mendukung pernyataan BULK INSERT untuk mengimpor beberapa data sekaligus. Namun, jika menggunakan instance RDS yang menjalankan SQL Server 2008 R2, terdapat bug. Untuk mencegah bug ini, aktifkan CHECK constraints saat menjalankan pernyataan tersebut. Untuk informasi lebih lanjut, lihat Mengontrol Pemeriksaan Constraint oleh Operasi Impor Massal.
Metode untuk mengaktifkan CHECK constraints bervariasi berdasarkan metode impor.
Jika menggunakan utilitas bcp, sertakan
/h "CHECK_CONSTRAINTS"dalam perintah yang diperlukan.Jika menggunakan kelas
SQLServerBulkCopyuntuk driver JDBC, tentukansetCheckConstraints(true)dalamSQLServerBulkCopyOptions.Jika menggunakan kelas
SqlBulkCopydalam framework ADO.NET, tentukanSqlBulkCopyOptions.CheckConstraintsdalam fungsi konstruktor.
Metode 1: Gunakan fitur impor data DMS
Gunakan fitur impor data DMS untuk mengimpor beberapa file data ke instance RDS for SQL Server Anda sekaligus. Hanya skrip SQL, file CSV, atau file Excel yang dapat diimpor menggunakan metode ini.
Metode 2: Gunakan utilitas bcp
Gunakan utilitas bcp untuk menghasilkan file XML dan gunakan file tersebut untuk mengimpor beberapa file data ke instance RDS Anda sekaligus.
Jalankan perintah berikut untuk menghasilkan file XML:
bcp [Nama Database].[Arsitektur].Nama Tabel format nul /c /t"," /x /f "Path\File XML.xml" /U Nama Pengguna /P Kata Sandi /S "Alamat Server,Port"Contoh perintah:
bcp jacky.dbo.my_bcp_test format nul /c /t"," /x /f "d:\tmp\my_bcp_test.xml" /U jacky /P xxxx /S "xxx.sqlserver.rds.aliyuncs.com,3333"Jalankan perintah berikut untuk mengimpor data:
bcp [Nama Database].[Arsitektur].Nama Tabel in "Path ke file data" /f "Path ke file XML yang dihasilkan" /q /k /h "CHECK_CONSTRAINTS" /U Nama Pengguna /P Kata Sandi /S "Alamat Server,Port"Contoh perintah:
bcp jacky.dbo.my_bcp_test in "d:\tmp\my_test_data_file.txt" /f "d:\tmp\my_bcp_test.xml" /q /k /h "CHECK_CONSTRAINTS" /U jacky /P xxx /S "rm-bp1sc****.sqlserver.rds.aliyuncs.com, 1433"
Metode 3: Gunakan JDBC SQLServerBulkCopy
Gunakan kelas SQLServerBulkCopy untuk mengimpor beberapa data sekaligus.
SQLServerBulkCopyOptions copyOptions = new SQLServerBulkCopyOptions();
copyOptions.setCheckConstraints(true);Untuk informasi lebih lanjut, lihat Menggunakan salinan massal dengan driver JDBC.
Metode 4: Gunakan ADO.NET SQLBulkCopy
Gunakan kelas SQLServerBulkCopy dalam framework ADO.NET untuk mengimpor beberapa data sekaligus.
static void Main()
{
string srcConnString = "Data Source=(local);Integrated Security=true;Initial Catalog=testdb";
string desConnString = "Data Source=****.sqlserver.rds.aliyuncs.com,3433;User ID=**;Password=**;Initial Catalog=testdb";
SqlConnection srcConnection = new SqlConnection();
SqlConnection desConnection = new SqlConnection();
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
DataTable dt = new DataTable();
srcConnection.ConnectionString = srcConnString;
desConnection.ConnectionString = desConnString;
sqlcmd.Connection = srcConnection;
sqlcmd.CommandText = @"SELECT top 1000000 [PersonType],[NameStyle],[Title],[FirstName],[MiddleName],[LastName],[Suffix],[EmailPromotion]
,[AdditionalContactInfo],[Demographics],NULL as rowguid,[ModifiedDate] FROM [testdb].[dbo].[Person]";
sqlcmd.CommandType = CommandType.Text;
sqlcmd.Connection.Open();
da.SelectCommand = sqlcmd;
da.Fill(dt);
using (SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString, SqlBulkCopyOptions.CheckConstraints))
//using (SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString, SqlBulkCopyOptions.Default))
{
blkcpy.BatchSize = 2000;
blkcpy.BulkCopyTimeout = 5000;
blkcpy.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
blkcpy.NotifyAfter = 2000;
foreach (DataColumn dc in dt.Columns)
{
blkcpy.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
}
try
{
blkcpy.DestinationTableName = "Person";
blkcpy.WriteToServer(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
sqlcmd.Clone();
srcConnection.Close();
desConnection.Close();
}
}
}
private static void OnSqlRowsCopied(
object sender, SqlRowsCopiedEventArgs e)
{
Console.WriteLine("Copied {0} so far...", e.RowsCopied);
}Referensi
Ruang Lingkup Aplikasi
ApsaraDB RDS for SQL Server