ANEXO TÉCNICO
PROCEDIMENTOS PARA EXECUÇÃO DE SCRIPTS EM
BANCO DE DADOS DO GEMCO ANYWHERE
1. Introdução
Este manual aborda os procedimentos para atualização de bancos de dados do
sistema Gemco.
A atualização dos scripts é um procedimento importante que faz parte das rotinas
de manutenção do sistema. Com a atualização dos scripts são criadas tabelas, campos e
feitos ajustes essenciais à estrutura do banco de dados.
Ao receber uma nova versão do aplicativo Gemco ou modulares, o banco de dados
deve estar atualizado, ou seja, com os scripts executados, para que esta versão funcione
adequadamente.
Abordaremos os procedimentos de como obter os scripts, de sua organização,
nomenclatura, execução e erros comuns que pode-se enfrentar.
2. Escopo
As instruções deste manual atendem todos os produtos Bematech Gemco na base de
dados SQL Server ou Oracle.
3. Obtenha os scripts
Existem dois meios para a obtenção dos scripts:


Via CD enviado pela Bematech (pasta “scripts”)
Via FTP – BBS Bematech (www.bematech.com.br)
Via BBS, siga os seguintes passos:
1. Acesse www.bematech.com.br e clique em Área restrita.
2. Selecione BBS Gemco e entre com o usuário e a senha fornecidos pela Bematech,
selecione os arquivos em “Recebimento” e copie para um diretório de controle dos
Scripts em sua máquina.
Observação:
 Se não possuir nenhum usuário e senha, solicite ao Suporte Bematech.
 A BBS armazena os arquivos por tempo limitado, onde a cada 3 meses é realizada
uma limpeza automática dos arquivos disponibilizados. Por isso salientamos a
importância de sempre copiar os arquivos para a Estação ou Servidor assim que
disponíveis.
4. Organize os scripts
Organize seus scripts. A organização é fundamental para que não haja faltas na ordem
de execução e para que tenhamos o histórico do que já foi executado.
Sugerimos a criação de um pasta “scripts” no diretório C:\Suporte\ do próprio servidor
ou estação administrativa no Data Center. Abaixo desse diretório crie duas pastas:
“Executados” e “Novos”. Assim, teríamos a seguinte estrutura:
C:\Suporte\Scripts\Executados
C:\Suporte\Scripts\Novos
No banco de dados à tabela GEMCO_SCRIPTS_EXECUTADOS registra os scripts
executados.
Para listar os scripts executados, execute o seguinte comando no SQL Query Analizer
(SQL Server) ou SQL Plus (Oracle):
select * from gemco_scripts_executados order by script
5. Nomenclaturas padrão dos bancos de dados
Como referência, ao implantar o sistema Gemco, adotamos a seguinte nomenclatura
para os bancos de dados:
Produção
Treinamento e testes
Demonstração
CEP
SQL Server
dbGemco
dbTreinamento
dbDemo
dbCep
Oracle
GEMCO
TREINO
DEMO
CEP
6. Tipos e ordem de execução dos scripts
Os arquivos para atualização ou manutenção do banco de dados possuem a extensão
.SQL e são denominados scripts. Os scripts podem ser de dois tipos: banco de dados ou
segurança.
Nomenclatura para SQL Server:
 Scripts de banco de dados: IPLAA0000.SQL
 Scripts de segurança: SQDDMMAA.SQL
 Scripts de banco de dados - Modular: MODAA0000.SQL
Nomenclatura para Oracle:
 Scripts de banco de dados: IPLAA0000.ORA
 Scripts de segurança: ORDDMMAA.SQL
 Scripts de banco de dados - Modular: MODAA0000.ORA
Onde AA é o ano em que o script foi desenvolvido (exemplo: 13 refere-se a scripts do
ano de 2013).
Onde MOD é o modular em que o script foi desenvolvido (exemplo: FIN refere-se a
scripts do modular Financeiro).
Ordem de execução
A ordem de execução dos scripts para atualizar o banco de dados deve respeitar a
sequência de AA (Ano) e depois a sequência Numérica.
Já a execução dos scripts de segurança deve respeitar a sequência da Data.
Exemplo (no caso, para scripts SQL Server):
Suponha que tenham sido recebidos os seguintes scripts:
Script
Data
Hora
Tamanho
IPL130001.SQL 28/12/2013
14:30
60
SQ210913.SQL 21/09/2013
9:59
221
IPL140002.SQL 25/01/2014
15:34
181
SQ030114.SQL 03/01/2014
17:02
2.343
FIN14010.SQL
13:02
20
02/02/2014
Primeiro, deverão ser executados os scripts para atualização do banco de dados:
Script
Data
IPL130001.SQL 28/12/2013
IPL140002.SQL 25/01/2014
FIN14010.SQL
02/02/2014
Depois, deverão ser executados os scripts para atualização da segurança do Gemco.
Script
Data
SQ210913.SQL 21/09/2013
SQ030114.SQL 03/01/2014
7. Procedimento para executar os scripts em SQL Server
Os scripts deverão ser executados conforme a ordem apresentadas no tópico 7,
através do utilitário MS Query Analyzer ou SQL Server Management Studio.
1.
2.
3.
4.
SQL Server Informe o nome do Servidor de Banco de Dados
Login Name gemco
Password
gemco (ou a senha definida)
Ok
5. Após a conexão, certifique-se de que o banco apropriado esteja selecionado na barra
de ferramentas.
Na pasta identificada por QUERY, na metade superior da tela:
1.
2.
3.
4.
Escolha no Menu principal a opção FILE, OPEN
Na caixa OPEN FILE, selecione o arquivo .SQL
OPEN < ENTER >
Execute o script clicando na a opção QUERY, EXECUTE ou pressione as teclas
CTRL+E.
Repita os passos 1 à 4 para todos os scripts novos que ainda não foram executados.
Lembre-se sempre de seguir a sequência conforme explicado no tópico 7.
8. Procedimento para executar os scripts em Oracle
Os scripts deverão ser executados conforme a ordem apresentadas no tópico 7,
através do utilitário SQL Plus.
Conecte-se com o servidor, preenchendo as seguintes informações:
1. Username
GEMCO (no Oracle, o usuário determina qual é a base de dados
que sera atualizada)
2. Password
GEMCO (ou a senha definida)
3. Host String String de conexão com o servidor de banco de dados
4. Ok
< ENTER >
5. No prompt identificado por SQL> digite @<CAMINHO>\<SCRIPT>
Exemplo:
SQL> @C:\G2002\SCRIPTS\SET00010 <ENTER>
Repita o passo 5 para todos os novos scripts restantes.
Apêndice A – Principais mensagens de erro ao executar scripts em SQL Server

Mensagens na execução normal do script:
Mensagem
Explicação
The command(s) completed successfully. Indica que o comando executado não retorna
dados. Ocorre quando o comando executado
for: CREATE TABLE, ALTER TABLE (coluna e
remoção
de constraint), DROP TABLE,
CREATE INDEX, DROP INDEX.
(‘X’ row(s) affected)
Indica que o comando alterou ‘X’ linhas da
tabela em questão. Ocorre quando o comando
executado for: INSERT INTO, UPDATE,
DELETE, ALTER TABLE (adição: Primary Key,
Foreign Key).
Caution: Changing any part of an object Indica que o objeto ‘XX’ (objeto ou coluna) foi
name could break scripts and stored renomeado para ‘YY’. Informa também que
procedures.
poderão ocorrer problemas com stored
The ‘XX’ was renamed to ‘YY’.
procedures ou scripts.
Default bound to column.
Indica que foi associado um default a
determinada coluna de determinada tabela.
Default unbound from table column.
Indica que foi removida a associação de um
default de determinada coluna de determinada
tabela.

Para script executado mais de uma vez:
Mensagem
Server: Msg 2714, Level 16, State 6, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server]There is already an object named
‘XX’ in the database.
Server: Msg 2705, Level 16, State 4, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server]Column names in each table must
be unique. Column name ‘XX’ in table ‘YY’
is specified more than once.
Server: Msg 15335, Level 11, State 1,
Procedure sp_rename, Line 332
[Microsoft][ODBC SQL Server Driver][SQL
Server]Error: The @newname value ‘XX’
Explicação
Indica que o objeto ‘XX’ (tabela, primary key,
foreign key ou index) já existe no banco de
dados.
Indica que a coluna ‘XX’ já existe na tabela ‘YY’.
Indica a tentativa de renomear um objeto
(Tabela, Primary Key, Foreign Key ou Index)
com um nome que já existe no banco de dados.
is already in use as a object name and
would cause a duplicate that is not
permitted.
Server: Msg 15225, Level 11, State 1,
Indica a tentativa de renomear uma coluna com
Procedure sp_rename, Line 271
um nome que já existe no banco de dados.
[Microsoft][ODBC SQL Server Driver][SQL
Server]No item by the name of ‘XX’ could
be found in the current database ‘DB’,
given that @itemtype was input as '(null)'.

Mensagem de advertência que poderá retornar:
Mensagem
Server: Msg 1779, Level 16, State 1, Line
1
[Microsoft][ODBC SQL Server
Driver][SQL Server]Table 'XX' already has
a primary key defined on it.
Server: Msg 1750, Level 16, State 1, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server]Could not create constraint. See
previous errors.
Server: Msg 3701, Level 11, State 5, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server]Cannot drop the table ‘XX’,
because it does not exist in the system
catalog.
Server: Msg 1913, Level 16, State 1, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server]There is already an index on table
‘XX’ named ‘YY’.
Server: Msg 3703, Level 11, State 7, Line
1 [Microsoft] [ODBC SQL Server
Driver][SQL Server]Cannot drop the index
‘XX’, because it does not exist in the
system catalog.
Server: Msg 3701, Level 11, State 5, Line
1 [Microsoft] [ODBC SQL Server
Driver][SQL Server]Cannot drop the
trigger ‘XX’, because it does not exist in
the system catalog.
Explicação
Indica tentativa de criar uma primary key na
tabela ‘XX’, sendo que esta já existe.
Indica que a tabela ‘XX’ não pode ser apagada
porque não existe no banco de dados.
Indica que o índice ‘YY’ não pode ser apagado
porque já existe no banco de dados.
Indica que o índice ‘XX’ não pode ser apagado
porque não existe no banco de dados.
Indica que o trigger ‘XX’ não pode ser apagado
porque não existe no banco de dados.
Server: Msg 2627, Level 14, State 1, Line
1
[Microsoft][ODBC SQL Server
Driver][SQL Server]Violation of PRIMARY
KEY constraint ‘XX’. Cannot insert
duplicate key in object ‘YY’.
The statement has been terminated.
Server: Msg 547, Level 16, State 1, Line 1
[Microsoft][ODBC SQL Server
Driver][SQL Server]INSERT statement
conflicted with COLUMN FOREIGN KEY
constraint ‘XX’. The conflict occurred in
database ‘DB’, table ‘YY’, column ‘WW’.
The statement has been terminated.
Server: Msg 3728, Level 16, State 1, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server] ‘XX’ is not a constraint.
Server: Msg 3727, Level 16, State 1, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server]Could not drop constraint. See
previous errors.
Server: Msg 1776, Level 16, State 1, Line
1 [Microsoft] [ODBC SQL Server
Driver][SQL Server]There are no primary
or candidate keys in the referenced table
‘XX’ that match the referencing column list
in the foreign key ‘YY’.
Server: Msg 1750, Level 16, State 1, Line
1
[Microsoft][ODBC SQL Server Driver][SQL
Server]Could not create constraint. See
previous errors.

Indica que violou a primary key ‘XX’ da tabela
‘YY’. Ocorreu uma tentativa de inserir uma linha
na tabela com os campos que formam a primary
key ‘XX’ já existente na tabela ‘YY’.
Indica que violou a foreign key ‘XX’ da tabela.
Ocorreu uma tentativa de inserir uma linha na
tabela com um campo ‘WW’ que deveria existir
na tabela ‘YY’ e não existe.
Indica que o objeto ‘XX’ não foi encontrado no
banco de dados e portanto não foi possível
executar o comando para eliminar a constraint
(Primary Key ou Foreign Key). Ou não existe a
constraint ou então possui outro nome.
Indica tentativa de criar uma foreign key ‘YY’
sem existir a primary key na tabela referenciada
‘XX’.
Mensagens que necessitam da interferência do usuário:
Mensagem
Can't allocate space for object ‘X’ in
database ‘DB’ because the ‘Y’ segment is
full. If you ran out of space in Syslogs,
dump the transaction log. Otherwise, use
ALTER DATABASE or sp_extendsegment
to increase the size of the segment.
Explicação
Indica que o não há mais espaço no log de
transações, e este precisa ser limpo.
Normalmente este erro ocorre quando é um
comando muito extenso for executado no banco
de dados. Caso a limpeza do log não solucione
o problema, deve-se verificar o tamanho do
TEMPDB. Caso o erro persista, deve-se
verificar o tamanho do BANCO DE DADOS.
Apêndice B – Principais mensagens de erro ao executar scripts em Oracle

Mensagens na execução normal do script:
Mensagem
Table created.
Table altered.
Index created.
Sequence created.
‘X’ row(s) created.
‘X’ rows selected.
‘X’ row(s) updated.
‘X’ row(s) deleted.
Table truncated.
Table renamed.
Trigger created.
Procedure created.
PL/SQL procedure successfully
completed.
Table dropped.
Index dropped.
Sequence dropped.
Trigger dropped.
Procedure dropped.

Explicação
Indica que a tabela foi criada com sucesso. Ocorre
quando o comando executado for CREATE TABLE.
Indica que o comado ALTER TABLE foi realizado
com sucesso (Adicionar Coluna, associar Default,
criar Primary Key, criar Foreign Keyremover Primary
Key, remover Foreign Key ou modificar o tamanho /
tipo da coluna).
Indica que o índice foi criado com sucesso, através
do comando CREATE INDEX.
Indica que a sequência foi criada com sucesso.
Indica que o comando inseriu ‘X’ linhas da tabela em
questão. Ocorre quando o comando executado for
INSERT INTO.
Indica número de linhas selecionados pelo comando
SELECT (este retorno só aparecerá se o número de
linhas retornadas for maior ou igual a 6).
Indica que o comando alterou ‘X’ linhas da tabela em
questão. Ocorre quando o comando executado for
UPDATE.
Indica que ‘X’ linhas foram removidas da tabela em
questão. Ocorre quando o comando executado for
DELETE.
Indica que a tabela foi truncada, ou seja, todas as
linhas da tabela foram removidas.
Indica que a tabela foi renomeada. Este é o único
objeto que pode ser renomeado no Oracle.
Indica que o trigger foi criada com sucesso.
Indica que a stored procedure foi criada com
sucesso.
Indica que o procedimento (Stored Procedure ou um
PL/SQL) foi executado com sucesso.
Indica que a tabela foi eliminada com sucesso.
Indica que o índice foi eliminado com sucesso.
Indica que a sequência foi eliminada com sucesso.
Indica que o trigger foi eliminada com sucesso.
Indica que a stored procedure foi eliminada com
sucesso.
Para script executado mais de uma vez:
Mensagem
ERROR at line 1:
ORA-00955: name is already used by an
existing object.
ERROR at line 1:
ORA-01430: column being added already
exists in table
ERROR at line 1:
ORA-02260: table can have only one
primary key
ERROR at line 2:
ORA-02275: such a referential constraint
already exists in the table
ERROR at line 1:
ORA-04081: trigger 'XX_TR' already exists
ERROR at line 2:
ORA-01452: cannot CREATE UNIQUE
INDEX; duplicate keys found

Explicação
Indica que o objeto (tabela, primary key, foreign
key, índice, stored procedure, sequence) já
existe no usuário de banco de dados.
Indica que a coluna já existe no usuário de
banco de dados.
Indica que a tabela já possui primary key.
Indica que a tabela já possui foreign key.
Indica que o trigger ‘XX_TR’ já existe no usuário
de banco de dados.
Indica tentativa de criar índice único, sendo que
este já existe.
Mensagens de advertência:
Mensagem
ERROR at line 1:
ORA-02260: table can have only one
primary key
ERROR at line 1:
ORA-00942: table or view does not exist
ERROR at line 1:
ORA-01418: specified index does not exist
ERROR at line 1:
ORA-04080: trigger 'XX_TR' does not
exist
ERROR at line 1:
ORA-00001:
unique
constraint
(GEMCO.XX) violated
ERROR at line 1:
ORA-02291:
integrity
constraint
(GEMCO.X_FK_Y) violated - parent key
not found
Explicação
Indica tentativa de criar uma Primary Key na
tabela ‘XX’, sendo que esta já existe.
Indica que a tabela em questão não pode ser
apagada porque não existe no usuário de banco
de dados.
Indica que o índice em questão não pode ser
apagado porque não existe no usuário de banco
de dados.
Indica que o trigger ‘XX_TR’ não pode ser
apagado porque não existe no usuário de banco
de dados.
Indica que violou a Primary Key ou o índice
único ‘XX’. Ocorreu uma tentativa de inserir uma
linha na tabela com os valores das colunas que
formam a Primary Key ou o índice único já
existentes na tabela.
Indica que violou a foreign key ‘X_FK_Y’ da
tabela. Ocorreu uma tentativa de inserir uma
linha na tabela com um campo ‘WW’ que
deveria existir na tabela ‘Y’ e não existe.
ERROR at line 1:
ORA-02443: Cannot drop constraint
nonexistent constraint
Indica que o objeto não foi encontrado no
- usuário de banco de dados e portanto não foi
possível executar o comando para eliminar a
constraint (Primary Key ou Foreign Key). Ou não
existe a constraint ou então possui outro nome.
Indica que não foi possível eliminar a Primary
Key porque esta não existe.
ERROR at line 1:
ORA-02441: Cannot drop nonexistent
primary key
ERROR at line 3:
ORA-02270: no matching unique or
primary key for this column-list
ERROR at line 1:
ORA-02266: unique/primary keys in table
referenced by enabled foreign keys
ERROR at line 1:
ORA-00902: invalid datatype
ERROR at line 1:
ORA-00947: not enough values
ERROR at line 1:
ORA-02298: cannot enable
(GEMCO.XX_FK_Y) - parent keys not
found

Indica tentativa de criar uma Foreign Key sem
existir a Primary Key na tabela referenciada.
Indica tentativa de eliminar uma tabela que é
referenciada por outra com uma Foreign Key.
Indica tentativa de criar relacionamento para
Foreign Key com colunas de tipos diferentes.
Indica tentativa de inserir dados na tabela com
número de argumentos do Insert diferente do
número do Values.
Indica tentativa de criar um relacionamento
entre a tabela ‘XX’ e ‘Y’, sendo que o dado da
Foreign Key da tabela filho ‘XX’ não existe na
tabela pai ‘Y’.
Mensagens que necessitam da interferência do usuário:
Mensagem
Explicação
Warning: Trigger created with compilation Indica que o trigger foi gerada com erro de
errors.
compilação. Será necessário corrigi-lo. Para a
visualização do erro digitar no prompt do SQL
Plus:
SQL> show error trigger NOME_DO_TRIGGER
<enter>
Warning:
Procedure
created
with Indica que a stored procedure foi gerada com
compilation errors.
erro de compilação. Será necessário corrigi-lo.
Para a visualização do erro digitar no prompt do
SQL Plus:
SQL> show error procedure NOME_DA_SP
<enter>
ERROR at line 1:
Indica que o comando não foi terminado
ORA-00933: SQL command not properly apropriadamente. Será necessário corrigi-lo.
ended
ERROR at line 1:
ORA-01658: unable to create INITIAL
extent for segment in tablespace
GEMCO_DAT
ERROR at line 1:
ORA-01555: snapshot too old (rollback
segment too small)
ERROR at line 1:
ORA-01562: failed to extend rollback
segment ID = num
Indica que não foi possível executar o comando
(CREATE TABLE, INSERT INTO) porque não
existe mais espaço em disco disponível.
Indica que o segmento de rollback habilitado é
muito pequeno.
Indica que não foi possível aumentar o
segmento de rollback identificado por ‘NUM’.
Download

Procedimentos Para Execução de Scripts em Banco de Dados do