Como escrever um procedimento armazenado no Oracle para implementar a inserção de dados em lote para teste de desempenho

Você pode usar as seguintes etapas para escrever um procedimento armazenado Oracle para implementar a inserção de dados em lote:

  1. Crie uma tabela para armazenar dados de teste, por exemplo:

    CREATE TABLE test_data (
    id NUMBER,
    nome VARCHAR2(50),
    idade NUMBER
    );

  2. Crie um procedimento armazenado que aceite um parâmetro n, indicando o número de linhas de dados a serem inseridas. No procedimento armazenado, use o loop FOR para inserir dados, por exemplo:

    CRIE OU SUBSTITUA O PROCEDIMENTO insert_test_data(n IN NUMBER) AS
    BEGIN
    FOR i IN 1…n LOOP
    INSERT INTO test_data VALUES (i, 'Name ' || i, i * 10);
    END LOOP;
    COMPROMETER-SE;
    FIM;

  3. Chame um procedimento armazenado para inserir dados, por exemplo:

    chame insert_test_data(10000);

    Isso inserirá 10.000 linhas de dados na tabela test_data.

Nota: No teste de desempenho real, a quantidade de dados e a implementação do procedimento armazenado devem ser ajustadas de acordo com os requisitos e ambiente de teste específicos. Ao mesmo tempo, deve-se prestar atenção à integridade dos dados e aos problemas de desempenho, como o uso de indexação, particionamento e outras tecnologias apropriadas para otimizar o desempenho da consulta.

Como chamar o procedimento armazenado regularmente?
No Oracle, você pode usar o pacote DBMS_SCHEDULER para chamar procedimentos armazenados periodicamente. As etapas específicas são as seguintes:

  1. Crie um procedimento armazenado, por exemplo:

    CREATE OR REPLACE PROCEDURE my_proc AS
    BEGIN
    -
    FIM lógico do procedimento armazenado;

  2. Para criar um trabalho, use o procedimento DBMS_SCHEDULER.CREATE_JOB para criar um trabalho, por exemplo:

    BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
    job_name => 'my_job',
    job_type => 'PLSQL_BLOCK',
    job_action => 'BEGIN my_proc; END;',
    start_date => SYSTIMESTAMP,
    repeat_interval => 'FREQ=DAILY; BYHOUR=0; BYMINUTE=0 ; BYSECOND=0;',
    habilitado => TRUE
    );
    FIM;

    O nome da tarefa é my_job, o tipo é PLSQL_BLOCK, a ação de execução é chamar o procedimento armazenado my_proc, a hora de início é a hora atual e o intervalo de repetição é uma vez por dia às 0:00 e a tarefa está habilitada .

  3. Para iniciar o trabalho, use o procedimento DBMS_SCHEDULER.ENABLE para iniciar o trabalho, por exemplo:

    BEGIN
    DBMS_SCHEDULER.ENABLE('meu_trabalho');
    FIM;

    Essa instrução inicia um trabalho chamado my_job.

Nota: Ao usar o pacote DBMS_SCHEDULER, você precisa ter permissões suficientes, como CREATE JOB, CREATE EXTERNAL JOB, MANAGE SCHEDULER e outras permissões. Ao mesmo tempo, você precisa prestar atenção ao tempo de execução e à frequência dos trabalhos para evitar afetar o desempenho do sistema.

Então, como excluir este trabalho agendado do Oracle?
Para excluir cron jobs para Oracle, você pode usar as seguintes etapas:

  1. Efetue login no usuário sys no banco de dados Oracle ou um usuário com autoridade DBA.

  2. Use o seguinte comando para visualizar todos os cron jobs atuais:

    SELECT * FROM dba_scheduler_jobs;

  3. Encontre o nome do trabalho cron que deseja excluir, exclua o trabalho com o seguinte comando:

    DROP JOB job_name;

    Entre eles, job_name é o nome do cron job a ser excluído.

  4. Confirme se o cron job foi excluído com o seguinte comando:

    SELECT * FROM dba_scheduler_jobs;

    Se o trabalho tiver sido excluído, ele não aparecerá nos resultados.

Observação: A exclusão de um trabalho agendado pode afetar a operação normal do banco de dados, prossiga com cuidado. Recomenda-se fazer backup dos dados relevantes antes da exclusão.

Escreva um script que adiciona aleatoriamente 200 dados à tabela de dados a cada 1 segundo em 10 minutos

Pergunta, aqui está um script Oracle que faz o que você deseja:

DECLARE
  i NUMBER := 1;
BEGIN
  WHILE i <= 10 LOOP
    INSERT INTO your_table (column1, column2, column3)
    SELECT dbms_random.string('U', 10), dbms_random.string('U', 10), dbms_random.string('U', 10)
    FROM dual
    CONNECT BY level <= 200;
    COMMIT;
    DBMS_LOCK.SLEEP(1);
    i := i + 1;
  END LOOP;
END;

Observe que você precisará substituir "your_table" pelo nome da tabela real à qual está adicionando dados e alterar os nomes das colunas e os tipos de dados conforme necessário. Este script usa o pacote DBMS_RANDOM para gerar strings aleatórias e usa a função DBMS_LOCK.SLEEP para pausar por 1 segundo entre cada inserção. Por fim, use a instrução COMMIT para garantir que os dados persistam no banco de dados.

Você pode modificá-lo para mim? Agora só preciso que o campo id seja aleatório e os outros campos sejam valores fixos

DECLAREi
NÚMERO := 1;
BEGIN
WHILE i <= 10 LOOP
INSERT INTO your_table (id, column1, column2, column3)
SELECT dbms_random.value(1, 1000), 'fixed_value1', 'fixed_value2', 'fixed_value3'
FROM dual
CONNECT BY level <= 200;
COMPROMETER-SE;
DBMS_LOCK.SLEEP(1);
i := i + 1;
END LOOP;
FIM;


请注意,您需要将“your_table”替换为您要向其中添加数据的实际表名,并根据需要更改列名和数据类型。此脚本使用DBMS_RANDOM包生成随机数,并使用DBMS_LOCK.SLEEP函数在每次插入之间暂停1秒钟。最后,使用COMMIT语句确保数据被持久化到数据库中。

Acho que você gosta

Origin blog.csdn.net/qq_41568648/article/details/130744331
Recomendado
Clasificación