Como migrar usuários do Oracle® para o Cloud SQL para MySQL: tipos de dados, usuários e tabelas

Este documento faz parte de uma série que fornece informações importantes e orientações relacionadas ao planejamento e à realização de migrações de banco de dados Oracle® 11g/12c para o Cloud SQL para PostgreSQL versão 12. Além da parte de configuração introdutória, a série inclui as seguintes partes:

Tipos de dados

O Cloud SQL para PostgreSQL fornece vários tipos de dados que são totalmente equivalentes ou semelhantes aos tipos de dados fornecidos pela Oracle. A tabela a seguir lista os tipos de dados do PostgreSQL mais comuns, seguidos por uma comparação entre os tipos de dados primitivos da Oracle e os do Cloud SQL para PostgreSQL correspondentes. em que um tipo de dados não é compatível, um tipo de dados alternativo é listado.

Tipos de dados primitivos do Cloud SQL para PostgreSQL 12

Família de tipos de dados do Cloud SQL para PostgreSQL Nome do tipo de dados do Cloud SQL para PostgreSQL Especificação do tipo de dados
String/caractere CHAR(n) Armazena exatamente n caracteres. Alias de CHARACTER(n).
CHARACTER(n) Armazena exatamente n caracteres.
VARCHAR(n) Armazena um número variável de caracteres, até um máximo de n caracteres. Alias de CHARACTER VARYING(n).
CHARACTER VARYING(n) Armazena um número variável de caracteres, até um máximo de n caracteres.
TEXT Variante específica de VARCHAR que não exige um limite máximo para o número de caracteres. A string de caracteres mais longa possível que pode ser armazenada é de 1 GB (igual a todos os tipos de dados de caracteres de string).
Numérico SMALLINT O valor mínimo é -32768 | O valor máximo é 32767.
INTEGER O valor mínimo é de 2147483648 | O valor máximo é 2147483647.
BIGINT O valor mínimo é de 2^63 | O valor máximo é 2^63-1.
REAL Número de ponto flutuante de precisão única (4 bytes).
DOUBLE PRECISION Número de ponto flutuante de precisão dupla (8 bytes).
DECIMAL (p,s) Capaz de armazenar qualquer valor com p dígitos e s decimais.
NUMERIC(p,s) Capaz de armazenar qualquer valor com p dígitos e s decimais.
SMALLSERIAL Inteiro autoincrementado. O valor mínimo é de 1 | O valor máximo é 32767.
SERIAL Inteiro autoincrementado. O valor mínimo é de 1 | O valor máximo é 2147483647.
BIGSERIAL Inteiro autoincrementado. O valor mínimo é de 1 | O valor máximo é 2^63-1.
Monetário MONEY Valor de moeda com precisão fracionária fixa. O valor mínimo é de -92233720368547758.08 | O valor máximo é de +92233720368547758.07.
Data e hora DATE Valores com uma parte da data, mas sem parte da hora.
- O intervalo aceito é de 4713 BC a 5874897 do AD com resolução de 1 dia.
TIMESTAMP (p) - valores que contêm partes de data e hora.
- O intervalo aceito é de 4713 BC a 294276 AD.
- A resolução é de p dígitos fracionários em segundos (ou 1 microssegundo, se não especificado).
TIMESTAMP (p) with time zone - Valores que contêm a data, a hora e o fuso horário.
- O intervalo aceito é de 4713 BC a 294276 AD.
- A resolução é de p dígitos fracionários em segundos (ou 1 microssegundo, se não especificado).
TIME (p) - Valores com uma parte do tempo, mas não a parte da data.
- o intervalo compatível é de 0:00:00 a 24:00:00.
- A resolução tem p dígitos fracionários em segundos (ou 1 microssegundo, se não especificado).
TIME (p) with time zone - Valores com fuso horário e hora, mas sem parte da data.
- o intervalo compatível é de 0:00:00 a 24:00:00.
- A resolução é de p dígitos fracionários em segundos (ou 1 microssegundo, se não especificado).
INTERVAL (p) - Intervalo de tempo
- O intervalo aceito é de -178000000 a 178000000 anos.
- A resolução é de p dígitos fracionários em segundos (ou 1 microssegundo, se não especificado).
JSON JSON Dados JSON textuais.
JSONB Dados JSON binários.
XML XML Dados XML.

Geométrico
GEOMETRY O tipo de coluna que especifica quando você quer usar os modelos de dados a seguir.
POINT Um valor (x,y).
LINE Uma tupla (A, B, C) em que Ax + By + C = 0 e A e B não são ambos 0.

OU

Ponto 1 e ponto 2 nos seguintes formatos:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1 , x2 , y2

LSEG Um segmento de linha ((x1,y1),(x2,y2)).
BOX Caixa retangular ((x1,y1),(x2,y2)).
PATH Uma sequência de pontos ((x1,y1),...).
POLYGON Uma sequência de pontos, efetivamente um caminho fechado.
CIRCLE (x,y),r) (ponto central e raio)
Lógica BOOLEAN - Mantém um valor true, false ou null.
- aceita valores como yes, true e t , on e 1 como verdadeiros.
Bit / dados binários BIT (n) String de bits com comprimento fixo.
BYTEA Matriz de dados / bytes binários.
Tipos de endereço de rede CIDER Redes IPv4 e IPv6.
INET Hosts e redes IPv4 e IPv6.
MACADDR Endereços MAC.
MACADDR8 Endereços MAC (formato EUI-64).
Others PG_LSN Número da sequência de registros do Cloud SQL para PostgreSQL.
TSQUERY Consulta de pesquisa de texto.
TSVECTOR Documento de pesquisa de texto.
TXID_SNAPSHOT Snapshot do código da transação no nível do usuário.
UUID Identificador universalmente exclusivo.

Conversão de Oracle para Cloud SQL para PostgreSQL

Família de tipos de dados do Oracle Nome do tipo de dados do Oracle Especificação do tipo de dados do Oracle Cloud SQL para PostgreSQL para equivalente da Oracle Cloud SQL para PostgreSQL correspondente/alternativa
String/caractere CHAR(n) Tamanho máximo de 2.000 bytes. Sim CHAR(n)
CHARACTER(n) Tamanho máximo de 2.000 bytes. Sim CHARACTER(n)
NCHAR(n) Tamanho máximo de 2.000 bytes. Não CHAR(n)
VARCHAR(n) Tamanho máximo de 2.000 bytes. Sim VARCHAR(n)
NCHAR VARYING(n) String UTF-8 de comprimento variável
de 4.000 bytes.
Não CHARACTER VARYING(n)
VARCHAR2(n) 11g Tamanho máximo de 4.000 bytes. Tamanho máximo de 32 KB em PL/SQL. Sim* VARCHAR(n)
VARCHAR2(n)
12g
Tamanho máximo de 32767 bytes MAX_STRING_SIZE= EXTENDED. Sim* VARCHAR(n)
NVARCHAR2(n) Tamanho máximo de 4.000 bytes. Não VARCHAR(n)
LONG Tamanho máximo de 2 GB. Sim* TEXT
RAW(n) Tamanho máximo de 2.000 bytes. Sim* BYTEA
LONG RAW Tamanho máximo de 2 GB. Sim* BYTEA
Numérico NUMBER Número de ponto flutuante. Sim* NUMERIC(p,s)
NUMBER(*) Número de ponto flutuante. Sim* DOUBLE PRECISION
NUMERIC(p,s) A precisão pode variar de 1 a 38. Sim NUMERIC(p,s)
FLOAT(p,s) Número de ponto flutuante. Sim* DOUBLE PRECISION
DEC(p,s) Número de ponto fixo. Sim DEC(p,s)
DECIMAL(p,s) Número de ponto fixo. Sim DECIMAL(p,s)
INT Número inteiro de 38 dígitos. Sim INT
INTEGER Número inteiro de 38 dígitos. Sim INTEGER
SMALLINT Número inteiro de 38 dígitos. Sim SMALLINT
REAL Número de ponto flutuante. Sim* DOUBLE PRECISION
DOUBLE PRECISION Número de ponto flutuante. Sim DOUBLE PRECISION
Data e hora DATE Armazena dados de data e hora (ano, mês, dia, hora, minuto e segundo). Sim* TIMESTAMP(0)
TIMESTAMP(p) Data e hora com fração. Sim TIMESTAMP(p)
TIMESTAMP(p) WITH TIME ZONE Data e hora com fração e fuso horário. Sim TIMESTAMP (p) WITH TIME ZONE
INTERVAL YEAR(p) TO MONTH Intervalo de data. Sim* INTERVAL YEAR TO MONTH
INTERVAL DAY(p) TO SECOND(s) Intervalo de dia e hora. Sim* INTERVAL DAY TO SECOND(s)
Lógica BOOLEAN Valores TRUE, FALSE e NULL. Não é possível atribuir uma coluna de tabela de banco de dados. Sim BOOLEAN
XML XMLTYPE Dados XML. Não XML
LOB BFILE Ponteiro para arquivo binário, com tamanho máximo de 4 GB. Não VARCHAR(255)
CLOB Objeto grande de caractere com tamanho máximo de arquivo de 4GB. Não TEXT
BLOB Objeto grande binário com tamanho máximo de 4GB. Não BYTEA
NCLOB String Unicode de comprimento variável com tamanho máximo de arquivo de 4GB. Não TEXT
ROWID ROWID Endereço da linha física. Não CTID
UROWID(n) ID de linha universal dos endereços de linha lógicos. Não CTID
Espacial SDO_ GEOMETRY A descrição geométrica de um objeto espacial. Sim O Postgres tem vários tipos de geometria, incluindo point, line, path, polygon, circle, ....
SDO_TOPO_ GEOMETRY Descreve uma geometria de topologia. Sim O PostGIS, uma extensão amplamente usada do Postgres, fornece vários tipos de topologia.
SDO_GEORASTER Uma grade de varredura ou um objeto de imagem é armazenado em uma única linha. Sim O PostGIS, uma extensão amplamente usada do Postgres, oferece uma ferramenta para carregar arquivos raster no banco de dados.
Tipos de mídia ORDDicom Compatível com o armazenamento e o gerenciamento de arquivos de imagens e comunicações digitais em medicina (DICOM, na sigla em inglês). Sim com uma solução alternativa O Postgres fornece um tipo binário, bytea, para armazenar objetos grandes.
ORDDoc Compatível com armazenamento e gerenciamento de qualquer tipo de dados de mídia. Sim com uma solução alternativa O Postgres fornece um tipo binário, bytea, para armazenar objetos grandes.
ORDImage Compatível com o armazenamento e o gerenciamento de dados de imagem. Sim com uma solução alternativa O Postgres fornece um tipo binário, bytea, para armazenar objetos grandes.
ORDVideo Compatível com armazenamento e gerenciamento de dados de vídeo. Alternativa O Postgres fornece um tipo binário, bytea, para armazenar objetos grandes.

* O tipo de dados correspondente no Cloud SQL para PostgreSQL é, principalmente, compatível com o Oracle, mas com um nome diferente.

Tipos definidos pelo usuário

A Oracle se refere a tipos definidos pelo usuário (UDTs, na sigla em inglês) como OBJECT TYPES, que são gerenciados usando PL/SQL. Eses tipos permitem que o usuário crie tipos de dados complexos e dedicados a aplicativos baseados na lista de tipos de dados integrados do Oracle.

Tipos definidos pelo usuário Oracle Visão geral ou implementação do Oracle Suporte do Cloud SQL para PostgreSQL Cloud SQL correspondente para solução alternativa ou alternativa
Tipo de dados abstratos (ADT, na sigla em inglês) CREATE TYPE ADT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
);
Parcialmente com uma sintaxe diferente Os tipos compostos do Cloud SQL para PostgreSQL são especificados por uma lista de nomes de atributos e tipos de dados:

CREATE TYPE ADT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);

Tipo VARRAY CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); Não Como solução alternativa, o Cloud SQL para PostgreSQL permite definir as colunas como uma matriz:

CREATE TABLE VARRAY_TABLE (
NAME VARCHAR(25)[]
);

Tipo de tabela aninhada CREATE TYPE NTT_DEMO AS OBJECT (
ID NUMBER(6),
NAME VARCHAR2(20)
) ;
CREATE TYPE NTT_TABLE AS TABLE OF NTT_DEMO;
Não Como solução alternativa, use uma combinação de tipos compostos e de definições de coluna de matriz no Cloud SQL para PostgreSQL para conseguir uma funcionalidade semelhante à do tabela aninhada da Oracle.

CREATE TYPE NTT_DEMO AS
(
ID NUMERIC(6),
NAME VARCHAR(20)
);
CREATE TABLE NTT_TABLE (
RECORD NTT_DEMO[]
);

Tipo incompleto Tipos incompletos são tipos sem atributos e métodos. Elas podem ser referenciadas por outros tipos. No entanto, é necessário fornecer a definição de tipo antes de usá-la.

CREATE TYPE INCOMPLETE_DEMO;

Não N/A

Usuários

Nesta seção, tratamos de como criar usuários e atribuir permissões a eles, além da necessidade de converter tabelas do Oracle em tabelas do Cloud SQL para MySQL.

Criação e permissões de usuários

As contas de usuário do banco de dados da Oracle (o "usuário" e o "esquema" do Oracle são idênticos) podem ser usadas para autenticar e se conectar a sessões do banco de dados. O acesso de autorização é definido no nível individual do usuário para objetos específicos do banco de dados. /permissions.

Em geral, há dois tipos de usuários de banco de dados:

  • Administradores: gerenciar a instância, os usuários e os recursos do banco de dados.
  • Contas de usuário: disponibilizar operações lógicas, como aplicativos.

Os administradores concedem privilégios a contas de usuário e de aplicativo para acessar os objetos do banco de dados. As permissões do banco de dados Oracle são concedidas a um usuário para operações específicas (por exemplo, criar sessão/conexão) ou objetos de banco de dados específicos (por exemplo, SELECT em uma tabela específica ou EXECUTE em um procedimento armazenado específico).

No Oracle, há usuários e papéis. Os usuários são usados para autenticar com o banco de dados, e os papéis fornecem o agrupamento de permissões que podem ser concedidas como um todo.

No Cloud SQL para PostgreSQL, os usuários e papéis são sinônimos. Um usuário no Cloud SQL para PostgreSQL é um papel com permissão connect. Use a instrução CREATE USER ou CREATE ROLE para criar um usuário do banco de dados. Ao contrário do Oracle, no Cloud SQL para PostgreSQL, os esquemas e os usuários são criados separadamente. Um esquema é uma coleção de objetos (por exemplo, tabelas, tipos de dados, funções etc.) que pertence a um usuário.

Criar usuário Oracle
CREATE USER user_name IDENTIFIED BY password;
Criar usuário do Cloud SQL para PostgreSQL
CREATE USER user WITH PASSWORD 'password';

OU

CREATE ROLE user WITH LOGIN PASSWORD 'password';

Considerações sobre conversão

  • Os usuários são definidos no nível raiz e são válidos para todos os bancos de dados contidos no mesmo cluster do Cloud SQL para PostgreSQL. Isso é semelhante aos "usuários comuns" no Oracle 12c.
  • A sintaxe CREATE USER do Cloud SQL para PostgreSQL é diferente da Oracle e não pode ser migrada como está. CREATE USER no Cloud SQL para PostgreSQL é um alias para CREATE ROLE, exceto que a opção LOGIN é ativada por padrão.

Tabelas

As tabelas Oracle são construídas com base em muitos elementos, como tipos de dados de coluna, restrições de tabela, índices, partições, recursos reservados de tabelas Oracle e muito mais. Para migrar com êxito para as tabelas de banco de dados do Cloud SQL para PostgreSQL, todos os elementos da tabela Oracle precisam ser convertidos em tabelas do Cloud SQL para PostgreSQL. Alguns elementos são compatíveis sem nenhuma modificação, outros sofrem pequenas modificações e outros precisam ser completamente modificados.

Da perspectiva da migração, a conversão de PL/SQL para o Cloud SQL para PostgreSQL provavelmente requer mais esforço, porque a conversão de tabelas Oracle para o Cloud SQL para tabelas do PostgreSQL é um estágio crucial com importância significativa e outras implicações no desempenho. tamanho dos dados.

Veja a seguir as principais diferenças entre as tabelas Oracle e Cloud SQL para PostgreSQL e os recursos relacionados. Essas diferenças são discutidas nas partes restantes da série.

  • Criar sintaxe de tabela
  • Metadados de tabela e índice
  • Suporte a restrições
  • Compatibilidade e limitações de tipos de dados
  • Índices
  • Partições e gerenciamento de partições
  • Gerenciamento de tabelas e índices
  • Tabelas temporárias
  • Visualizações
  • Colunas visíveis e invisíveis (Oracle 12c)
  • Conjuntos de caracteres de tabela e coluna

A seguir