Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

replikasi antara dua tabel dengan nama yang berbeda dan yang memiliki nama kolom yang berbeda. Apakah mungkin untuk membuat replikasi seperti itu?

Rupanya, jawabannya adalah:"Ketika Anda mendefinisikan artikel, Anda harus mengatur @vertical_partition parameter ke true lalu tambahkan kolom yang Anda inginkan dengan sp_articlecolumn ."

Namun, saya harus bertanya mengapa Anda melakukan ini. Replikasi dalam pikiran saya bukanlah alat umum untuk memindahkan data di antara basis data yang berbeda, tetapi untuk menjaga dua basis data yang identik tetap sinkron.

Ide brainstorming lainnya:

  • Anda dapat membuat tabel sumber baru yang cocok dengan tabel tujuan, dan menggunakan pemicu agar tabel sumber tetap sinkron.
  • Dorong tabel sumber secara utuh ke tujuan dan lakukan MERGE di database tujuan.
  • Replikasi mungkin bukan solusi yang tepat, di sini. Apa aturan &persyaratan bisnis yang meminta hal ini dilakukan? Sudahkah Anda mempertimbangkan untuk menggunakan SSIS?
  • Jika ada kebutuhan untuk kedua tabel dalam sinkronisasi yang tepat sepanjang waktu, lalu apa saluran perubahan ke tabel sumber--sebuah aplikasi? Sepertinya aplikasi Anda membutuhkan tingkat abstraksi baru, lapisan penulisan data yang tahu cara menulis ke dua sumber secara bersamaan.

Mencoba untuk menyinkronkan data antara dua database yang berbeda bisa menjadi masalah. Mungkin ada segala macam masalah halus dengan kondisi balapan, kurangnya transaksi terdistribusi (mempengaruhi konsistensi dan respons terhadap kegagalan), masalah dengan solusi yang dibuat untuk menangani transaksi yang tidak terdistribusi, dan seterusnya dan seterusnya. Bisakah Anda membuat server tertaut dan beberapa tampilan yang benar-benar membuat data dalam satu database diakses secara real-time dari database lainnya?

Beri tahu kami lebih lanjut tentang persyaratan Anda dan mengapa Anda perlu melakukan ini.

Perbarui

Jika Anda menggunakan rute pembaruan manual, perhatikan bahwa Anda tidak dapat menerapkan operasi penyisipan, pembaruan, dan penghapusan periode waktu secara massal. Anda harus menerapkannya satu per satu, secara berurutan . Jika Anda malah bekerja dengan status saat ini daripada operasi data perantara, maka Anda dapat melakukan semua baris sekaligus. Saya akan menunjukkan kepada Anda contoh MERGE, bukan yang riwayat-pemutaran.

BEGIN TRAN;

DELETE D
FROM LinkedServer.dbo.Dest D WITH (TABLOCKX, HOLDLOCK)
WHERE
   NOT EXISTS (
      SELECT *
      FROM Source S
      WHERE D.Key = S.Key
   );

UPDATE D
SET
   D.Col1 = S.Col4,
   D.Col2 = S.Col5,
   D.Col3 = S.Col6,
   D.Col4 = S.Col7,
FROM
   LinkedServer.dbo.Dest D
   INNER JOIN Source S ON D.Key = S.Key
WHERE
   D.Col1 <> S.Col4
   OR EXISTS (
      SELECT D.Col2, D.Col4
      EXCEPT
      SELECT S.Col3, S.Col6
   ); -- or some other way to handle comparison of nullable columns

INSERT LinkedServer.dbo.Dest (Col1, Col2, Col3)
SELECT Col4, Col5, Col6
FROM Source S WITH (TABLOCK, HOLDLOCK)
WHERE
   NOT EXISTS (
      SELECT *
      FROM LinkedServer.dbo.Dest D
      WHERE S.Key = D.Key
   );

COMMIT TRAN;

Anda mungkin merasa lebih baik untuk mendorong seluruh tabel dan melakukan operasi penggabungan pada server tujuan.

Petunjuk kunci yang saya masukkan pada kueri pertama adalah penting jika Anda ingin memiliki snapshot point-in-time yang konsisten. Jika Anda tidak peduli tentang itu, maka keluarkan petunjuk pengunciannya.

Jika Anda menemukan bahwa pembaruan di seluruh server tertaut lambat, maka dorong seluruh tabel secara utuh ke tabel staging sementara di server jauh, dan lakukan MERGE dalam skrip sepenuhnya di server jauh.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat Unique Constraint pada Kolom untuk Tabel yang sudah ada - Tutorial SQL Server / TSQL Part 97

  2. Cara terbaik untuk melakukan logika pernyataan kasus bersarang di SQL Server

  3. Menyimpan HTML di SQL Server

  4. Menemukan Batasan Kunci Utama dengan cepat di SQL Server 2005

  5. Masalah izin di SSMS:Izin SELECT ditolak pada objek 'extended_properties', database 'mssqlsystem_resource', ... Kesalahan 229)