msoliver
(usa Debian)
Enviado em 13/01/2022 - 23:56h
maperes100 escreveu:
Bom dia Marcelo.
Tudo bem ?
Obrigado pelo seu contato.
Vou mostrar qual o problema/dúvida que enfrento no momento.
Tenho essa DDL de uma tablespace já criada no banco de dados, é um exemplo.
DDL
--------------------------------------------------------------------------------
CREATE TABLESPACE "UNIAO" DATAFILE
'/u01//dados/uniao01.dbf' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE
'/u01/dados/uniao01.dbf' RESIZE 2097152000
O que preciso fazer é o seguinte :
criar uma nova tablespace com o DDL gerado acima, porém o nome da tablespace virá de uma variável a ser inputada, assim como o(s) datafile(s).
não estou conseguindo por meio de shell script uma forma de passar essa variável para o DDL de criação.
Não sei se essa é a melhor forma de se fazer o processo, minha intenção é tornar o processo o mais possível automatizado.
Boa noite Marco.
Não ficou muito claro.... mas, segue um exemplo:
Opção 01:
Informe os valores das variáveis na linha de comando, como parâmetro.
Exemplo:
tabela.sh NOMETABELA NOMEDATAFILE
#!/bin/bash
echo "
CREATE TABLESPACE \"${1}\" DATAFILE '${2}' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE '${2}' RESIZE 2097152000
"
Opção 02:
Solicitando as variáveis:
#!/bin/bash
read -p "Nome da Tabela: " tablename
read -p "Nome do DataFile: " datafile
echo "
CREATE TABLESPACE \"${tablename}\" DATAFILE '${datafile}' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE '${datafile}' RESIZE 2097152000"
Coloquei o "echo" para mostrar a saída com as variáveis.
Uma outra forma para melhor automação, seria colocar os valores em um txt,
tipo, cada linha contendo um par de valores.....
O shell script, percorre o arquivo e complementa com os "valores".
Exemplo:
cat DDL.txt
CREATE TABLESPACE \"ts\" DATAFILE 'tnm' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE 'tnm' RESIZE 2097152000
cat vars.txt
UNIÃO_AA /u01/dados/uniao_AA.dbf
UNIÃO_BB /u01/dados/uniao_BB.dbf
UNIÃO_CC /u01/dados/uniao_CC.dbf
UNIÃO_DD /u01/dados/uniao_DD.dbf
UNIÃO_EE /u01/dados/uniao_EE.dbf
..................
awk '{system("sed \"s/ts/"$1"/;s|tnm|"$2"|\" vars.txt")}' DDL.txt
CREATE TABLESPACE \"UNIÃO_AA\" DATAFILE '/u01/dados/uniao_AA.dbf' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE '/u01/dados/uniao_AA.dbf' RESIZE 2097152000
CREATE TABLESPACE \"UNIÃO_BB\" DATAFILE '/u01/dados/uniao_BB.dbf' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE '/u01/dados/uniao_BB.dbf' RESIZE 2097152000
CREATE TABLESPACE \"UNIÃO_CC\" DATAFILE '/u01/dados/uniao_CC.dbf' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE '/u01/dados/uniao_CC.dbf' RESIZE 2097152000
CREATE TABLESPACE \"UNIÃO_DD\" DATAFILE '/u01/dados/uniao_DD.dbf' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE '/u01/dados/uniao_DD.dbf' RESIZE 2097152000
CREATE TABLESPACE \"UNIÃO_EE\" DATAFILE '/u01/dados/uniao_EE.dbf' SIZE 1048576000
AUTOEXTEND ON NEXT 1048576000 MAXSIZE 32767M
LOGGING ONLINE PERMANENT BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO
ALTER DATABASE DATAFILE '/u01/dados/uniao_EE.dbf' RESIZE 2097152000
.................................................
______________________________________________________________________
Importante:
lynx --dump
https://www.vivaolinux.com.br/termos-de-uso/|sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando:
ACIMA , faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________