Usar Mensagens Persistentes com Mensagens Armazenadas no Cloud Object Store
O pacote DBMS_PIPE
tem funcionalidade estendida no Autonomous Database para suportar mensagens persistentes, nas quais as mensagens são armazenadas no Armazenamento de Objetos na Nuvem.
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.
-
Dê suporte ao envio e recebimento de mensagens em um único banco de dados, em vários bancos de dados e entre bancos de dados em diferentes regiões.
-
Suporta vários pipes usando o mesmo URI de local do Armazenamento de Objetos na Nuvem.
Os pipes de mensagens persistentes podem ser criados em qualquer um dos tipos DBMS_PIPE
suportados:
- Tubo Implícito: Criado automaticamente quando uma mensagem é enviada com um nome de pipe desconhecido usando a função
DBMS_PIPE.SEND_MESSAGE
. - Tubo Explícito: Criado usando a função
DBMS_PIPE.CREATE_PIPE
com um nome de pipe especificado pelo usuário. - Tubo Público: Acessível por qualquer usuário com permissão
EXECUTE
no pacoteDBMS_PIPE
. - Pipe Privado: Acessível por sessões com o mesmo usuário que o criador do pipe.
Observação:
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 comDBMS_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
).
A seguir, mostra 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 Cloud Object Store 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 leituras e gravações simultâneas.
DBMS_PIPE
permite que apenas uma operação, enviando uma mensagem ou recebendo mensagem, esteja ativa em um determinado momento e essas operações sejam protegidas por um mecanismo de bloqueio. 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 Formatos de URI do Cloud Object Storage para obter mais informações. - O
DBMS_PIPE
usaDBMS_CLOUD
para acessar o Cloud Object Store e todos os tipos de credencial suportados estão disponíveis:DBMS_CLOUD.CREATE_CREDENTIAL
: Consulte procedimento CREATE_CREDENTIAL para obter mais informações.
DBMS_PIPE Privilégios de Autorização e Segurança
Os procedimentos DBMS_PIPE
são executados com os 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 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, em que 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 chama 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 que usa mensagens persistentes e armazena 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 privilégio de execução 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 instância 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 Seleção de Conjunto de Caracteres para 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 (Tubo 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).
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 pipes que usam mensagens persistentes com mensagens armazenadas no Cloud Object Store.
Os pipes públicos podem ser acessados por qualquer sessão de 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 pipes que usam mensagens persistentes com mensagens armazenadas no Cloud Object Store.
Consulte Procedimento SET_CREDENTIAL_NAME e Função GET_LOCATION_URI para obter mais informações.
Consulte Função RECEIVE_MESSAGE para obter mais informações.