İçeriğe geç
IntoSQL ana sayfası

Oracle - SQL Server dönüştürme

SQL Developer'ın Database Export aracının veya SQLcl'in tabloları ve Insert ifadeleriyle yazdığı .sql dosyasını bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir SQL Server betiği indirin. SQL Server'in olduğu gibi tutamadığı her değer ve taşımadığı her nesne raporda listelenir.

Dosyanız
sqlshop_2024_oracle.sqlÖrnek dosya, 9,3 kB
Veritabanınız

18 satır dönüştürüldü, 2 düzeltme, reddedilen yok

Göster

shop_2024_oracle.sql içindeki tablolarOracle dökümü · SQL Developer ile yazıldı · utf-8

  • customers8 satır1
    7 sütun
    idbigint not null
    namenvarchar(200) not null
    emailnvarchar(150) not null
    countrynvarchar(2) not null
    is_activesmallint not null
    signed_updatetime2(0)
    created_atdatetime2(0) not null
  • orders10 satır1
    9 sütun
    idbigint not null
    customer_idbigint not null
    invoicebigint
    statusnvarchar(10) not null
    totaldecimal(10,2) not null
    itemsint not null
    ordered_atdatetime2(0) not null
    shipped_atdatetime2(0)
    notenvarchar(510)
-- Written by IntoSQL from a Oracle dump. Load it with: sqlcmd -b -f 65001 -d <database> -i <file>
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET NUMERIC_ROUNDABORT OFF;
GO

CREATE SEQUENCE [dbo].[invoice_numbers] AS bigint START WITH 1020 INCREMENT BY 1 MINVALUE 1;
GO
CREATE TABLE [dbo].[customers] (
    [id] bigint IDENTITY(1, 1) NOT NULL,
    [name] nvarchar(200) COLLATE Latin1_General_100_BIN2 NOT NULL,
    [email] nvarchar(150) COLLATE Latin1_General_100_BIN2 NOT NULL,
    [country] nvarchar(2) COLLATE Latin1_General_100_BIN2 DEFAULT N'US' NOT NULL,
    [is_active] smallint DEFAULT 1 NOT NULL,
    [signed_up] datetime2(0) NULL,
    [created_at] datetime2(0) DEFAULT SYSDATETIME() NOT NULL,
    CONSTRAINT [check1] CHECK ([is_active] IN (0, 1)),
    CONSTRAINT [PK_customers] PRIMARY KEY ([id])
);
GO

CREATE TABLE [dbo].[orders] (
    [id] bigint IDENTITY(1, 1) NOT NULL,
    [customer_id] bigint NOT NULL,
    [invoice] bigint DEFAULT (NEXT VALUE FOR [dbo].[invoice_numbers]) NULL,
    [status] nvarchar(10) COLLATE Latin1_General_100_BIN2 DEFAULT N'pending' NOT NULL,
    [total] decimal(10,2) NOT NULL,
    [items] int DEFAULT 1 NOT NULL,
    [ordered_at] datetime2(0) NOT NULL,
    [shipped_at] datetime2(0) NULL,
    [note] nvarchar(510) COLLATE Latin1_General_100_BIN2 NULL,
    CONSTRAINT [check1_2] CHECK ([status] IN (N'pending', N'paid', N'shipped', N'cancelled')),
    CONSTRAINT [PK_orders] PRIMARY KEY ([id])
);
GO

SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(1,N'Ana Martínez',N'ana@example.com',N'MX',1,'2023-01-15 00:00:00','2023-01-15 10:24:00.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(2,N'Zoë Müller',N'zoe@example.de',N'DE',1,'2023-02-03 00:00:00','2023-02-03 08:11:42.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(3,N'José Peña',N'jose@example.es',N'ES',0,'2023-03-21 00:00:00','2023-03-21 19:05:17.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(4,N'李雷',N'lilei@example.cn',N'CN',1,'2023-05-09 00:00:00','2023-05-09 02:40:00.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(5,N'Noah O''Brien',N'noah@example.ie',N'IE',1,NULL,'2023-06-30 14:00:00.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(6,N'Amélie Laurent',N'amelie@example.fr',N'FR',1,'2024-01-02 00:00:00','2024-01-02 09:30:00.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(7,N'Ravi Patel',N'ravi@example.in',N'IN',0,'2024-02-29 00:00:00','2024-02-29 23:59:59.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [signed_up], [created_at]) VALUES
(8,N'Sofia Rossi 🌻',N'sofia@example.it',N'IT',1,'2024-04-12 00:00:00','2024-04-12 12:12:12.0000000');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(1,1,1000,N'shipped',129.9,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(2,2,1001,N'paid',54,1,'2024-03-02 11:15:00',NULL,N'Gift wrap 🎁');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(3,1,1002,N'cancelled',12.5,1,'2024-03-03 09:45:00',NULL,N'Customer changed their mind');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(4,4,1003,N'shipped',980,12,'2024-03-05 02:10:00','2024-03-07 08:00:00',N'请小心轻放');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(5,5,1004,N'pending',45.75,2,'2024-03-08 17:20:00',NULL,N'Leave at the door; ring twice');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(6,6,1005,N'shipped',310.4,5,'2024-03-10 13:00:00','2024-03-11 09:00:00',N'Fragile: "glass"');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(7,8,1006,N'paid',76.2,2,'2024-03-11 18:45:00',NULL,NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(8,2,1007,N'paid',19.99,1,'2024-03-12 08:00:00',NULL,N'Paid at the counter');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(9,3,1008,N'shipped',64,2,'2024-03-14 15:30:00',NULL,N'Shipping date never recorded');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [invoice], [status], [total], [items], [ordered_at], [shipped_at], [note]) VALUES
(10,7,1009,N'paid',1499,1,'2024-03-15 21:05:00',NULL,N'C:\Users\ravi\invoice.pdf');
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO

-- Indexes, foreign keys, counters and triggers, after the rows.
CREATE UNIQUE INDEX [customers_email_uk] ON [dbo].[customers] ([email]);
CREATE INDEX [orders_status_date_ix] ON [dbo].[orders] ([status], [ordered_at]);
ALTER TABLE [dbo].[orders] WITH NOCHECK ADD CONSTRAINT [orders_customer_fk] FOREIGN KEY ([customer_id]) REFERENCES [dbo].[customers] ([id]);
BEGIN TRY ALTER TABLE [dbo].[orders] WITH CHECK CHECK CONSTRAINT [orders_customer_fk]; END TRY BEGIN CATCH PRINT N'Foreign key ' + N'[orders_customer_fk]' + N' has rows without a parent: it stays unchecked, and new rows are checked.'; END CATCH;
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[customers]); IF @next IS NOT NULL BEGIN IF @next < 0 SET @next = 0; DBCC CHECKIDENT (N'[dbo].[customers]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'People who bought at least once', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'customers';
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[orders]); IF @next IS NOT NULL BEGIN IF @next < 0 SET @next = 0; DBCC CHECKIDENT (N'[dbo].[orders]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
GO

Düzeltmeler

  1. customers tablosunun "name" sütunu, emoji gibi SQL Server tarafından iki kez sayılan karakterler içerir; bu yüzden nvarchar(200) olur.
  2. orders tablosunun "note" sütunu, emoji gibi SQL Server tarafından iki kez sayılan karakterler içerir; bu yüzden nvarchar(510) olur.

Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.

Diğer örnekler:

Oracle ile SQL Server arasında neler değişir

Her satır, dönüştürücünün uyguladığı bir kuraldır; yanında, kural verilerinizde bir şeyi değiştirdiğinde yazılan rapor satırı yer alır.

  • BOOLEAN (23ai)

    bit

    SQL Server'da boolean sütun yoktur, bu yüzden TRUE ve FALSE 1 ve 0 olur.

  • VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG

    nvarchar(n), nchar(n) ve nvarchar(max)

    Oracle ister bayt ister karakter saymış olsun, uzunluklar karakter sayar; böylece her değer sığar.

  • VARCHAR2 and NVARCHAR2 past what the target's own types hold

    nvarchar(2n), 4000'i aşınca nvarchar(max)

    nvarchar UTF-16 birimlerini sayar ve bir emoji iki birim tutar; bu yüzden sütuna her değer için yer verilir.

    Rapor satırı: text_length_widened

  • NUMBER, NUMBER(p,s), FLOAT(b)

    decimal(p,s) veya bigint

    NUMBER her basamağı korur; duyarlığı olmayan ve tüm değerleri en fazla 18 basamaklı tam sayı olan bir NUMBER 64 bitlik tam sayı olur ve negatif bir ölçek ondalık noktadan önce o kadar basamak tutar.

  • INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND

    Oracle'ın metniyle nvarchar(100), örneğin +01-06

    SQL Server'da interval türü yoktur; metin her parçayı korur.

    Rapor satırı: type_replaced

  • DATE, TIMESTAMP(p)

    datetime2(p)

    Oracle'ın DATE türü saniyesine kadar bir saat tutar, yani bir tarih ve saattir. Amerikan veya Alman oturumundaki bir dışa aktarım tarihleri saatleri ve yüzyılları olmadan (DD-MON-RR) yazar; bunları korumak için ISO oturumunda (SYYYY-MM-DD HH24:MI:SS) dışa aktarın.

  • TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE

    her değerin farkıyla datetimeoffset

    Aynı tür ve değerler.

  • JSON (21c), and CLOB holding JSON

    nvarchar(max)

    Aynı JSON değerleri; dışa aktarımın 'null' olarak yazdığı bir SQL NULL, NULL olarak kalır.

  • BLOB, RAW(n), LONG RAW

    binary(n), varbinary(n) ve varbinary(max)

    Baytlar bayt olarak kalır.

  • ROWID, UROWID, XMLTYPE, SDO_GEOMETRY

    nvarchar(max), XMLTYPE için xml

    Oracle'ın kendi türlerinin karşılığı yoktur; değerleri, ROWID değerleri dahil, metinlerini korur, ancak Oracle dışında bir anlam taşımazlar.

  • collations that ignore case (BINARY_CI)

    her sütunda aynı harmanlama

    Sütunlar eskisi gibi karşılaştırır ve sıralar, benzersiz anahtarlar aynı satırları ayrı tutar.

  • identity columns, and a sequence a BEFORE INSERT trigger assigns

    en yüksek id'den sonra devam eden IDENTITY

    Kopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder. Bir tetikleyicinin bir sequence'tan doldurduğu sütun (12c öncesi yöntem) da kimlik sütunu olur.

  • identity columns the target can't count

    düz bir tam sayı

    SQL Server tablo başına tek IDENTITY sütunu sayar; diğerleri değerlerini sayaçsız korur.

    Rapor satırı: counter_dropped

  • CREATE SEQUENCE

    aynı seçeneklerle CREATE SEQUENCE

    Dışa aktarım, bir sequence'ın ulaştığı değeri START WITH olarak yazar; böylece oradan devam eder.

  • virtual columns (GENERATED ALWAYS AS ... VIRTUAL)

    hesaplanan sütunlar

    SQL Server bunları aynı formülden hesaplar; dışa aktarımın onlar için yazdığı değerler dışarıda bırakılır.

  • virtual columns with functions IntoSQL doesn't write, and the || operator

    düz bir sütun

    SQL Server için yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; dışa aktarımın sanal sütunlar için yazdığı değerler dışarıda bırakılır ve SQL Server bunları hesaplayamaz.

    Rapor satırı: generated_not_translated

  • defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)

    varsayılan değer yok

    Yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.

    Rapor satırı: default_not_translated

  • CHECK constraints

    çevrilir

    Aynı CHECK kısıtları, her satır yüklenirken denetlenir.

  • CHECK constraints with functions IntoSQL doesn't write

    oluşturulmaz

    Yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.

    Rapor satırı: check_skipped

  • CHECK constraints that are DISABLE or ENABLE NOVALIDATE

    oluşturulmaz

    Oracle bu CHECK kısıtlarını zaten var olan satırlara uygulamaz, bu yüzden satırlar onları ihlal edebilir.

    Rapor satırı: check_not_enforced

  • function-based, bitmap and domain indexes

    oluşturulmaz

    IntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun.

    Rapor satırı: index_skipped

  • foreign keys

    veriden sonra WITH NOCHECK, ardından yetim satırlar için uyarıyla denetlenir

    Anahtar satırlardan sonra oluşturulur ve en son denetlenir; üst satırı olmayan satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla denetlenmemiş kalır.

  • ON DELETE CASCADE that cascades in a cycle or along a second path

    NO ACTION

    SQL Server döngü oluşturan veya ikinci bir yol izleyen zincirleme işlemleri reddeder, bu yüzden anahtar bu eylem olmadan oluşturulur ve rapor onu belirtir.

    Rapor satırı: foreign_key_action_dropped

  • foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones

    oluşturulmaz

    Bir anahtar, var olmayan bir tabloya başvuramaz ve Oracle'ın denetlemediği bir anahtarın üst satırı olmayan satırları olabilir.

    Rapor satırı: foreign_key_skipped

  • partitioned tables

    her bölümün satırlarını içeren tek tablo

    Satırlar aynıdır; gerekiyorsa tabloyu SQL Server'da yeniden bölümleyin.

    Rapor satırı: partitions_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL kaldırılır

    Değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.

    Rapor satırı: not_null_relaxed

  • views, synonyms, types, packages, procedures, functions and other triggers

    raporda listelenir

    Kodları PL/SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.

    Rapor satırı: not_converted_objects

  • exports without CREATE TABLE (data only)

    değerlerden okunan türler

    Yalnızca veri içeren bir dışa aktarımda yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.

    Rapor satırı: no_schema

  • expressions in INSERT values other than the ones exports write

    NULL

    Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz; dışa aktarımların yazdığı to_date, to_timestamp, TO_CLOB, HEXTORAW ve diğerleri okunur.

    Rapor satırı: expression_value

  • types IntoSQL doesn't know, and object types

    nvarchar(max)

    Metin her değeri tutar; yüklemeden sonra türü değiştirin.

    Rapor satırı: unknown_type

  • dates before year 1 and time zones given as region names

    NULL

    Tarih olmayan bir değer NULL olur ve rapor onu sayar.

    Rapor satırı: date_out_of_range

  • NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE

    NULL

    SQL Server'ın kayan noktalı türlerinde NaN veya sonsuzluk yoktur, bu yüzden bu değerler NULL olur ve rapor onları sayar.

    Rapor satırı: invalid_value_null

  • NUL characters in text

    korunur

    nvarchar bir NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.

  • text that isn't valid in its encoding

    hatalı baytlar yerine koyma karakteri olarak

    Betik UTF-8'dir ve her değer geçerli metin olmalıdır.

    Rapor satırı: invalid_utf8_replaced

  • text decoded twice (ñ)

    olduğu gibi kopyalanır

    Betik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.

    Rapor satırı: mojibake_suspected

Oracle içindeSQL Server içindeRapor satırı
BOOLEAN (23ai)bitSQL Server'da boolean sütun yoktur, bu yüzden TRUE ve FALSE 1 ve 0 olur.
VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONGnvarchar(n), nchar(n) ve nvarchar(max)Oracle ister bayt ister karakter saymış olsun, uzunluklar karakter sayar; böylece her değer sığar.
VARCHAR2 and NVARCHAR2 past what the target's own types holdnvarchar(2n), 4000'i aşınca nvarchar(max)nvarchar UTF-16 birimlerini sayar ve bir emoji iki birim tutar; bu yüzden sütuna her değer için yer verilir.text_length_widened
NUMBER, NUMBER(p,s), FLOAT(b)decimal(p,s) veya bigintNUMBER her basamağı korur; duyarlığı olmayan ve tüm değerleri en fazla 18 basamaklı tam sayı olan bir NUMBER 64 bitlik tam sayı olur ve negatif bir ölçek ondalık noktadan önce o kadar basamak tutar.
INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECONDOracle'ın metniyle nvarchar(100), örneğin +01-06SQL Server'da interval türü yoktur; metin her parçayı korur.type_replaced
DATE, TIMESTAMP(p)datetime2(p)Oracle'ın DATE türü saniyesine kadar bir saat tutar, yani bir tarih ve saattir. Amerikan veya Alman oturumundaki bir dışa aktarım tarihleri saatleri ve yüzyılları olmadan (DD-MON-RR) yazar; bunları korumak için ISO oturumunda (SYYYY-MM-DD HH24:MI:SS) dışa aktarın.
TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONEher değerin farkıyla datetimeoffsetAynı tür ve değerler.
JSON (21c), and CLOB holding JSONnvarchar(max)Aynı JSON değerleri; dışa aktarımın 'null' olarak yazdığı bir SQL NULL, NULL olarak kalır.
BLOB, RAW(n), LONG RAWbinary(n), varbinary(n) ve varbinary(max)Baytlar bayt olarak kalır.
ROWID, UROWID, XMLTYPE, SDO_GEOMETRYnvarchar(max), XMLTYPE için xmlOracle'ın kendi türlerinin karşılığı yoktur; değerleri, ROWID değerleri dahil, metinlerini korur, ancak Oracle dışında bir anlam taşımazlar.
collations that ignore case (BINARY_CI)her sütunda aynı harmanlamaSütunlar eskisi gibi karşılaştırır ve sıralar, benzersiz anahtarlar aynı satırları ayrı tutar.
identity columns, and a sequence a BEFORE INSERT trigger assignsen yüksek id'den sonra devam eden IDENTITYKopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder. Bir tetikleyicinin bir sequence'tan doldurduğu sütun (12c öncesi yöntem) da kimlik sütunu olur.
identity columns the target can't countdüz bir tam sayıSQL Server tablo başına tek IDENTITY sütunu sayar; diğerleri değerlerini sayaçsız korur.counter_dropped
CREATE SEQUENCEaynı seçeneklerle CREATE SEQUENCEDışa aktarım, bir sequence'ın ulaştığı değeri START WITH olarak yazar; böylece oradan devam eder.
virtual columns (GENERATED ALWAYS AS ... VIRTUAL)hesaplanan sütunlarSQL Server bunları aynı formülden hesaplar; dışa aktarımın onlar için yazdığı değerler dışarıda bırakılır.
virtual columns with functions IntoSQL doesn't write, and the || operatordüz bir sütunSQL Server için yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; dışa aktarımın sanal sütunlar için yazdığı değerler dışarıda bırakılır ve SQL Server bunları hesaplayamaz.generated_not_translated
defaults with functions IntoSQL doesn't write (SYS_GUID(), ||)varsayılan değer yokYazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.default_not_translated
CHECK constraintsçevrilirAynı CHECK kısıtları, her satır yüklenirken denetlenir.
CHECK constraints with functions IntoSQL doesn't writeoluşturulmazYazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK constraints that are DISABLE or ENABLE NOVALIDATEoluşturulmazOracle bu CHECK kısıtlarını zaten var olan satırlara uygulamaz, bu yüzden satırlar onları ihlal edebilir.check_not_enforced
function-based, bitmap and domain indexesoluşturulmazIntoSQL tüm sütunlar üzerinde b-tree indeksler yazar; diğerlerini yüklemeden sonra yeniden oluşturun.index_skipped
foreign keysveriden sonra WITH NOCHECK, ardından yetim satırlar için uyarıyla denetlenirAnahtar satırlardan sonra oluşturulur ve en son denetlenir; üst satırı olmayan satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla denetlenmemiş kalır.
ON DELETE CASCADE that cascades in a cycle or along a second pathNO ACTIONSQL Server döngü oluşturan veya ikinci bir yol izleyen zincirleme işlemleri reddeder, bu yüzden anahtar bu eylem olmadan oluşturulur ve rapor onu belirtir.foreign_key_action_dropped
foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE onesoluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz ve Oracle'ın denetlemediği bir anahtarın üst satırı olmayan satırları olabilir.foreign_key_skipped
partitioned tablesher bölümün satırlarını içeren tek tabloSatırlar aynıdır; gerekiyorsa tabloyu SQL Server'da yeniden bölümleyin.partitions_dropped
NOT NULL columns with values that become NULLNOT NULL kaldırılırDeğerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.not_null_relaxed
views, synonyms, types, packages, procedures, functions and other triggersraporda listelenirKodları PL/SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.not_converted_objects
exports without CREATE TABLE (data only)değerlerden okunan türlerYalnızca veri içeren bir dışa aktarımda yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.no_schema
expressions in INSERT values other than the ones exports writeNULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz; dışa aktarımların yazdığı to_date, to_timestamp, TO_CLOB, HEXTORAW ve diğerleri okunur.expression_value
types IntoSQL doesn't know, and object typesnvarchar(max)Metin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
dates before year 1 and time zones given as region namesNULLTarih olmayan bir değer NULL olur ve rapor onu sayar.date_out_of_range
NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLENULLSQL Server'ın kayan noktalı türlerinde NaN veya sonsuzluk yoktur, bu yüzden bu değerler NULL olur ve rapor onları sayar.invalid_value_null
NUL characters in textkorunurnvarchar bir NUL karakteri tutabilir, bu yüzden değer olduğu gibi kopyalanır.
text that isn't valid in its encodinghatalı baytlar yerine koyma karakteri olarakBetik UTF-8'dir ve her değer geçerli metin olmalıdır.invalid_utf8_replaced
text decoded twice (ñ)olduğu gibi kopyalanırBetik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.mojibake_suspected

Betiği SQL Server veritabanına yükleyin

Betik tabloları oluşturur, satırları kopyalar, ardından anahtarları, indeksleri ve yabancı anahtarları ekler; böylece hızlı yüklenir ve ilk hatada durur.

sqlcmd -b -f 65001 -S localhost -d mydb -i oracle.sql_server.sql

Yabancı anahtarlar WITH NOCHECK ile eklenir ve ardından denetlenir. Bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıt olduğunu söyler ve onu denetlenmemiş bırakır.

Büyük bir döküm için sqlcmd'yi sunucuyla aynı makinede çalıştırın. En fazla 1000 satırlık her toplu iş kendi başına işlenir; böylece işlem günlüğü küçük kalır.

En iyi sonuç için Oracle dökümü nasıl alınır

Dönüştürücü, dökümün içerdiğini okur. Bu seçenekler verilerinizin daha fazlasını dökümde tutar:

  • SQL Developer'da DDL ve Insert veri biçimiyle Tools, Database Export'u seçin. SQLcl aynısını SET SQLFORMAT INSERT ile yazar.
  • Dışa aktarmadan önce ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' çalıştırın: varsayılan biçim tarihleri saatleri ve yüzyılları olmadan yazar.
  • exp veya expdp ile alınan bir .dmp dosyası ikilidir: dosyayı bir Oracle veritabanına, örneğin Docker'daki Oracle Database Free'ye içe aktarın ve SQL Developer ile dışa aktarın.

Neler dönüştürülmez

Görünümler, paketler, saklı yordamlar, fonksiyonlar, tetikleyiciler, türler ve eş anlamlılar PL/SQL ile yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQL Server için yeniden yazabilirsiniz.

Oracle - SQL Server dönüştürme hakkında sorular

Yanıtınızı bulamadınız mı? İletişim sayfasından bize yazın, bir kişi yanıt verir. İletişim sayfası

Dökümüm yükleniyor mu?

Hayır. Dönüştürücü tarayıcınızda çalışır ve dökümü diskinizden parça parça okur; böylece döküm bilgisayarınızdan hiç çıkmaz. Masaüstü uygulaması ve komut satırı da bilgisayarınızda dönüştürür.

Döküm ne kadar büyük olabilir?

Dönüştürücü dökümün tamamını asla bellekte tutmaz: dosyayı aralıklar halinde iki kez okur ve betiği ilerledikçe yazar. Birkaç gigabaytlık dökümler tarayıcıda, masaüstü uygulamasında ve komut satırıyla dönüştürülür.

exp veya expdp ile alınan bir .dmp dosyasını dönüştürebilir miyim?

Doğrudan değil: Data Pump ve özgün Export, yalnızca Oracle'ın okuyabildiği ikili bir biçim yazar. Dosyayı herhangi bir Oracle veritabanına içe aktarın (Oracle Database Free Docker'da çalışır) ve SQL Developer'ın Database Export aracıyla veya SQLcl ile dışa aktarın. Dönüştürücü bir .dmp dosyası aldığında bunu söyler.

Dışa aktarım hangi Oracle sürümlerinden gelebilir?

Oracle 11g ve sonrasından, DBMS_METADATA tablo tanımlarıyla SQL Developer ve SQLcl dışa aktarımları. Her test dışa aktarımı Amerikan, Alman ve ISO oturumlarında Oracle 21c ve 23ai'den gelir ve kaynağıyla hücre hücre karşılaştırılır.

NUMBER, DATE ve diğer Oracle türleri ne olur?

NUMBER decimal olur, tam sayılar için bigint; DATE saatini koruyarak datetime2(0) olur; metin Oracle içindeki gibi tam karşılaştırılan nvarchar, CLOB nvarchar(max), BLOB varbinary(max) olur. NaN ve Infinity NULL olur ve rapor onları sayar.

Kimlik sütunları ve sequence'lar korunuyor mu?

Evet. Kimlik sütunları IDENTITY sütunu olur ve en yüksek id'den sonra devam eder; sequence'lar SQL Server sequence'ı olur ve bunlardan değer alan varsayılanlar onlardan değer almaya devam eder.

PL/SQL paketleri, saklı yordamlar ve tetikleyiciler ne olur?

Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar.

Betik hangi SQL Server sürümlerinde yüklenir?

SQL Server 2017 ile 2025 arası. Aynı betik her birinde yüklenir ve bir sorun çıkarsa ilk hatada durur.