Criar o Banco de Dados de Histórico Rico

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 fazer relatórios analíticos e visualizações das atividades do seu 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 banco de dados de histórico avançado, você pode criar análises para aprender o saldo médio de todos os clientes em seu banco em 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 códigos de cadeia 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 fonte 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. Você usa 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 Histórico Avançado.

Você pode usar tabelas padrão ou tabelas blockchain para armazenar o banco de dados de histórico avançado. As tabelas Blockchain são tabelas somente anexadas à prova de adulteração, que podem ser usadas como um razão seguro e também estão disponíveis para transações e consultas com outras tabelas. Para obter mais informações, consulte Tabela 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.

Localize e Registre as 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 registre 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. Encontre 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 por meio da 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 Rede Virtual na Nuvem.

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

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

  5. Clique em Editar Todas as Regras.

  6. Adicione uma regra de entrada para permitir que qualquer tráfego recebido da internet pública acesse 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: Tudo

    • INTERVALO DE PORTAS DE DESTINO: 1521

    • Permite: Tráfego TCP para as 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 Histórico Rico.

Construa 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

Certifique-se de que o Usuário do Banco de Dados tenha Privilégios Corretos

Para que a funcionalidade de histórico avançado 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, ele deverá ser concedido 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 levem a uma sessão de banco de dados danificada, o que impede que o histórico avançado acompanhe 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 Histórico Avançado

Use a console para fornecer informações de conexão do banco de dados e selecionar os canais com os dados do razão chaincode que você deseja gravar no banco de dados de histórico avançado. Por padrão, os canais não estã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. Especifique 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çadas.
    1. Vá para a console e clique no botão Opções e clique em Configurar Histórico Avançado. 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 Rico é exibida.
    2. Informe o nome de usuário e a senha exigidos para acessar o banco de dados Oracle.
    3. No campo String de Conexão, informe 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, informará algo semelhante a <username>adw_high. Para localizar informações de conexão do Oracle Autonomous Data Warehouse, vá para o arquivo ZIP da wallet de credenciais e abra o 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 com base no banco de dados autônomo da Oracle.

      Observação:

      Quando você abre a caixa de diálogo Configurar Histórico Avançado novamente após 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 de 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 mais alterações nos valores de retenção, selecione Bloqueado.
      • Para especificar a retenção de tabela e linha 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 o histórico avançado nos canais que contêm os dados de chaincode que você deseja gravar no banco de dados de histórico avançado.
    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 de rich history. Clique no botão Mais Opções e selecione Configurar Histórico Avançado.
      A caixa de diálogo Configurar Histórico Rico é exibida.
    3. Clique na caixa de seleção Ativar Histórico Avançado. 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 privados, consulte O Que São Coletas de Dados Privados?. 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 transação relevante ou alteração no livro contábil ocorrer, as tabelas serão criadas no banco de dados de rich history.

Modificar a Conexão com o Banco de Dados de Histórico Avançado

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 do canal não terá efeito, mesmo depois que você clicar em Salvar, a menos que 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 transação relevante ou alteração no 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 Histórico Avançado. 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 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, informará algo semelhante a <username>adw_high. Para localizar informações de conexão do Oracle Autonomous Data Warehouse, vá para o arquivo ZIP da wallet de credenciais e abra o 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 fazer upload novamente do arquivo de wallet de credencial necessário. Esse arquivo contém credenciais de cliente e é gerado com base no banco de dados autônomo da Oracle.

    Observação:

    Quando você abre a caixa de diálogo Configurar Histórico Avançado novamente após 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 de 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 mais alterações nos valores de retenção, selecione Bloqueado.
    • Para especificar a retenção de tabela e linha 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 de Histórico Rico

Você pode permitir que os canais gravem dados do razão chaincode no banco de dados de histórico avançado e pode impedir que os canais gravem dados no banco de dados de histórico avançado. 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 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 do canal não terá efeito, mesmo depois que você clicar em Salvar, a menos que 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 transação relevante ou alteração no 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 cujo acesso você deseja modificar. Clique no botão Mais Opções e selecione Configurar Histórico Avançado.
    A caixa de diálogo Configurar Histórico Rico é exibida.
  3. Para ativar a coleta de dados do histórico avançado para o canal, marque a caixa de seleção Ativar Histórico Avançado. Para desativar a coleta de dados do histórico avançado do canal, desmarque a caixa de seleção Ativar Histórico Avançado.
  4. Para configurar o canal para coletar dados históricos avançados 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 Histórico Rico

Depois de configurar o banco de dados de histórico avançado, você pode 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 Rico.
    A caixa de diálogo Status do Histórico Rico é exibida, que inclui detalhes sobre replicação e status de 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 informações de configuração ou status de histórico avançado.

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 do histórico avançado e os detalhes da 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 avançadas do histórico.
    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 qualquer 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 de um canal.
    obpadmin/GetRichHistoryChannelConfig Controla a recuperação da configuração do histórico avançado atual de um canal.
  6. Clique em Atualizar ACLs.
O acesso à história rica é 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 de seus códigos de cadeia. Se você tiver optado 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 do 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 maneira 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 configurado, os dados privados também serão armazenados nesta 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
txnNo NÚMERO NOT NULL
txnId VARCHAR2 (128)  
txnTimestamp TIMESTAMP
txnIsDelete NÚMERO (1)

Tabela Estado

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 maneira 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 o quão atual é o 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 captura apenas informações sobre transações do aprovador - não transações de configuração ou qualquer outro tipo de transações do Hyperledger Fabric.

Coluna Tipo de dados
CHAINCODEID VARCHAR2 (256)
BLOQUEAR NO NUMBER
TXNNO NUMBER
TXNID VARCHAR2(128)
CARIMBO DE DATA/HORA DA TRANSAÇÃO TIMESTAMP
SUBMETIDO VARCHAR2(512)
ORGANIZAÇÃO DO EMISSOR VARCHAR2(512)
SUBMETIDO VARCHAR2(512)
CHAINCODETYPE VARCHAR2(32)
NOME DO CÓDIGO DE VALIDAÇÃO VARCHAR2(32)
APROVAÇÕES CLOB
ENTRADAS CLOB
EVENTOS CLOB
STATUS DA RESPOSTA NÚMERO (0)
RESPONSEPAYLOAD VARCHAR2(1024)
BOLSA CLOB
CRIADOR DE BLOCOS VARCHAR2(512)
PORTUGUÊS DO BRASIL VARCHAR2(512)
CRIADOR DE BLOCOS 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 eles podem ser atribuídos 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 apenas sobre a parte "Assunto" dos certificados, não a parte "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á as operações de leitura de lscc e as operações reais de namespace de chaincode.