Tutorial Parte 2 - Configurando uma instancia
No tutorial anterior foi demonstrado como instalar o Informix, uma instalação simples sem grandes parametrizações. Foi instalado apenas o produto IDS (banco de dados).
Agora iremos ver como configurar uma instancia e coloca-la online, pronta para que possa ser criado o primeiro banco de dados. Este procedimento é chamado de "inicializar" a instancia, o que a grosso modo poderia ser comparavel ao "formatar" .
No Informix a configuração básica da instancia é bem simples , é baseada praticamente em apenas 2 arquivos: um de configuração do banco e outro para configuração de rede.
- Definições necessárias para a configuração
- Criando arquivos de configuração
- Iniciando o Informix
- Fim desta parte
Definições necessárias para a configuração
Antes de iniciar com o arquivo de configuração é preciso saber onde o banco de dados será armazenado, em qual disco, diretório e nome dos arquivos. Se for utilizado conexões TCP/IP para acesso ao banco também será necessário verificar a configuração de rede (mas isto pode ser feito após a inicialização da instancia).
Se você ainda não leu nada sobre a arquitetura do informix, leia este artigo antes de continuar para que possa ter uma noção básica.
Configurando o local de armazenamento da instancia
A menor unidade de alocação de espaço no Informix são os Chunks, portanto a relação é "local X Chunk".
Para cada chunk deve ser definido um path e nome de arquivo/device , por exemplo "/dados/chunk1" .
O local onde um chunk é salvo pode ser um arquivo comum no file system, um block device ou um raw device, em termos de configuração e compatibilidade não há restrições. Para uma mesma instancia pode-se ter chunks armazenados de todos os modos , exemplos:
Chunk 1 - arquivo : /dados/chunk1.dados Chunk 2 - block device : /dev/hda6 Chunk 3 - raw device : /dev/raw/raw1Para informações sobre vantagens/desavantagens de cada modo, leia o artigo sobre a arquitetura do Informix.
Até a versão 7.3 do Informix um chunk pode utilizar no maximo 2 GBytes de espaço, a partir da versão 9.4 este limite foi extendido para até 4 TeraBytes por chunk.
Todo chunk possui duas caracteristicas básicas, seu tamanho e offset. O offset é utilizado principalmente em alocações de block/raw device. Como já deve ter reparado , quando utilizado algum deles o apontamento para onde os dados serão salvos é diretamente para o disco, então veja no exemplo abaixo o porque da necessidade do offset.
Obs.: Não iremos utilizar offset por enquanto, então se desejar pode pular esta explicação.
Considere dois disco de 40 GBytes configurado com algumas partições da seguinte maneira Disco A , partição 1 - /dev/hda1 , 10 GB File System Ext3 , Boot do linux Disco A , partição 2 - /dev/hda2 , 10 GB File System Ext3 , Root do linux , onde todos os programas estão instalado Disco A , partição 3 - /dev/hda3 , 10 GB Sem File System, espaço reservado para utilização do banco de dados Disco A , partição 4 - /dev/hda4 , 10 GB Sem File System, espaço reservado para utilização do banco de dados Disco B , partição 1 - /dev/hdb1 , 20 GB Sem File System, espaço reservado para utilização do banco de dados Disco B , partição 2 - /dev/hdb2 , 20 GB Sem File System, espaço reservado para utilização do banco de dados Vamos supor que o banco de dados írá utilizar 55 GBytes de dados. Será necessário a criação de no minimo 4 chunks apenas para os dados (um para cada partição). Porém você ainda precisa configurar outros chunks com finalidade administrativas como área temporária (utilizado em SQLs com sorts , etc) , espaço para o root do banco de dados (que é o local onde fica todas as informações da sua instancia) espaço do Logical Log e Physical log, que são espaços utilizados para controle de transações, Disaster Recovery e etc. Desta forma, fica a pegunta, como você administra tantos chunks para apenas 4 devices? Para isso utilizamos o offset , onde apontamos mais de um chunk para o mesmo device mas separamos seu local de armazenamento através do offset. O offset do chunk deve ser um valor em Kbytes de onde o chunk anterior finaliza, veja como poderia ficar a alocação do espaço baseado no exemplo de discos já descrito: Nome Chunk Device Tamanho Offset ------------- ------------ ------------- ------------- root /dev/hda3 200 MB 0 logical-log /dev/hda3 800 MB 200 MB physical-log /dev/hda3 500 MB 1000 MB temporario1 /dev/hda3 200 MB 1500 MB dados1 /dev/hda3 8200 MB 1800 MB temporario2 /dev/hda4 400 MB 0 MB dados2 /dev/hda4 9600 MB 400 MB temporario3 /dev/hdb1 500 MB 0 MB dados3 /dev/hdb1 19500 MB 500 MB temporario4 /dev/hdb2 500 MB 0 MB dados4 /dev/hdb2 19500 MB 500 MB
Quando utilizado arquivos, esta configuração de offset ainda funciona porém não existe necessidade de utiliza-lo já que a criação de arquivos para novos chunks é algo dinâmico e fácil de realizar através de linha de comando.
Não "quebre a cabeça" com isso ainda, pois não pretendo utiliza-lo neste momento para não gerar confusão, iremos trabalhar com arquivos.
Portanto prepare um local no seu disco para alocar pelo menos 500 MB de dados, de preferência um path fácil e curto. Aqui irei utilizar o path "/ifmxdados" que é um ponto de montagem para um File System EXT2 com 700 MB.
# df -h /ifmxdados Filesystem Size Used Avail Use% Mounted on /dev/sdb6 695M 728K 659M 1% /ifmxdados # mount |grep ifmxdados /dev/sdb6 on /ifmxdados type ext2 (rw) # ls -ld /ifmxdados drwxrwx--- 3 informix informix 4096 2009-06-10 14:44 /ifmxdadosRepare que alterei o owner para informix:informix e acertei a permissão para 770. Isto não é obrigatório, mas recomendável.
Definindo os arquivos dos chunks
Como iremos trabalhar com arquivos para alocar o espaço do chunk ,teremos de criar estes arquivos manualmente. Para isso precisamos definir um nome para cada arquivo/chunk, portanto para facilitar pense sempre da seguinte forma para nomea-los:
- Um chunk sempre irá pertencer a um unico dbspace , portanto , associe o nome do chunk ao dbspace
- Um dbspace pode possuir mais de um chunk, portanto é preciso numerar os chunks para não ter problema de nome duplicado
A configuração que temos como objetivo agora é focada nos dbspaces basicos necessários, segue uma lista com nomes sugeridos por mim (este nome pode ser qualquer outro de sua preferência).
- rootdbs: É o dbspace mais critico da instancia, nele é salvo todas as informações da instancia. É o primeiro a ser criado na instancia.
- llog: É onde os Logical Logs são salvos. É um log circular de todas as transações realizadas na instancia.
- plog: Chamado de Physical Log, utilizado em conjunto com Logical Log, porém neste é utilizado para os Before Images dos dados e em situações de Recovery
- temp1: Dbpsace para dados temporários
- dados1: Para armazenamento dos banco de dados que iremos criar.
Baseado nos dbspaces acima iremos criar os arquivos dos chunks. Por questões de segurança todo chunk utilizado pelo Informix obrigatóriamente precisa ter o usuário e grupo como informix e as permissões de leitura e gravação apenas para o usuário e grupo (chmod 660).
# Aqui, já conectado com o usuário informix (criado no Tutorial Parte 1) # iremos criar os chunks. Cada um terá o mesmo nome utilizado pelo dbspace # porém com a extenção ".chN" onde o N é o numero do chunk para o dbspace, o # que por enquanto , é tudo igual a 1. # /ifmxdados$ touch rootdbs.ch1 llog.ch1 plog.ch1 temp1.ch1 dados1.ch1 /ifmxdados$ ls -l *.ch* -rw-r----- 1 informix informix 0 2009-06-10 14:44 dados1.ch1 -rw-r----- 1 informix informix 0 2009-06-10 14:44 llog.ch1 -rw-r----- 1 informix informix 0 2009-06-10 14:44 plog.ch1 -rw-r----- 1 informix informix 0 2009-06-10 14:44 rootdbs.ch1 -rw-r----- 1 informix informix 0 2009-06-10 14:44 temp1.ch1 /ifmxdados$ chmod 660 *.ch* /ifmxdados$ ls -l *.ch* -rw-rw---- 1 informix informix 0 2009-06-10 14:44 dados1.ch1 -rw-rw---- 1 informix informix 0 2009-06-10 14:44 llog.ch1 -rw-rw---- 1 informix informix 0 2009-06-10 14:44 plog.ch1 -rw-rw---- 1 informix informix 0 2009-06-10 14:44 rootdbs.ch1 -rw-rw---- 1 informix informix 0 2009-06-10 14:44 temp1.ch1
Pronto, esta parte já está ok.
Configuração de rede
Já iremos coletar as informações para o banco para funcionar através de rede. Isto não é necessário faze-lo agora, mas por ser um proecdimento simples vou aproveitar o momento.
A unica coisa que precisamos é ver qual IP o servidor esta utilizando. Para isso utilize o comando ifconfig .
$ /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:22:15:85:7D:62
inet addr:172.30.252.207 Bcast:172.30.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:248411 errors:0 dropped:0 overruns:0 frame:0
TX packets:2231 errors:0 dropped:0 overruns:0 carrier:2
collisions:0 txqueuelen:1000
RX bytes:16569451 (15.8 Mb) TX bytes:229730 (224.3 Kb)
Interrupt:219
eth0:1 Link encap:Ethernet HWaddr 00:22:15:85:7D:62
inet addr:172.30.252.210 Bcast:172.30.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:219
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:100 (100.0 b) TX bytes:100 (100.0 b)
No meu caso irei utilizar o IP 172.30.252.207 definido na interface eth0.Neste momento não recomendo utilizar hostnames porque dependendo de como estiver a configuração da sua maquina você poderá ter problemas de DNS reverso, o que trata-se de configuração de SO. Então para manter as coisas simples vamos trabalhar apenas com IP.
Criando arquivos de configuração
Para o Informix saber onde estão os arquivos de configurações ele utiliza váriaveis de ambiente do SO, lembra que no final do Tutorial Parte 1 o instalador informa quais variáveis devem ser definidas?
Estas variaveis devem ser definidas na sessão antes da execução de qualquer comando do informix, pense nelas como ponteiros para os arquivos de configuração.
Como já foi falado, são apenas dois arquivos a configuração do Informix, estes arquivos são chamado de onconfig e sqlhosts e iremos ver como configura-los a seguir.
Variáveis de ambiente
Neste momento iremos definir manualmente as váriaveis básica. Posteriormente irei demonstrar como automatizar este processo para evitar muita digitação.
Segue lista de variáveis básicas:
- INFORMIXSERVER: Toda instancia do informix possui um nome principal e é nesta variável que é definido qual instancia será utilizada. Aqui irei utilizar o nome "idstitan"
- INFORMIXDIR: Diretório onde o produto IDS foi instalado, no meu caso: /dados/IBM/ids1150uc4de
- ONCONFIG: Nome do arquivo de configuração da instancia.
- INFORMIXSQLHOSTS: Path e nome do arquivo de configuração de rede
- PATH: Variavel do Linux, onde deve ser incluido o path do diretório $INFORMIXDIR/bin
$ export INFORMIXSERVER=idstitan
$ export INFORMIXDIR=/dados/IBM/ids1150uc4de
$ export INFORMIXSQLHOSTS=/dados/IBM/ids1150uc4de/etc/sqlhosts.idstitan
$ export ONCONFIG=onconfig.idstitan
$ export PATH=$PATH:$INFORMIXDIR/bin
ONCONFIG
No arquivo onconfig é definido toda configuraçao do Informix. Sua localização é fixa no sub-diretório "etc" de onde o produto foi instalado, no nosso caso: $INFORMIXDIR/etc , /dados/IBM/ids1150uc4de/etc
No diretório "etc" já deverá existir um arquivo chamado onconfig.std que serve como modelo. Nele há todas as opções definidas com valores padrão . Nunca apague este arquivo e nunca altere os valores nele (a não ser que você saiba o que está fazendo).
O nosso arquivo de configuração será uma copia do onconfig.std e nesta cópia iremos alterar apenas os valores que são necessários.
$ cd $INFORMIXDIR/etc
$ cp -v onconfig.std $ONCONFIG
`onconfig.std' -> `onconfig.idstitan'
Para editar o arquivo , utilize o editor de sua preferência (pico, joe, jpico, vim, vi, kwrite ).Segue abaixo os unicos parametros que iremos alterar com seus novos valores.
# Este parametro define o chunk do dbspace root da instancia ROOTPATH /ifmxdados/rootdbs.ch1 # Define path para salvar backup, o que por enquanto deve ser descartado (null) TAPEDEV /dev/null LTAPEDEV /dev/null # Toda instancia do Informix deve possuir um código unico (na mesma maquina/rede) SERVERNUM 1 # Define o nome da instancia DBSERVERNAME idstitan # Define configurações de conectividade NETTYPE soctcp,1,50,NETDe modificações, apenas isso por enquanto.
Aproveite para observar os valores dos parametros MSGPATH, CONSOLE, LOGFILES, LOGSIZE, PHYFILE e DBSPACETEMP. Estes paramêtros podem ser ou serão modificados posteriormente.
Observe também que neste arquivo existem comentários explicando com um bom nivel de detalhe cada paramêtro.
SQLHOSTS
O arquivo sqlhosts faz o relacionamento entre instancia e interface de comunicação. Ele também é utilizado pela aplicação cliente para que ela saiba como acessar o banco de dados.
O local onde o arquivo é salvo é por padrão no diretório "etc" do produto, porém não é uma regra, assim este arquivo pode ser salvo em qualquer outro diretório da maquina , por exemplo o "/etc" .
No diretório $INFORMIXDIR/etc também existe um sqlhosts.std que pode servir de modelo para o novo arquivo
Crie o novo sqlhosts
$ cp -v sqlhosts.std $INFORMIXSQLHOSTS
`sqlhosts.std' -> `/dados/IBM/ids1150uc4de/etc/sqlhosts.idstitan'
Edite o novo sqlhosts com o editor de sua preferencia e incluia uma linha como essa
idstitan onsoctcp 172.30.252.207 9088O conteúdo do sqlhosts possui uma formatação fixa de 5 campos por linha, separados por espaços ou tabulações:
[nome_instancia] [protocolo] [hostname] [porta] [opções]Como deve ter reparado , apesar de ter 5 campos, informamos apenas os 4 primeiros. O ultimo campo são opções utilizadas para tunning ou outros motivos administrativos, neste momento não há necessidade de defini-los.
Uma Observação, no exemplo aqui utilizei o valor númerico 9088 para espeficiar a porta do Informix, isso funciona, porém o modo correto de se configurar isso em um ambiente é utilizando o arquivo /etc/services onde adicionariamos no arquivo uma linha com o conteúdo similar a este:
ifx_port1 9088/tcp # Informix port 1Então no arquivo SQLHOSTS ao invés de informar o número 9088, informamos a porta "ifx_port1" :
idstitan onsoctcp 172.30.252.207 ifx_port1
Iniciando o Informix
Pronto! toda configuração básica foi realizada .
Mas antes de continuar, de apenas mais uma conferida:
- Os arquivos dos chunks foram criados e estão com as permissões corretas?
- As variaveis de ambiente estão definidas?
- O arquivo $ONCONFIG foi alterado ?
- O arquivo $INFORMIXSQLHOSTS foi alterado ?
O comando para iniciar é o oninit . Porém por se tratar de uma inicialização da instancia, precisamos usa-lo com o parâmetro -i . Opcionalmente podemos utilizar o parâmetro -v , que é o verbose mode , modo mais descritivo, onde exibe cada passo que o banco está realizando, com este parâmetro se ocorrer algum problema será mais facil de identificar a origem.
Repare que listei o arquivo de chunk do root antes e depois de inicializar , antes o arquivo estava zerado e depois já tinha um tamanho de 200MB , alocado pelo informix.
$ ls -oh /ifmxdados/rootdbs.ch1 -rw-rw---- 1 informix 0 2009-06-10 14:44 /ifmxdados/rootdbs.ch1 $ oninit -iv # !!! SECURITY PROBLEM !!! # /dados/IBM/ids1150uc4de (path is not trusted) # Analysis: # User Group Mode Type Secure Name # 0 root 0 root 0755 DIR YES / # 0 root 0 root 0777 DIR NO /dados # 1001 informix 1000 informix 0775 DIR NO /dados/IBM # 1001 informix 1000 informix 0755 DIR NO /dados/IBM/ids1150uc4de # Name: /dados # Problem: the permissions 0777 include public write accessOoooooops! Conforme já citei na parte 1 do tutorial, na versão 11.50 UC4 foi incluido novas validações de segurança. Caso o ambiente não passe pela validação, você terá duas opções, ignorar ou corrigir. No meu caso o diretório /dados onde instalei o produto não é seguro mas eu não quero mudar a permissão dele pois tenho outros arquivos pessoais neste diretório. Então vou configurar para ignorar estas validações para este diretório.
Nesta pagina do Information Center da IBM você terá informações sobre todos os pré-requisitos de segurança e nesta pagina terá as informações especificas sobre o método que irei utilizar para ignorar esta situaçãp.
$ su Password: # echo "/dados" > /etc/informix/trusted.insecure.directories # chmod 444 /etc/informix/trusted.insecure.directories # exit exit $ oninit -iv This action will initialize IBM Informix Dynamic Server; any existing IBM Informix Dynamic Server databases will NOT be accessible - Do you wish to continue (y/n)? y Checking group membership to determine server run mode...succeeded Reading configuration file '/dados/IBM/ids1150uc4de/etc/onconfig.idstitan'...succeeded Creating /INFORMIXTMP/.infxdirs...succeeded Creating infos file "/dados/IBM/ids1150uc4de/etc/.infos.idstitan"...succeeded Linking conf file "/dados/IBM/ids1150uc4de/etc/.conf.idstitan"...succeeded Checking config parameters...succeeded Writing to infos file...succeeded Allocating and attaching to shared memory...succeeded Creating resident pool 10572 kbytes...succeeded Allocating 100016 kbytes for buffer pool of 2K page size...succeeded Initializing rhead structure...succeeded Initialization of Encryption...succeeded Initializing ASF...succeeded Initializing Dictionary Cache and SPL Routine Cache...succeeded Bringing up ADM VP...succeeded Creating VP classes...succeeded Onlining 0 additional cpu vps...succeeded Onlining 2 IO vps...succeeded Forking main_loop thread...succeeded Initializing DR structures...succeeded Forking 1 'soctcp' listener threads...succeeded Starting tracing...succeeded Initializing 8 flushers...succeeded Initializing log/checkpoint information...succeeded Initializing dbspaces...succeeded Opening primary chunks...succeeded Opening mirror chunks...succeeded Validating chunks...succeeded Creating database partition...succeeded Initialize Async Log Flusher...succeeded Starting B-tree Scanner...succeeded Initializing DBSPACETEMP list...succeeded Checking database partition index...succeeded Initializing dataskip structure...succeeded Checking for temporary tables to drop...succeeded Forking onmode_mon thread...succeeded Creating periodic thread...succeeded Starting scheduling system...succeeded Verbose output complete: mode = 5 $ ls -oh /ifmxdados/rootdbs.ch1 -rw-rw---- 1 informix 196M 2009-06-11 15:42 /ifmxdados/rootdbs.ch1Observe também que o informix irá pedir uma confirmação da execução do comando, isso se deve ao parâmetro -i. Este parâmetro seria como uma formatação da instancia, ou seja, se você executar este comando em uma instancia que contem dados reais, estes dados serão perdidos.
Pronto , aqui já temos a instancia no ar.
Neste momento se quiser você já até pode utiliza-la , criar um banco de dados . Mas faça isso apenas se for pequenos testes, pois devido ela estar com as configurações padrões , está limitada de várias formas.
Verificando status do banco e logs
Para verificar o status dela utilize onstat -
$ onstat -
IBM Informix Dynamic Server Version 11.50.UC4DE -- On-Line -- Up 00:00:10 -- 144144 Kbytes
O local onde o arquivo de log é gerado é definido no arquivo onconfig, parâmetro MSGPATH. Ele pode ser visualizado manualmente ou através do comando onstat -m (mas este exibe apenas as ultimas linhas).$ onstat -m IBM Informix Dynamic Server Version 11.50.UC4DE -- On-Line -- Up 00:00:43 -- 144144 Kbytes Message Log File: /dados/IBM/ids1150uc4de/tmp/online.log 09:52:45 DR: ENCRYPT_HDR is 0 (HDR encryption Disabled) 09:52:45 Event notification facility epoll enabled. 09:52:45 IBM Informix Dynamic Server Version 11.50.UC4DE Software Serial Number AAA#B000000 09:53:12 IBM Informix Dynamic Server Initialized -- Complete Disk Initialized. 09:53:12 Started 1 B-tree scanners. 09:53:12 B-tree scanner threshold set at 5000. 09:53:12 B-tree scanner range scan size set to -1. 09:53:12 B-tree scanner ALICE mode set to 6. 09:53:12 B-tree scanner index compression level set to med. 09:53:12 Dataskip is now OFF for all dbspaces 09:53:12 Checkpoint Completed: duration was 0 seconds. 09:53:12 Fri Jun 12 - loguniq 1, logpos 0xe8, timestamp: 0xc2 Interval: 2 09:53:12 Maximum server connections 0 09:53:12 Checkpoint Statistics - Avg. Txn Block Time 0.000, # Txns blocked 1, Plog used 6, Llog used 2 09:53:12 On-Line Mode 09:53:12 Building 'sysmaster' database ... 09:53:25 Booting Language <spl> from module <> 09:53:25 Loading Module <SPLNULL> $ grep MSGPATH $INFORMIXDIR/etc/$ONCONFIG # MSGPATH - The path of the IDS message log file MSGPATH $INFORMIXDIR/tmp/online.log
Parando a instancia
Para realizar o shutdown da instancia utilize o comando onmode -ky.
$ onstat - IBM Informix Dynamic Server Version 11.50.UC4DE -- On-Line -- Up 00:00:10 -- 144144 Kbytes $ onmode -ky $ onstat - shared memory not initialized for INFORMIXSERVER 'idstitan'
Fim desta parte
Como esta parte do tutorial ficou muito extensa decidi quebrar em duas, onde na próxima irei mostrar como acertar a configuração do banco para um modo mais perto do ideal de se trabalhar.
Para acessar os dados, criar tabelas, executar SQLs e outra coisas, utilize o comando dbaccess, para mais informações sobre ele, leia o artigo Quais os parametros uteis do dbaccess e modo de utilização?.
- 1409 leituras





Instalação do IDS
Obrigado!
Obrigado Emerson!
Apenas lembrando que se tiver duvidas, utilize o fórum do IIUG : http://www.iiug.org/forums/iiug-por/
Instalação do IDS
RE: Instalação do IDS
Olá Herlandro,
Sim, realmente estava errado! Obrigado pela observação e pelo elogio!
Qualquer duvida é só falar! Ou postar no fórum do IIUG em português!
Abraço
César
Comentar