Usar Mensagens Persistentes com Mensagens Armazenadas no Cloud Object Store
O pacote DBMS_PIPE
tem funcionalidade estendida no Autonomous Database para suportar mensagens persistentes, em que as mensagens são armazenadas no Cloud Object Store.
- Sobre Mensagens Persistentes com DBMS_PIPE
As mensagens persistentes comDBMS_PIPE
permitem que uma ou mais sessões de banco de dados se comuniquem na mesma região ou entre regiões com mensagens armazenadas no Armazenamento de Objetos na Nuvem. - Criar um Pipe Persistente Explícito e Enviar uma Mensagem
Descreve as etapas para criar um pipe persistente com um nome de pipe especificado (Pipe Explícito). - Recuperar uma Mensagem Persistente no Mesmo Banco de Dados
Descreve as etapas para recuperar uma mensagem persistente de um pipe explícito na mesma instância do Autonomous Database (a instância para a qual a mensagem foi enviada). - Recuperar uma Mensagem Persistente Criando um Pipe em Outro Banco de Dados
Descreve as etapas para recuperar uma mensagem persistente armazenada no Cloud Object Store com um pipe explícito em uma instância do Autonomous Database diferente da instância que enviou a mensagem. - Remover um Pipe Persistente
Descreve as etapas para remover um pipe persistente.
Sobre Mensagens Persistentes com DBMS_PIPE
DBMS_PIPE
permitem que uma ou mais sessões de banco de dados se comuniquem na mesma região ou entre regiões com mensagens armazenadas no Armazenamento de Objetos na Nuvem.
Mensagens persistentes em DBMS_PIPE
:
-
Permite que você envie e recupere mensagens muito grandes.
-
Suporta o envio de um grande número de mensagens de pipe.
-
Ofereça suporte ao envio e recebimento de mensagens em um único banco de dados, em vários bancos de dados e em bancos de dados em diferentes regiões.
-
Suporta vários pipes usando o mesmo URI de localização do Cloud Object Store.
Os pipes de mensagens persistentes podem ser criados em qualquer um dos tipos DBMS_PIPE
suportados:
- Tubulação Implícita: Criada automaticamente quando uma mensagem é enviada com um nome de pipe desconhecido usando a função
DBMS_PIPE.SEND_MESSAGE
. - Tubulação Explícita: Criada usando a função
DBMS_PIPE.CREATE_PIPE
com um nome de pipe especificado pelo usuário. - Pipe Público: Acessível por qualquer usuário com a permissão
EXECUTE
no pacoteDBMS_PIPE
. - Pipe Privado: Acessível por sessões com o mesmo usuário do criador do pipe.
A Oracle recomenda criar um pipe explícito antes de enviar ou receber mensagens com mensagens persistentes. A criação de um pipe explícito com
DBMS_PIPE.CREATE_PIPE
garante que o pipe seja criado com as permissões de acesso desejadas, públicas ou privadas (definindo o parâmetro private
).
Veja a seguir o workflow geral de DBMS_PIPE
com mensagens persistentes:

Descrição da ilustração database-pipe-persistent-messaging.eps
Os aplicativos existentes que usam DBMS_PIPE
podem continuar operando com alterações mínimas. Você pode configurar aplicativos existentes que usam DBMS_PIPE
com um objeto de credencial e um URI de local usando um trigger de log-on ou usando alguma outra rotina de inicialização. Depois de definir a credencial DBMS_PIPE
e o URI de local, nenhuma outra alteração será necessária para usar mensagens persistentes. Todo o uso subsequente do pipe armazena as mensagens no Armazenamento de Objetos na Nuvem em vez de na memória do banco de dados. Isso permite que você altere o método de armazenamento para mensagens do Cloud Object Storage na memória para persistente, com alterações mínimas.
Visão Geral e Recursos de Mensagens Persistentes
Recursos do DBMS_PIPE
usando mensagens persistentes:
-
As mensagens podem ser enviadas e recuperadas em várias instâncias do Autonomous Database na mesma região ou entre regiões.
-
As mensagens persistentes são garantidas para serem escritas ou lidas por exatamente um processo. Isso evita a inconsistência do conteúdo da mensagem devido a gravações e leituras simultâneas. Usando um pipe de mensagens persistente,
DBMS_PIPE
permite que apenas uma operação, enviando uma mensagem ou uma mensagem de recebimento, fique ativa em um determinado momento. No entanto, se uma operação não for possível devido a uma operação em andamento, o processo repetirá periodicamente até que o valortimeout
seja atingido. -
DBMS_PIPE
usaDBMS_CLOUD
para acessar o Cloud Object Store. As mensagens podem ser armazenadas em qualquer Armazenamento de Objetos na Nuvem suportado. Consulte DBMS_CLOUD Formatos de URI para obter mais informações. - O
DBMS_PIPE
usaDBMS_CLOUD
para acessar o Cloud Object Store e todos os tipos de credenciais suportados estão disponíveis:DBMS_CLOUD.CREATE_CREDENTIAL
: Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.
DBMS_PIPE Autorização e Segurança de Privilégios
Os procedimentos DBMS_PIPE
são executados com direitos do chamador. Os pipes privados pertencem ao usuário atual e um pipe privado criado por um usuário só pode ser usado pelo mesmo usuário. Isso se aplica a pipes na memória e a pipes de mensagens persistentes em que as mensagens são armazenadas no Cloud Object Store. O envio e o recebimento de mensagens são executados no esquema do chamador.
Usando pipes privados, nos quais as mensagens são armazenadas no Armazenamento de Objetos na Nuvem, é necessário um objeto de credencial para autenticação com o armazenamento de Objetos na Nuvem identificado pelo parâmetro location_uri
. O usuário que faz a chamada deve ter o privilégio EXECUTE
no objeto de credencial especificado com o parâmetro credential_name
usado para acessar o Armazenamento de Objetos.
Para usar um pipe público, o usuário, a sessão do banco de dados, deve ter o privilégio de execução em DBMS_PIPE
. Para um pipe público usando mensagens persistentes e armazenando mensagens no Cloud Object Store, o usuário, a sessão de banco de dados, deve ter privilégio de execução em DBMS_CLOUD
e executar privilégio no objeto de credencial (ou você pode criar um objeto de credencial que tenha permissão para acessar o URI de local que contém a mensagem).
DBMS_PIPE Limitação
O pacote DBMS_PIPE
não suporta o envio de mensagens entre bancos de dados que usam conjuntos de caracteres diferentes. Por exemplo, se você tiver uma instância do Autonomous Database que use AL32UTF8 e outra que use WE8MSWIN1252, não poderá enviar mensagens com DBMS_PIPE
entre esses dois bancos de dados. Nesse caso, o sistema gerará o erro ORA-12704
se você tentar enviar mensagens com DBMS_PIPE
entre esses dois bancos de dados.
Consulte Selecionar um Conjunto de Caracteres para o Autonomous Database para obter mais informações.
Criar um Pipe Persistente Explícito e Enviar uma Mensagem
Descreve as etapas para criar um pipe persistente com um nome de pipe especificado (Tubulação Explícita).
Recuperar uma Mensagem Persistente no Mesmo Banco de Dados
Descreve as etapas para recuperar uma mensagem persistente de um pipe explícito na mesma instância do Autonomous Database (a instância para a qual a mensagem foi enviada).
Em uma instância do Autonomous Database, você pode receber mensagens enviadas para um pipe de outra sessão. Os procedimentos DBMS_PIPE
são procedimentos de direitos do chamador e executados como o usuário chamado atual.
Os pipes privados pertencem ao usuário atual que cria o pipe. Os pipes privados só podem ser acessados pelo mesmo usuário que criou o pipe. Isso se aplica a pipes que usam mensagens na memória e a pipes que usam mensagens persistentes com mensagens armazenadas no Cloud Object Store.
Os pipes públicos podem ser acessados por qualquer sessão do banco de dados que tenha privilégio de execução em DBMS_PIPE
. Isso se aplica a pipes que usam mensagens na memória e a pipes que usam mensagens persistentes com mensagens armazenadas no Cloud Object Store.
Consulte Procedimento SET_CREDENTIAL_NAME e Procedimento SET_LOCATION_URI para obter mais informações.
Consulte RECEIVE_MESSAGE Função para obter mais informações.
Recuperar uma Mensagem Persistente Criando um Pipe em um Banco de Dados Diferente
Descreve as etapas para recuperar uma mensagem persistente armazenada no Cloud Object Store com um pipe explícito em uma instância do Autonomous Database diferente da instância que enviou a mensagem.