Preenchimento automático de registros num banco de dados
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Qua, 28 Nov 2007 9:14 pm
- Localização: Belém - PA
Para um projeto da faculdade, preciso implementar um banco de dados com 5 milhões de registros usando umas tabelas que o professor deu lá. Eu já tenho os relacionamentos e tudo, só preciso implementar o banco de dados no Oracle e fazer uma avaliação do desempenho dele a partir de uma consulta em SQL (tipo, o montante de recurso que ele vai consumir, o tempo que vai levar pra fazer a consulta, e coisa e tal). Como eu faço pra preencher esses 5 milhões de registros aleatoriamente? Existe algum script que possa fazer isso?
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
E ai Tiago, beleza?
Quais os campos da sua tabela?
Caso ela tenha alguns registros serviria pra você replicar esses registros qe já existem? Ou os dados que você fosse incluir poderia ser letras e números randomicos??
[]'s
Quais os campos da sua tabela?
Caso ela tenha alguns registros serviria pra você replicar esses registros qe já existem? Ou os dados que você fosse incluir poderia ser letras e números randomicos??
[]'s
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Qua, 28 Nov 2007 9:14 pm
- Localização: Belém - PA
Fala, Cristiano! Valeu pela atenção, cara, eu estou precisando demais dessa ajuda.
A tabela é bem simples, tem quatro colunas: FUNCIONARIO, TELEFONE, CARGO , SALARIO.
As tabelas preenchidas e o banco de dados nem precisam ser mostrados para o professor, então os campos podem ser preenchidos aleatoriamente com uma string, um real, um string e um real, respectivamente. O objetivo é avaliar o desempenho do banco de dados. Eu só preciso de um jeito de preencher automaticamente os campos. com quaisquer valores.
Obrigado mais uma vez! Se tiver mais alguém que possa ajudar, eu agradeço !
A tabela é bem simples, tem quatro colunas: FUNCIONARIO, TELEFONE, CARGO , SALARIO.
As tabelas preenchidas e o banco de dados nem precisam ser mostrados para o professor, então os campos podem ser preenchidos aleatoriamente com uma string, um real, um string e um real, respectivamente. O objetivo é avaliar o desempenho do banco de dados. Eu só preciso de um jeito de preencher automaticamente os campos. com quaisquer valores.
Obrigado mais uma vez! Se tiver mais alguém que possa ajudar, eu agradeço !
-
- Rank: DBA Sênior
- Mensagens: 365
- Registrado em: Ter, 24 Mai 2005 2:24 pm
- Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP
Araraquara - SP
Opa e ai beleza?
segue ai um codigo q eu montei aqui, eu não testei, mas da uma olhada ai.!!
[]'s
segue ai um codigo q eu montei aqui, eu não testei, mas da uma olhada ai.!!
DECLARE
v_FUNCIONARIO varchar2(256);
v_TELEFONE varchar2(256);
v_CARGO varchar2(256);
v_SALARIO varchar2(256);
v_din varchar2(15);
vCOUNT NUMBER(8);
BEGIN
FOR X IN 1..5000000 LOOP
select substr(replace(replace(replace(sysdate-x/24/60*3600,'/',''),' ',''),':',''),1,9) into v_din from dual;
dbms_random.initialize(v_din);
v_FUNCIONARIO := to_char( abs( dbms_random.random-(x / 1) ) );
dbms_random.terminate();
select substr(replace(replace(replace(sysdate-x/24/60/3600,'/',''),' ',''),':',''),1,9) into v_din from dual;
dbms_random.initialize(v_din);
v_TELEFONE := to_char( abs( dbms_random.random/x ) );
dbms_random.terminate();
dbms_random.initialize(v_din);
v_CARGO := to_char( abs( dbms_random.random/x/13/30/1800 ) );
dbms_random.terminate();
dbms_random.initialize(v_din);
v_SALARIO := to_char( abs( dbms_random.random/x/13/30-1800 )/1000000 );
dbms_random.terminate();
v_FUNCIONARIO := TRANSLATE(v_FUNCIONARIO,'0123456789','ABCDEFGHIJ');
v_TELEFONE := TRANSLATE(v_TELEFONE ,'0123456789','FSIUHWEHUS');
v_CARGO := TRANSLATE(v_CARGO ,'0123456789','OIXJVCOIJW');
INSERT INTO TABELA VALUES (v_FUNCIONARIO, v_TELEFONE, v_CARGO, v_SALARIO)
vCOUNT := vCOUNT+1;
IF vCOUNT = 10000 THEN
vCOUNT := 0;
COMMIT;
END IF;
END LOOP;
end;
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Segue uma outra solução (testada na versão 10g)
insert into teste_carga
select dbms_random.string(chr(mod(rownum, 25) + 65), 20)
, substr(lpad(abs(dbms_random.random), 8, '0'), 1, 8)
, dbms_random.string(chr(mod(rownum, 25) + 65), 12)
, to_number(substr(abs(dbms_random.random), 1, 8)) / 100
from dual
connect by level <= 5000000;
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Qua, 28 Nov 2007 9:14 pm
- Localização: Belém - PA
Obrigado, meus amigos, pela atenção e pelo seu tempo!
Se alguém tiver mais sugestões eu aceito, ok?
Um grande abraço!
Se alguém tiver mais sugestões eu aceito, ok?
Um grande abraço!
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Qua, 28 Nov 2007 9:14 pm
- Localização: Belém - PA
Cristiano, eu aproveitei o teu código e fiz algumas alterações pra chegar no que eu queria. Dá uma olhada em como ficou:
CREATE TABLE TAB_TIAGO (
FUNCIONARIO VARCHAR2(255),
TELEFONE VARCHAR2(255),
CARGO VARCHAR2(255),
SALARIO NUMBER(38)
)
TABLESPACE TBS_TIAGO;
DECLARE
TYPE T_FUNCIONARIO IS VARRAY(500) OF TAB_TIAGO.FUNCIONARIO%TYPE;
TYPE T_TELEFONE IS VARRAY(500) OF TAB_TIAGO.TELEFONE%TYPE;
TYPE T_CARGO IS VARRAY(500) OF TAB_TIAGO.CARGO%TYPE;
TYPE T_SALARIO IS VARRAY(500) OF TAB_TIAGO.SALARIO%TYPE;
v_FUNCIONARIO varchar2(256);
v_TELEFONE varchar2(256);
v_CARGO varchar2(256);
v_SALARIO varchar2(256);
VFUNCIONARIO T_FUNCIONARIO;
VTELEFONE T_TELEFONE;
VCARGO T_CARGO;
VSALARIO T_SALARIO;
v_din varchar2(15);
vCOUNT NUMBER(8);
BEGIN
FOR X IN 1..20 LOOP
vfuncionario:= t_funcionario();
vtelefone := t_telefone();
vcargo := t_cargo();
vsalario := t_salario();
FOR Y IN 1..500 LOOP
select substr(replace(replace(replace(sysdate-x/24/60*3600,'/',''),' ',''),':',''),1,9) into v_din from dual;
dbms_random.initialize(v_din);
v_FUNCIONARIO := to_char( abs( dbms_random.random-(x / 1) ) );
dbms_random.terminate();
select substr(replace(replace(replace(sysdate-x/24/60/3600,'/',''),' ',''),':',''),1,9) into v_din from dual;
dbms_random.initialize(v_din);
v_TELEFONE := to_char( abs( dbms_random.random/x ) );
dbms_random.terminate();
dbms_random.initialize(v_din);
v_CARGO := to_char( abs( dbms_random.random/x/13/30/1800 ) );
dbms_random.terminate();
dbms_random.initialize(v_din);
v_SALARIO := to_char( abs( dbms_random.random/x/13/30-1800 )/1000000 );
dbms_random.terminate();
begin
VFUNCIONARIO.EXTEND();
VTELEFONE.EXTEND();
VCARGO.EXTEND();
VSALARIO.EXTEND();
VFUNCIONARIO(Y) := TRANSLATE(v_FUNCIONARIO,'0123456789','ABCDEFGHIJ');
VTELEFONE(Y) := TRANSLATE(v_TELEFONE ,'0123456789','FSIUHWEHUS');
VCARGO(Y) := TRANSLATE(v_CARGO ,'0123456789','OIXJVCOIJW');
VSALARIO(Y) := V_SALARIO;
exception
when others then
null;
end;
END LOOP;
FORALL I IN 1..500 INSERT INTO TAB_TIAGO VALUES (VFUNCIONARIO(I), VTELEFONE(I), VCARGO(I), VSALARIO(I));
COMMIT;
END LOOP;
end;
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Qua, 28 Nov 2007 9:14 pm
- Localização: Belém - PA
Cristiano, demorou bastante. Com cinco milhões de registros, demorou 12 horas e meia pra fazer a consulta. Isso num Pentium 4 HT com 512 MB de memória. O nível de atividade do processador ficou em 100% o tempo todo, pensei que ia fundir o coitado do computador. Mas foi ótimo, aprendi um monte de coisas.
Valeu cara, fiquei feliz em usar o forum e saber que tem sempre alguém disposto a ajudar.
Um grande abraço!
Valeu cara, fiquei feliz em usar o forum e saber que tem sempre alguém disposto a ajudar.
Um grande abraço!
-
- Rank: DBA Pleno
- Mensagens: 264
- Registrado em: Dom, 19 Ago 2007 8:18 pm
- Localização: Ribeirão Preto - SP
Lucas de Souza
OCA Developer
Analista de sistemas
OCA Developer
Analista de sistemas
você penso em criar um indice ??
pra testa se muda muita coisa em fazer uma consulta com ou sem o indice =D
se tiver mais 12 horas livre, cria o indice e faiz o select denovo =x
pra testa se muda muita coisa em fazer uma consulta com ou sem o indice =D
se tiver mais 12 horas livre, cria o indice e faiz o select denovo =x
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes