Criar o Banco de Dados de Rich History

Este tópico contém informações para ajudá-lo a especificar uma conexão de banco de dados Oracle e escolher canais para criar o banco de dados de histórico avançado. Você usará esse banco de dados para criar relatórios analíticos e visualizações das atividades do razão.

O que é o Rich History Database?

O banco de dados de histórico avançado é externo ao Oracle Blockchain Platform e contém dados sobre as transações do razão blockchain nos canais selecionados. Você usa esse banco de dados para criar relatórios analíticos e visualização sobre as atividades do razão.

Por exemplo, usando o rico banco de dados de histórico, você pode criar análises para aprender o saldo médio de todos os clientes em seu banco durante algum intervalo de tempo ou quanto tempo levou para enviar mercadorias de um atacadista para um varejista.

Internamente, o Oracle Blockchain Platform usa o banco de dados de histórico do Hyperledger Fabric para gerenciar o razão e apresentar informações de transação do razão para você no console. Somente os chaincodes podem acessar esse banco de dados de histórico e você não pode expor o banco de dados de histórico do Hyperledger Fabric como uma origem de dados para consultas analíticas. O banco de dados de histórico avançado usa um banco de dados Oracle externo e contém muitos detalhes sobre cada transação confirmada em um canal. Esse nível de coleta de dados torna o banco de dados de histórico avançado uma excelente fonte de dados para análise. Para obter informações sobre os dados que o banco de dados de histórico avançado coleta, consulte Tabelas e Colunas do Banco de Dados de Histórico Rico.

Você só pode usar um banco de dados Oracle, como o Oracle Autonomous Data Warehouse ou o Oracle Database Classic Cloud Service com o Oracle Cloud Infrastructure, para criar seu banco de dados de histórico avançado. Use a console do Oracle Blockchain Platform para fornecer a string de conexão e as credenciais para acessar e gravar no banco de dados Oracle. Observe que as credenciais fornecidas são as credenciais do banco de dados e o Oracle Blockchain Platform não as gerencia. Depois de criar a conexão, você selecionará os canais que contêm os dados do razão que deseja incluir no banco de dados de histórico avançado. Consulte Ativar e Configurar o Banco de Dados de Rich History.

Você pode usar tabelas padrão ou tabelas blockchain para armazenar o banco de dados de histórico avançado. As tabelas de blockchain são tabelas somente anexadas invioláveis, que podem ser usadas como um razão seguro, além de estarem disponíveis para transações e consultas com outras tabelas. Para obter mais informações, consulte Tabela do Oracle Blockchain.

Você pode usar qualquer ferramenta de análise, como o Oracle Analytics Cloud ou o Oracle Data Visualization Cloud Service, para acessar o banco de dados de histórico avançado e criar relatórios de análise ou visualizações de dados.

Criar a String de Conexão do Oracle Database Classic Cloud Service

Você deve coletar informações do Oracle Database Classic Cloud Service implantado no Oracle Cloud Infrastructure para criar a string de conexão exigida pelo banco de dados de histórico avançado. Você também deve ativar o acesso ao banco de dados pela porta 1521.

Localizar e Registrar Informações do Oracle Database Classic Cloud Service

As informações necessárias para criar uma conexão com o Oracle Database Classic Cloud Service estão disponíveis na Console do Oracle Cloud Infrastructure.

  1. Na Console de Infraestrutura, clique no menu de navegação no canto superior esquerdo e, em seguida, clique em Banco de Dados.

  2. Localize o banco de dados ao qual deseja se conectar e grave o endereço IP Público.

  3. Clique no nome do banco de dados ao qual você deseja se conectar e registre os valores nestes campos:

    • Nome Exclusivo do Banco de Dados

    • Nome do Domínio do Host

    • Porta

  4. Localize um nome de usuário e uma senha de um usuário do banco de dados com permissões para ler este banco de dados e anote-os. Por exemplo, o usuário SYSTEM.

Ativar Acesso ao Banco de Dados pela Porta 1521

Adicione uma regra de entrada que permita ao banco de dados de histórico avançado acessar o banco de dados pela porta 1521.

  1. Na home page do Oracle Cloud Infrastructure, clique no ícone de navegação e, em Bancos de Dados, clique em Sistemas de BD.

  2. Clique no banco de dados ao qual deseja se conectar.

  3. Clique no link Virtual Cloud Network.

  4. Navegue até a sub-rede apropriada e, em Listas de Segurança, clique em Lista de Segurança Padrão do <Banco de Dados de Destino>.

    A página Lista de Segurança será exibida.

  5. Clique em Edit All Rules.

  6. Adicione uma regra de entrada para permitir que qualquer tráfego recebido da internet pública atinja a porta 1521 neste nó de banco de dados, com as seguintes definições:

    • CIDR DE ORIGEM: 0.0.0.0/0

    • PROTOCOLO IP: TCP

    • SOURCE PORT RANGE: todos

    • INTERVALO DE PORTAS DE DESTINO: 1521

    • Permite: Tráfego TCP nas portas: 1521

Criar a String de Conexão

Depois de ativar o acesso ao banco de dados Oracle, use as informações coletadas para criar a string de conexão na caixa de diálogo Configurar Rich History.

Crie a string de conexão usando a seguinte sintaxe: <publicIP>:<portNumber>/<database unique name>.<host domain name>

Por exemplo, 192.0.2.0:1521/CustDB_iad1vm.sub05031027070.customervcnwith.oraclevcn.example.com

Garantir que o Usuário do Banco de Dados tenha os Privilégios Corretos

Para que a funcionalidade rich history possa gerenciar suas sessões de banco de dados e se recuperar do tempo de inatividade temporário do banco de dados ou da rede, certifique-se de que o usuário do banco de dados registrado no Oracle Blockchain Platform tenha os dois privilégios a seguir:
grant select on v_$session to <user>;
grant alter system to <user>;
Além disso, se o banco de dados de histórico avançado usar o Oracle Autonomous Data Warehouse, o usuário do banco de dados deverá ter o seguinte privilégio:
grant unlimited tablespace to <user>;
Se o usuário do banco de dados ainda não tiver esses privilégios, eles deverão ser concedidos pelo administrador do banco de dados do sistema.

Sem esses privilégios, o Oracle Blockchain Platform pode replicar para o banco de dados, mas não pode se recuperar de situações que levam a uma sessão de banco de dados danificada, o que impede que o histórico avançado alcance transações recentes por um período prolongado. Sem esses privilégios no Oracle Autonomous Data Warehouse, nenhum dado de histórico avançado é salvo.

Ativar e Configurar o Banco de Dados de Rich History

Use a console para fornecer informações de conexão de banco de dados e selecionar os canais com os dados do razão do chaincode que você deseja gravar no banco de dados do rich history. Por padrão, os canais não são ativados para gravar dados no banco de dados de histórico avançado.

Observe as seguintes informações:

  • Cada membro da rede blockchain configura seu próprio banco de dados de histórico avançado.

  • Você deve usar um banco de dados Oracle. Nenhum outro tipo de banco de dados é suportado.

  • Cada canal que grava no banco de dados de histórico avançado deve conter pelo menos um nó de mesmo nível.

  1. Digite informações de conexão e credencial para o banco de dados Oracle que você deseja usar para armazenar informações de histórico avançado.
    1. Vá para a console e clique no botão Opções e clique em Configurar Rich History. Esse botão está localizado acima da barra que contém as guias usadas para navegar até nós, canais e chaincodes.
      A caixa de diálogo Configurar Histórico Avançado é exibida.
    2. Informe o nome de usuário e a senha necessários para acessar o banco de dados Oracle.
    3. No campo String de Conexão, digite a string de conexão do banco de dados que você usará para armazenar dados históricos avançados. O que você digita aqui depende do banco de dados Oracle que você está usando.
      • Se você estiver usando o Oracle Autonomous Data Warehouse, digite algo semelhante a <username>adw_high. Para localizar as informações de conexão do Oracle Autonomous Data Warehouse, vá para o arquivo ZIP da wallet de credenciais e abra seu arquivo TNS.
      • Se você estiver usando o Oracle Database Classic Cloud Service com o Oracle Cloud Infrastructure, consulte Criar a String de Conexão do Oracle Database Classic Cloud Service.
      • Se você estiver usando um banco de dados Oracle não autônomo (um banco de dados que não usa uma wallet de credenciais) e quiser usar o usuário sys para estabelecer conexão com o banco de dados, anexe ?as=sys[dba|asm|oper] à string de conexão. Por exemplo, 123.123.123.123:1521/example.oraclevcn.com?as=sysdba
    4. Se você estiver usando uma instância de banco de dados autônomo do Oracle Cloud (por exemplo, Oracle Autonomous Data Warehouse ou Oracle Autonomous Transaction Processing), use o campo Arquivo de Pacote de Wallet para fazer upload do arquivo ZIP da wallet de credencial necessária. Esse arquivo contém credenciais de cliente e é gerado a partir do banco de dados autônomo da Oracle.

      Observação:

      Quando você abre a caixa de diálogo Configurar Rich History novamente depois de configurar o histórico avançado, o nome do arquivo da wallet não é exibido. Se você atualizar outras definições, faça upload do arquivo ZIP da wallet novamente antes de clicar em Salvar. Se você clicar em Salvar enquanto nenhum nome de arquivo de wallet for exibido, a configuração será atualizada para não usar um arquivo de wallet.
    5. Para usar tabelas de blockchain para armazenar o banco de dados de histórico avançado, selecione Usar Tabela de Blockchain do Banco de Dados.
      O banco de dados subjacente deve suportar tabelas blockchain. Para obter mais informações, consulte Tabela do Oracle Blockchain.
      • Para especificar o número de dias para reter tabelas e linhas, selecione Configuração Básica e informe o número de dias para reter tabelas e linhas. Insira 0 para reter tabelas ou linhas permanentemente. Para evitar alterações adicionais nos valores de retenção, selecione Bloqueado.
      • Para especificar a retenção de tabelas e linhas usando uma instrução DDL (Data Definition Language), selecione Consulta de Configuração Avançada e informe a instrução DDL.
    6. Clique em Salvar.
  2. Ative um histórico avançado nos canais que contêm os dados de chaincode que você deseja gravar no banco de dados de rich history.
    1. Vá para a console e selecione a guia Canais.
    2. Localize o canal que contém os dados de chaincode que você deseja gravar no banco de dados rich history. Clique no botão Mais Opções e selecione Configurar Histórico Avançado.
      A caixa de diálogo Configurar Histórico Avançado é exibida.
    3. Clique na caixa de seleção Ativar Rich History. Para armazenar coleções de dados privados no banco de dados de histórico avançado, informe uma lista de nomes de coleta de dados privados, separados por vírgulas. Para obter mais informações sobre coletas de dados privadas, consulte O que são coletas de dados privadas?. Para adicionar detalhes da transação ao banco de dados de histórico avançado, selecione os detalhes que deseja adicionar. Clique em Salvar.
O banco de dados de histórico avançado é configurado, mas as tabelas não são criadas no banco de dados imediatamente. Quando a próxima alteração relevante de transação ou razão acontece, as tabelas são criadas no banco de dados rich history.

Modificar a Conexão com o Banco de Dados do Rich History

Você pode alterar as informações de conexão do banco de dados de histórico avançado.

Depois que as tabelas forem criadas no banco de dados para um canal, a modificação da configuração do histórico avançado para o canal não terá efeito, mesmo depois que você clicar em Salvar, a menos que você altere o nome de usuário e a senha ou a string de conexão. Se você alterar o nome de usuário e a senha, as tabelas serão criadas no mesmo banco de dados. Se você alterar a string de conexão e as credenciais, um banco de dados diferente será configurado e as tabelas serão criadas após a próxima alteração relevante de transação ou razão. Você não pode alterar um banco de dados de histórico avançado de tabelas padrão para tabelas de blockchain e não pode alterar os tempos de retenção, a menos que também altere as credenciais ou a string de conexão.
  1. Vá para a console e clique no botão Opções e clique em Configurar Rich History. Esse botão está localizado acima da barra que contém as guias usadas para navegar até nós, canais e chaincodes.
  2. Se necessário, atualize o nome de usuário e a senha necessários para acessar o banco de dados Oracle.
  3. Se necessário, no campo String de Conexão, modifique a string de conexão do banco de dados que você usará para armazenar dados de histórico avançado. O que você digita aqui depende do banco de dados Oracle que você está usando.
    • Se você estiver usando o Oracle Autonomous Data Warehouse, digite algo semelhante a <username>adw_high. Para localizar as informações de conexão do Oracle Autonomous Data Warehouse, vá para o arquivo ZIP da wallet de credenciais e abra seu arquivo TNS.
    • Se você estiver usando o Oracle Database Classic Cloud Service com o Oracle Cloud Infrastructure, consulte Criar a String de Conexão do Oracle Database Classic Cloud Service.
    • Se você estiver usando um banco de dados Oracle não autônomo (um banco de dados que não usa uma wallet de credenciais) e quiser usar o usuário sys para estabelecer conexão com o banco de dados, anexe ?as=sys[dba|asm|oper] à string de conexão. Por exemplo, 123.123.123.123:1521/example.oraclevcn.com?as=sysdba
  4. Se você estiver usando uma instância de banco de dados autônomo do Oracle Cloud (por exemplo, Oracle Autonomous Data Warehouse ou Oracle Autonomous Transaction Processing), use o campo Arquivo de Pacote de Wallet para fazer upload ou upload novamente do arquivo de wallet de credencial necessário. Esse arquivo contém credenciais do cliente e é gerado a partir do banco de dados autônomo da Oracle.

    Observação:

    Quando você abre a caixa de diálogo Configurar Rich History novamente depois de configurar o histórico avançado, o nome do arquivo da wallet não é exibido. Se você atualizar outras definições, faça upload do arquivo ZIP da wallet novamente antes de clicar em Salvar. Se você clicar em Salvar enquanto nenhum nome de arquivo de wallet for exibido, a configuração será atualizada para não usar um arquivo de wallet.
  5. Para usar tabelas de blockchain para armazenar o banco de dados de histórico avançado, selecione Usar Tabela de Blockchain do Banco de Dados.
    O banco de dados subjacente deve suportar tabelas blockchain.
    • Para especificar o número de dias para reter tabelas e linhas, selecione Configuração Básica e informe o número de dias para reter tabelas e linhas. Insira 0 para reter tabelas ou linhas permanentemente. Para evitar alterações adicionais nos valores de retenção, selecione Bloqueado.
    • Para especificar a retenção de tabelas e linhas usando uma instrução DDL (Data Definition Language), selecione Consulta de Configuração Avançada e informe a instrução DDL.
  6. Clique em Salvar.

Configurar os Canais que Gravam Dados no Banco de Dados do Rich History

Você pode permitir que os canais gravem dados do livro-razão do chaincode no banco de dados rich history e pode impedir que os canais gravem dados no banco de dados rich history. Você também pode configurar um canal individual para usar uma configuração de banco de dados de histórico avançado diferente da definição global.

Especifique as informações globais para estabelecer conexão com o banco de dados de histórico avançado antes de selecionar canais que gravam no banco de dados de histórico avançado. Consulte Ativar e Configurar o Banco de Dados de Rich History.

Depois que as tabelas forem criadas no banco de dados para um canal, a modificação da configuração do histórico avançado para o canal não terá efeito, mesmo depois que você clicar em Salvar, a menos que você altere o nome de usuário e a senha ou a string de conexão. Se você alterar o nome de usuário e a senha, as tabelas serão criadas no mesmo banco de dados. Se você alterar a string de conexão e as credenciais, um banco de dados diferente será configurado e as tabelas serão criadas após a próxima alteração relevante de transação ou razão. Você não pode alterar um banco de dados de histórico avançado de tabelas padrão para tabelas de blockchain e não pode alterar os tempos de retenção, a menos que também altere as credenciais ou a string de conexão.

  1. Vá para a console e selecione a guia Canais.
  2. Localize o canal para o qual você deseja modificar o acesso. Clique no botão Mais Opções e selecione Configurar Histórico Avançado.
    A caixa de diálogo Configurar Histórico Avançado é exibida.
  3. Para ativar a coleta de dados de histórico avançado para o canal, marque a caixa de seleção Ativar Histórico Avançado. Para desativar a coleta de dados de histórico avançado para o canal, desmarque a caixa de seleção Ativar Histórico Avançado.
  4. Para configurar o canal para coletar dados de histórico avançado usando outro banco de dados ou definições diferentes, selecione Usar configuração no nível do canal e especifique as definições a serem usadas.
    Para obter mais informações sobre as definições de histórico avançado, consulte Ativar e Configurar o Banco de Dados de Histórico Avançado.
  5. Clique em Salvar.

Monitorar o Status do Rich History

Depois de configurar o banco de dados de histórico avançado, você poderá usar a console para monitorar o status de replicação do histórico avançado.

  1. Vá para a console e selecione a guia Canais.
  2. Na tabela de canais, clique no botão Mais Ações do canal que você deseja monitorar e, em seguida, clique em Status do Histórico do Rich.
    A caixa de diálogo Status do Histórico do Rich é exibida, que inclui detalhes sobre a replicação e o status da configuração.
  3. Clique em Atualizar para exibir o status mais recente.

Limitar acesso ao histórico avançado

Você pode usar políticas de canal e listas de controle de acesso (ACLs) para limitar as organizações que podem configurar o banco de dados de histórico avançado e recuperar o status de histórico avançado ou informações de configuração.

Por padrão, todas as organizações que têm acesso administrativo a um canal podem configurar a coleta de histórico avançado e recuperar o status de histórico avançado e os detalhes de configuração. Para limitar esse acesso, por exemplo, à organização fundadora, crie uma política de canal e aplique a política aos recursos que controlam o acesso.
  1. Vá para a console e selecione a guia Canais.
    A guia Canais é exibida. A tabela de canais contém uma lista de todos os canais da sua rede.
  2. Na tabela de canais, clique no nome do canal no qual você deseja limitar o acesso.
  3. Clique em Políticas de Canal e crie uma política de assinatura que inclua os membros da organização que acessarão as funções de histórico avançado.
    Para obter mais informações sobre políticas de canal, consulte Trabalhar com Políticas de Canal e ACLs.
    Por exemplo, crie uma política que inclua apenas a identidade da organização fundadora, não a identidade de nenhuma organização participante.
  4. Clique em ACLs.
  5. Na tabela Recursos, localize o recurso que você deseja atualizar para usar a nova política. Clique em Expandir para o recurso e selecione a política a ser designada ao recurso
    A tabela a seguir mostra os recursos que controlam o acesso ao histórico avançado.
    Recurso Controle de acesso
    obpadmin/ConfigureRichHistoryChannel Controla a configuração, a ativação e a desativação do histórico avançado de um canal.
    obpadmin/GetRichHistoryChannelStatus Controla a recuperação do status de replicação do histórico avançado para um canal.
    obpadmin/GetRichHistoryChannelConfig Controla a recuperação da configuração de histórico avançado atual para um canal.
  6. Clique em Atualizar ACLs.
O acesso ao rico histórico agora é controlado pela nova política. Os membros da organização que não estiverem incluídos na nova política receberão uma mensagem de erro quando tentarem acessar um recurso controlado pela política.

Tabelas e Colunas do Banco de Dados de Histórico Rico

O banco de dados de histórico avançado contém três tabelas para cada canal: histórico, estado e altura mais recente. Você consultará as tabelas de histórico e estado ao criar análises sobre as transações do razão dos seus códigos de cadeia. Se você optou por selecionar qualquer um dos detalhes da transação ao ativar o histórico avançado, uma tabela adicional será criada com os detalhes da transação.

Tabela de Histórico

A tabela <instanceName><channelName>_hist contém o histórico do razão. Os dados desta tabela informam o ID chaincode, a chave usada, se a transação era válida, o valor atribuído à chave e assim por diante.

Observe que as colunas value e valueJson são usadas de forma mutuamente exclusiva. Ou seja, quando um valor de chave é json válido, o valor é definido na coluna valueJson. Caso contrário, o valor será definido na coluna valor. A coluna valueJson é configurada como uma coluna json no banco de dados, o que significa que os usuários podem consultar essa coluna usando as extensões específicas usuais do Oracle JSON.

Se configurados, os dados privados também são armazenados nessa tabela. Para dados privados, o ID do chaincode usa o seguinte formato: <chaincodeName>$$<collectionName>.

Coluna Tipo de dados
chaincodeId VARCHAR2 (256)
chave VARCHAR2 (1024)
txnIsValid     NÚMERO (1)
valor VARCHAR2 (4000)
valueJson CLOB
blockNo NÚMERO NÃO NULO
NÚMERO txnNo NOT NULL
txnId VARCHAR2 (128)  
txnTimestamp TIMESTAMP
txnIsDelete NÚMERO (1)

Tabela de Estados

A tabela <instanceName><channelName>_state contém valores de dados replicados do banco de dados de estado. Você consultará a tabela de estado ao criar análises sobre o estado do razão.

Observe que as colunas value e valueJson são usadas de forma mutuamente exclusiva. Ou seja, quando um valor de chave é json válido, o valor é definido na coluna valueJson. Caso contrário, o valor será definido na coluna valor. A coluna valueJson é configurada como uma coluna json no banco de dados, o que significa que os usuários podem consultar essa coluna usando as extensões específicas usuais do Oracle JSON.

Coluna Tipo de dados
chaincodeId VARCHAR2 (256)
chave VARCHAR2 (1024)
valor VARCHAR2 (4000) 
valueJson CLOB
blockNo NUMBER
txnNo NUMBER

Tabela de Altura Mais Recente

A tabela <instanceName><channelName>_last é usada internamente pelo Oracle Blockchain Platform para rastrear a altura do bloco registrada no banco de dados de histórico avançado. Ele determina a atualidade do banco de dados de histórico avançado e se todas as transações de chaincode foram registradas no banco de dados de histórico avançado. Não é possível consultar este banco de dados para análise.

Tabela de Detalhes da Transação

A tabela <instanceName><channelName>_more contém atributos relacionados a transações submetidas a commit. Ao ativar o banco de dados de histórico avançado, você pode selecionar quais desses atributos deseja registrar nesta tabela. A tabela de detalhes da transação só captura informações sobre transações do endossador - não transações de configuração ou qualquer outro tipo de transações do Hyperledger Fabric.

Coluna Tipo de dados
CHAINCODEID VARCHAR2 (256)
NO DE BLOQUEIO NUMBER
TXNNO NUMBER
TXNID VARCHAR2(128)
CARIMBO DE DATA/HORA TIMESTAMP
SUBMETEDOR VARCHAR2(512)
SUBMETEDOR VARCHAR2(512)
SUBMETEDOR VARCHAR2(512)
CHAINCODETYPE VARCHAR2(32)
NOME DO CÓDIGO DE VALIDAÇÃO VARCHAR2(32)
AVALIAÇÕES CLOB
ENTRADAS CLOB
EVENTOS CLOB
STATUS DE RESPOSTA NÚMERO (0)
RESPONSEPAYLOAD VARCHAR2(1024)
RÁPIDO CLOB
BLOCKCREATORCN VARCHAR2(512)
BLOCKCREATORORG VARCHAR2(512)
BLOCKCREATOROU VARCHAR2(512)
NÚMERO DO BLOCO DE CONFIGURAÇÃO NÚMERO (0)
CONFIGBLOCKCREATORCN VARCHAR2(512)
CONFIGBLOCKCREATORORG VARCHAR2(512)
CONFIGBLOCKCREATOROU VARCHAR2(512)

Observação:

  • A organização (ORG) e a unidade organizacional (OU) são orientadas por certificados de identidade, o que implica que podem ser atribuídas a vários valores. Eles são capturados como uma lista separada por vírgulas nos valores da tabela.
  • Para identidades, a tabela inclui informações somente sobre a parte "Assunto" dos certificados, não sobre o "Emissor".
  • A coluna RWSET contém operações em todos os chaincodes (no mesmo razão) executadas durante o endosso. Como tal, você normalmente verá operações de leitura lscc e as operações reais de namespace de chaincode.