criar tablespace com shell script

1. criar tablespace com shell script

Marco Aurélio Peres
maperes100

(usa Outra)

Enviado em 11/01/2022 - 15:06h

Boa tarde!
Todos bem ?

Estou montando um shell script cujo objetivo é criar uma tablespace, com os datafiles porém, os dados que farão parte da montagem da tablespace e datafiles, virão por meio de variáveis.
Preciso pegar o arquivo .sql gerado e via shell scrpt substituir as informações por meio de variáveis.

Alguém já passou e/ou está passando por essa situação no momento ?

Grato

Marco Aurélio


  


2. Re: criar tablespace com shell script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 12/01/2022 - 18:28h


maperes100 escreveu:

Boa tarde!
Todos bem ?

Estou montando um shell script cujo objetivo é criar uma tablespace, com os datafiles porém,
os dados que farão parte da montagem da tablespace e datafiles, virão por meio de variáveis.
Preciso pegar o arquivo .sql gerado e via shell script substituir as informações por meio de variáveis.

Alguém já passou e/ou está passando por essa situação no momento ?

Grato
Marco Aurélio

Boa noite Marco.
Qual a dúvida e/ou problema encontrado?


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________



3. criar tablespace com shell script

Marco Aurélio Peres
maperes100

(usa Outra)

Enviado em 13/01/2022 - 08:18h


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.






4. Re: criar tablespace com shell script

leandro peçanha scardua
leandropscardua

(usa Ubuntu)

Enviado em 13/01/2022 - 23:02h


Vc quer substituir o nome da tablespace, é isso?


5. Re: criar tablespace com shell script

Marcelo Oliver
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
______________________________________________________________________



6. Re: criar tablespace com shell script

Marco Aurélio Peres
maperes100

(usa Outra)

Enviado em 14/01/2022 - 08:45h


leandropscardua escreveu:


Vc quer substituir o nome da tablespace, é isso?


Preciso substituir o nome da tablespace e os data files, no caso de haver mais que um.


7. Re: criar tablespace com shell script

Marco Aurélio Peres
maperes100

(usa Outra)

Enviado em 17/01/2022 - 10:38h


msoliver escreveu:

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
______________________________________________________________________


Olá Marcelo.

É bem isso mesmo que preciso, vou ter que fazer algumas adaptações ,mas acredito que dará certo (a opção 3 - vou chamá-la assim).
No meu caso, precisarei fazer algumas adaptações, visto que haverá momentos em que terei que trazer para uma só tablespace 4 diferentes.


8. Re: criar tablespace com shell script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/01/2022 - 14:04h

Complementando.
Na opção 3, no arquivo var.txt,
pode colocar um campo com o nome do arquivo onde será salvo a saída do awk.

______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts