0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証~Oracle テーブル編~

Last updated at Posted at 2023-04-09

概要

本記事の位置付けについて

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle (SSMA)によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

Oracle テーブルについて

Oracle Database ではテーブル(表)について、Oracle Database ドキュメントにて、次のように記載されている。

Oracle Databaseのデータ記憶域の基本単位です。データは、行および列に格納されます。

引用元:20 表の管理 (oracle.com)

テーブルには、次のオプションを設定できる。

  • 制約
  • インデックス(索引)
  • パーティション

テーブルのレコードを特定するために、 ROWID 疑似列が利用されることがある。

データベース内の各行について、行のアドレスを戻します。

引用元:ROWID疑似列

参考リンク

  • ホワイトペーパー
    • Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
    • Oracle to SQL Server Migration Handbook v 2.0

Azure SQL Database への移行

SSMA による変換

テーブルの変換をサポートしている。

移行方針

テーブル、および、テーブルに付随する次のオプションを変換する。

  • 制約

次のオプションについては、変換されず、手動対応 が必要となる。

  • インデックス(索引)
  • パーティション

メモリ最適化テーブルについては、次のドキュメントにて詳細が記載されている。

  • Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database

ROWID列をエミュレートする方法として、次の方法がある。2 の方法を実施する場合には、関連する issues は発生しない。

  1. Azure SQL Database 連携前にROWID列を追加する方法
  2. SSMA のプロジェクト設定値であるGenerate ROWID columnYesの値に設定することで、テーブルにROWID列を保持させる方法
  3. 手動でROWID列をテーブルに追加する方法

変換例

変換例 1 インデックスと制約を設定しているテーブル

Oracle Database のコード
CREATE TABLE HR.table_sample_001 (
    ID NUMBER(10,0)
    ,VALUE NUMBER(10,0)
)
/
CREATE TABLE HR.table_sample_002 (
    ID NUMBER(10,0)
    ,NAME NVARCHAR2(10)
)
/
ALTER TABLE HR.table_sample_001
    ADD CONSTRAINT table_sample_001_pk
    PRIMARY KEY  (ID);
/
ALTER TABLE HR.table_sample_002
    ADD CONSTRAINT table_sample_002_pk
    PRIMARY KEY  (ID);
/
ALTER TABLE HR.table_sample_001
    ADD CONSTRAINT table_sample_001_fk
    FOREIGN KEY ( ID )
    REFERENCES HR.table_sample_002 ( ID );
/
CREATE INDEX table_sample_001_idx_01
    ON HR.table_sample_001(VALUE);
Azure SQL Database への変換

SSMA により次のように変換される。

CREATE TABLE 
[HR].[TABLE_SAMPLE_001]
(
   [ID] numeric(10, 0)  NOT NULL,
   [VALUE] numeric(10, 0)  NULL
)
WITH (DATA_COMPRESSION = NONE)
GO

ALTER TABLE [HR].[TABLE_SAMPLE_001]
 ADD CONSTRAINT [TABLE_SAMPLE_001_PK]
   PRIMARY KEY
   CLUSTERED ([ID] ASC)

GO

ALTER TABLE [HR].[TABLE_SAMPLE_001]
 ADD CONSTRAINT [TABLE_SAMPLE_001_FK]
 FOREIGN KEY 
   ([ID])
 REFERENCES 
   [HR].[TABLE_SAMPLE_002]     ([ID])
    ON DELETE NO ACTION
    ON UPDATE NO ACTION

GO

変換例 2 パーティションを設定しているテーブル

Oracle Database のコード
CREATE TABLE HR.TABLE_SAMPLE_003
( 
	COLUMN1 NUMBER(10, 0)
)
PARTITION BY RANGE (COLUMN1)
(
PARTITION P1 VALUES LESS THAN (10) TABLESPACE USERS, 
PARTITION P2 VALUES LESS THAN (20) TABLESPACE USERS
)
;
Azure SQL Database への変換

SSMA により次のように変換される。

CREATE TABLE 
[HR].[TABLE_SAMPLE_003]
(
   [COLUMN1] numeric(10, 0)  NULL
)
ON [SSMA$PS$HR$TABLE_SAMPLE_003] ([COLUMN1])
WITH (DATA_COMPRESSION = NONE)
GO
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?