Posts Tagged base de dados

Oracle: Duplicar base de dados

Seja por precisarmos de mudar de servidor, ou por querermos ter uma réplica da base de dados de produção para testes, o certo é que, às vezes temos necessidade de copiar/duplicar uma base de dados oracle.

Como fazer?

1.º passo:
Para mim o mais importante é garantir que antes de fazer o que quer que seja têm uma cópia de segurança actualizada da base de dados que querem copiar/clonar.

2.º passo:
Efectuar o login, na base de dados que queremos copiar, como SYSDBA utilizando o SQL+ e correr o seguinte comando:

alter d_atabase backup controlfile to trace;

Este comando vai criar um ficheiro com os comandos necessários para criar a base de dados.
Se não souber qual é a directoria onde são guardados os ficheiros, pode abrir o ficheiro init.ora e ver o parametro: user_dump_dest

O ficheiro gerado será semelhante a:

...
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "BD_PRODUCAO" NORESETLOGS
NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 2
MAXDATAFILES 240
MAXINSTANCES 1
MAXLOGHISTORY 113
LOGFILE
GROUP 1 'D:\ORACLE\ORADATA\BD_PRODUCAO\REDO01.LOG'  SIZE 10M,
GROUP 2 'D:\ORACLE\ORADATA\BD_PRODUCAO\REDO02.LOG'  SIZE 10M,
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE\ORADATA\BD_PRODUCAO\SYSTEM01.DBF',
'D:\ORACLE\ORADATA\BD_PRODUCAO\MYDATABSE.DBF'
;
# Recovery is required if any of the datafiles are restored
# backups, or if the last shutdown was not normal or immediate.
RECOVER D_ATABASE
# Database can now be opened normally.
ALTER D_ATABASE OPEN;

3.º passo:

Fazer o shutdown da base de dados em produção

shutdown immediate

4.º passo:
Copiar os ficheiros da base de dados de produção para a nova localização.

5.º passo:
Alterar o control file (ficheiro criado no 2.º passo).

As alterações a efectuar são:

  1. Remover todo o conteúdo do ficheiro até à linha onde está escrito “STARTUP NO MOUNT”;
  2. Onde está:  CREATE CONTROLFILE REUSE DATABASE “BD_PRODUCAO” NORESETLOGS
    Deve passar a estar:  CREATE CONTROLFILE SET DATABASE “BD_REPLICA” RESETLOGS
  3. Remover os comandos recover d_atabase e alter d_atabase open;
    # Recovery is required if any of the datafiles are restored
    # backups, or if the last shutdown was not normal or immediate.
    RECOVER D_ATABASE
    # Database can now be opened normally.
    ALTER D_ATABASE OPEN;
    
  4. Corrigir os caminhos para os novos ficheiros de dados.
    Neste caso vamos partir do principio que apenas estamos a criar uma réplica da BD e não a muda-la de servidor.
    Onde está: D:\ORACLE\ORADATA\BD_PRODUCAO\
    Deve estar: D:\ORACLE\ORADATA\BD_REPLICA\
    Devem fazer o mesmo para os LOG FILES;
  5. Guardar as alterações criadas com o nome “novadb_create_controlfile

6.º passo:
Criar um novo ficheiro INIT.ORA para a nova base de dados.
Para isso o mais simples é copiar o ficheiro da base e dados em produção para um novo.
Exemplo: copiar o “initBD_PRODUCAO.ora” para “initBD_REPLICA.ora
Devem ter em atenção que é necessário alterar o conteúdo do novo ficheiro(initBD_REPLICA.ora), nomeadamente os parametros:

* audit_file_dest
* background_dump_dest
* control_files
* core_dump_dest
* log_archive_dest
* user_dump_dest

convém verificar se existe mais algum parâmetro que faça referência à base de dados antiga.

7.º passo:
Copiar o ficheiro de passwords (orapwd) para a nova localização.

8.º passo:
Iniciar a nova base de dados:

@novadb_create_controlfile

9.º passo:
Colocar a nova base de dados em modo ArchiveLog:

FIM!

PS: não se esqueçam de meter a base de dados produção em cima!

Tags: ,

SQL Server – Order by com valores NULL

Imaginem uma tabela (alunos) com dois campos: Nome e Numero.

table-alunos

Ao executar o seguinte código,

SELEC T * FROM ALUNOS ORDER BY numero;

obtemos como resultado:

table-alunos-order-by

Para obtermos dos alunos ordenados por número sem ter em conta os NULL temos de alterar o código sql para:

SELEC T * FROM ALUNOS ORDER BY (CASE WHEN numero IS NULL THEN 1 ELSE 0 END), numero;

Assim obtemos como resultado:

table-alunos-order-by-null

:)

Tags: , ,

SQL Server: Read-Only Databases

Hoje ao fazer o attach de uma base de dados num SQL Server 2008 Express verifiquei que a base de dados ficou em modo Read-Only.

A forma mais simples que encontrei para resolver esta questão foi através de um script:

Alte r database [nomeDaBaseDeDados] set read_write

Exemplos:

Alte r database clientes set read_write
Alte r database "c:\websites\x\app_data\teste.mdf" set read_write

Isto vai ligar o modo read/write na base de dados indicada.

Tags: , ,