Olá,
terça-feira, 15 de dezembro de 2020
Oracle Client 21c disponível para download
Por Eduardo Legatti
Postado por
Eduardo Legatti
às
11:29
0
comentários
Marcadores: oracle
sexta-feira, 13 de novembro de 2020
MySQL - Esqueci a senha do root. Como resetar?
Por Eduardo Legatti
Olá,
Abaixo é possível verificar que a autenticação falhou pelo fato de eu ter esquecido a senha do root para conectar no MySQL.
[root@linux ~]# mysql -uroot -psenha
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Segue abaixo o roteiro que deverá ser seguido para que a senha do root seja resetada para uma nova senha.
[root@linux ~]# systemctl stop mysqld
[root@linux ~]# systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
[root@linux ~]# systemctl start mysqld
[root@linux ~]# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use mysql
Database changed
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'senha';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@linux ~]# systemctl stop mysqld
[root@linux ~]# systemctl unset-environment MYSQLD_OPTS
[root@linux ~]# systemctl start mysqld
[root@linux ~]# mysql -uroot -psenha
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Postado por
Eduardo Legatti
às
08:25
0
comentários
Marcadores: mysql
quinta-feira, 17 de setembro de 2020
MongoDB - Obtendo informações das collections de um banco de dados
Por Eduardo Legatti
Olá,
Neste artigo irei demonstrar através de um script como obter informações de cada collection de um banco de dados, tais como quantidade de documentos, tamanho total real em MB e o tamanho total em MB ocupado em disco.
mongoPrdSet:PRIMARY> use bd01
switched to db bd01
mongoPrdSet:PRIMARY> cols.forEach(function(col) {
... {
... vstat=db.getCollection(col).stats({ scale : 1024*1024 }) //Em MB
... print(vstat.ns + " - count: " + vstat.count + " - size MB: " + vstat.size + " - storage_size MB: "+vstat.storageSize)
... }
... });
bd01.col01 - count: 2507 - size MB: 139 - storage_size MB: 53
bd01.col02 - count: 44372 - size MB: 2852 - storage_size MB: 600
bd01.col03 - count: 118476 - size MB: 710 - storage_size MB: 155
bd01.col04 - count: 3936 - size MB: 49 - storage_size MB: 16
bd01.col05 - count: 1797 - size MB: 12 - storage_size MB: 3
bd01.col06 - count: 2728 - size MB: 24 - storage_size MB: 5
bd01.col07 - count: 9406 - size MB: 73 - storage_size MB: 14
bd01.col08 - count: 57 - size MB: 32 - storage_size MB: 3
bd01.col09 - count: 1760 - size MB: 62 - storage_size MB: 14
bd01.col10 - count: 1616 - size MB: 38 - storage_size MB: 11
bd01.col11 - count: 1501 - size MB: 64 - storage_size MB: 18
bd01.col12 - count: 42880 - size MB: 4783 - storage_size MB: 1045
bd01.col13 - count: 2652 - size MB: 98 - storage_size MB: 28
bd01.col14 - count: 211 - size MB: 5 - storage_size MB: 1
bd01.col15 - count: 8055 - size MB: 5 - storage_size MB: 1
bd01.col16 - count: 225 - size MB: 14 - storage_size MB: 18
bd01.col17 - count: 309 - size MB: 7 - storage_size MB: 2
bd01.col18 - count: 7579 - size MB: 37 - storage_size MB: 11
bd01.col19 - count: 27762 - size MB: 135 - storage_size MB: 28
bd01.col20 - count: 26807 - size MB: 72 - storage_size MB: 12
Postado por
Eduardo Legatti
às
15:40
0
comentários
Marcadores: mongodb
segunda-feira, 17 de agosto de 2020
GOLDENGATEBR - Entrevista 20/08 - Quinta 20H30
Por Eduardo Legatti
Postado por
Eduardo Legatti
às
11:42
0
comentários
Marcadores: oracle
terça-feira, 11 de agosto de 2020
SQL Server - Realizando manutenção nos índices do banco de dados
Por Eduardo Legatti
Olá,
No SQL Server diferentemente do Oracle, temos que nos preocupar em verificar com o tempo a fragmentação dos índices das tabelas. Vale a penas salientar que no SQL Server temos dois tipo de índices que são os mais utilizados - (CLUSTERED INDEX e NONCLUSTERED INDEX). No mais, a fragmentação no SQL Server ocorre quando os índices têm páginas nas quais a ordenação lógica no índice com base no valor de chave do índice não corresponde à ordenação física das páginas de índice. O Mecanismo de Banco de Dados modifica os índices automaticamente sempre que são realizadas operações de entrada, atualização ou exclusão nos dados subjacentes. Por exemplo, a adição de linhas em uma tabela pode fazer com que as páginas existentes nos índices de rowstore sejam divididas para liberar espaço para a inserção de novos valores de chave. No decorrer do tempo, essas modificações podem fazer com que as informações do índice sejam dispersadas pelo banco de dados (fragmentadas). Índices intensamente fragmentados podem prejudicar o desempenho da consulta, porque uma E/S adicional é necessária para localizar dados para os quais o índice aponta. E/S adicionais fazem com que a resposta do aplicativo seja lenta, especialmente quando operações de verificação estão envolvidas. Depois que o grau de fragmentação for conhecido, use a seguinte tabela para determinar o melhor método para remover a fragmentação.
Avg_fragmentation_in_percent Instrução corretiva
--------------------------------- --------------------------------------
> 5% e < = 30% ALTER INDEX REORGANIZE
> 30% ALTER INDEX REBUILD WITH (ONLINE = ON)
Seguindo essa recomendação da Microsoft, costumo utilizar o script abaixo para verificar o grau de fragmentação e realizar a manutenção apropriada (REBUILD ou REORGANIZE). No caso do REORGANIZE, o mesmo pode ser realizado de forma on-line sem prejudicar o desempenho do banco de dados. No caso do REBUILD, caso seja utilizado a versão Enterprise, é melhor adicionar a opção (ONLINE = ON) para não "lockar" a tabela durante a reconstrução do índice.
SELECT distinct (Index_Statement) FROM
(
SELECT CASE WHEN avg_fragmentation_in_percent BETWEEN 5 AND 30 THEN
'ALTER INDEX [' + name + '] ON ' + (SELECT TOP 1 TABLE_SCHEMA FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = OBJECT_NAME(b.[OBJECT_ID]) AND TABLE_TYPE = 'BASE TABLE')
+ '.[' + OBJECT_NAME(b.[OBJECT_ID]) + '] REORGANIZE;'
WHEN avg_fragmentation_in_percent > 30 THEN
'ALTER INDEX [' + name + '] ON ' + (SELECT TOP 1 TABLE_SCHEMA FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_NAME = OBJECT_NAME(b.[OBJECT_ID]) AND TABLE_TYPE = 'BASE TABLE')
+ '.[' + OBJECT_NAME(b.[OBJECT_ID]) + '] REBUILD;'
END AS Index_Statement
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS a
JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id
WHERE avg_fragmentation_in_percent > 5
AND index_type_desc <> 'HEAP'
AND page_count > 640) index_rebuild_reorganize
WHERE Index_Statement Is NOT NULL;
Index_Statement
----------------------------------------------------
ALTER INDEX [IDX_TBL_08] ON dbo.[TBL_08] REORGANIZE;
ALTER INDEX [IDX_TBL_07] ON dbo.[TBL_07] REBUILD;
ALTER INDEX [IDX_TBL_06] ON dbo.[TBL_06] REORGANIZE;
ALTER INDEX [IDX_TBL_05] ON dbo.[TBL_05] REBUILD;
ALTER INDEX [IDX_TBL_04] ON dbo.[TBL_04] REORGANIZE;
ALTER INDEX [IDX_TBL_03] ON dbo.[TBL_03] REBUILD;
ALTER INDEX [IDX_TBL_02] ON dbo.[TBL_02] REORGANIZE;
ALTER INDEX [IDX_TBL_01] ON dbo.[TBL_01] REORGANIZE;
ALTER INDEX [PKI_TBL_08] ON dbo.[TBL_08] REORGANIZE;
ALTER INDEX [PKI_TBL_09] ON dbo.[TBL_09] REORGANIZE;
(10 rows affected)
Completion time: 2020-08-07T16:24:33.6867313-03:00
Postado por
Eduardo Legatti
às
15:44
0
comentários
Marcadores: sqlserver
segunda-feira, 13 de julho de 2020
MongoDB - Um pouco sobre o db.currentOp()
Por Eduardo Legatti
Olá,
O MongoDB possui função chamada db.currentOp() que retorna todas as
conexões abertas da instância. No comando abaixo irei retornar todas as
conexões que estão realizando operações que estão em execução a mais de 1
segundo. É possível verificar no exemplo abaixo que a conexão conn9145756
proveniente do servidor 192.168.1.10 está realizando uma query no banco bd01
e collection customer através do _id: ObjectId("0000001") com duração de
3 segundos. As demais operações estão ligadas ao namespace local.oplog.rs
que são operações de replicação do MongoDB.
mongoSet:PRIMARY> db.currentOp({"secs_running": {$gte: 1}})
{
"inprog" : [
{
"desc" : "conn9145756",
"threadId" : "139937773053696",
"connectionId" : 9145756,
"client" : "192.168.1.10:34456",
"active" : true,
"opid" : 425355448,
"secs_running" : 3,
"microsecs_running" : NumberLong(7491051),
"op" : "query",
"ns" : "bd01.customer",
"query" : {
"find" : "customer",
"filter" : {
"_id" : ObjectId("0000001")
},
"batchSize" : 300
},
"numYields" : 0,
"locks" : {
"Global" : "r",
"Database" : "r",
"Collection" : "r"
},
"waitingForLock" : false,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(2)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(1)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(1)
}
}
}
},
{
"desc" : "ReplBatcher",
"threadId" : "139937860310784",
"active" : true,
"opid" : 10,
"secs_running" : 1300926,
"microsecs_running" : NumberLong("22775762702217"),
"op" : "none",
"ns" : "local.oplog.rs",
"query" : {
},
"numYields" : 0,
"locks" : {
},
"waitingForLock" : false,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(2)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(1)
}
},
"oplog" : {
"acquireCount" : {
"r" : NumberLong(1)
}
}
}
},
{
"desc" : "rsSync",
"threadId" : "139938179233536",
"active" : true,
"opid" : 9,
"secs_running" : 1300926,
"microsecs_running" : NumberLong("22775762702158"),
"op" : "none",
"ns" : "local.oplog.rs",
"query" : {
},
"numYields" : 0,
"locks" : {
},
"waitingForLock" : false,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(24704),
"w" : NumberLong(18515),
"R" : NumberLong(6172),
"W" : NumberLong(6172)
},
"acquireWaitCount" : {
"W" : NumberLong(974)
},
"timeAcquiringMicros" : {
"W" : NumberLong(19504794)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(8),
"w" : NumberLong(1),
"W" : NumberLong(18514)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(7)
}
},
"Metadata" : {
"acquireCount" : {
"w" : NumberLong(1)
}
},
"oplog" : {
"acquireCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
}
}
}
},
{
"desc" : "WT RecordStoreThread: local.oplog.rs",
"threadId" : "139938314262272",
"active" : true,
"opid" : 424925952,
"secs_running" : 920,
"microsecs_running" : NumberLong(920757610),
"op" : "none",
"ns" : "local.oplog.rs",
"query" : {
},
"numYields" : 0,
"locks" : {
},
"waitingForLock" : false,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(1),
"w" : NumberLong(1)
}
},
"Database" : {
"acquireCount" : {
"w" : NumberLong(1)
}
},
"oplog" : {
"acquireCount" : {
"w" : NumberLong(1)
}
}
}
}
],
"ok" : 1
}
Caso queiramos filtrar apenas as conexões ativas ignorando operações
internas de replicação, bastará utilizar o exemplo abaixo.
mongoSet:PRIMARY> db.currentOp({"active" : true,"secs_running" : { "$gt" : 0 },"ns" : {$ne : "local.oplog.rs"}})
{
"inprog" : [
{
"desc" : "conn1371708",
"threadId" : "140655653025536",
"connectionId" : 1371708,
"client" : "172.31.80.121:51282",
"active" : true,
"opid" : 2036637847,
"secs_running" : 1,
"microsecs_running" : NumberLong(1082772),
"op" : "query",
"ns" : "bd01.product",
"query" : {
"$msg" : "query not recording (too large)"
},
"numYields" : 58,
"locks" : {
"Global" : "r",
"Database" : "r"
},
"waitingForLock" : true,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(118)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(59)
},
"acquireWaitCount" : {
"r" : NumberLong(58)
},
"timeAcquiringMicros" : {
"r" : NumberLong(935638)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(58)
}
}
}
},
{
"desc" : "conn980301",
"threadId" : "140655740397312",
"connectionId" : 980301,
"client" : "192.168.1.10:55542",
"active" : true,
"opid" : 2036637676,
"secs_running" : 1,
"microsecs_running" : NumberLong(1310312),
"op" : "query",
"ns" : "bd01.product",
"query" : {
"$msg" : "query not recording (too large)"
},
"numYields" : 74,
"locks" : {
"Global" : "r",
"Database" : "r",
"Collection" : "r"
},
"waitingForLock" : false,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(150)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(75)
},
"acquireWaitCount" : {
"r" : NumberLong(71)
},
"timeAcquiringMicros" : {
"r" : NumberLong(1140143)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(75)
}
}
}
},
{
"desc" : "conn980023",
"threadId" : "140655865579264",
"connectionId" : 980023,
"client" : "192.168.1.10:55132",
"active" : true,
"opid" : 2036637864,
"secs_running" : 1,
"microsecs_running" : NumberLong(1071661),
"op" : "query",
"ns" : "bd01.product",
"query" : {
"$msg" : "query not recording (too large)"
},
"numYields" : 63,
"locks" : {
"Global" : "r",
"Database" : "r"
},
"waitingForLock" : true,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(128)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(64)
},
"acquireWaitCount" : {
"r" : NumberLong(60)
},
"timeAcquiringMicros" : {
"r" : NumberLong(910226)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(63)
}
}
}
},
{
"desc" : "conn980300",
"threadId" : "140655781451520",
"connectionId" : 980300,
"client" : "192.168.1.10:44064",
"active" : true,
"opid" : 2036637740,
"secs_running" : 1,
"microsecs_running" : NumberLong(1200164),
"op" : "query",
"ns" : "bd01.product",
"query" : {
"$msg" : "query not recording (too large)"
},
"numYields" : 67,
"locks" : {
"Global" : "r",
"Database" : "r"
},
"waitingForLock" : true,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(136)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(68)
},
"acquireWaitCount" : {
"r" : NumberLong(64)
},
"timeAcquiringMicros" : {
"r" : NumberLong(1015696)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(67)
}
}
}
}
],
"ok" : 1
}
Postado por
Eduardo Legatti
às
13:08
0
comentários
Marcadores: mongodb
quarta-feira, 10 de junho de 2020
SQL Server - Obtendo a porta de conexão através de uma instrução SQL
Por Eduardo Legatti
Olá,
Neste artigo rei demonstrar como podemos obter a porta que a instância do SQL Server está atendendo através de uma instrução SQL. Essa instrução é válida tanto para instalações Linux quanto para Windows.
[root@linux /]# sqlcmd -S localhost -U SA -Pminhasenha
1> DECLARE @test varchar(20), @key varchar(100)
2> if charindex('\',@@servername,0) <>0
3> begin
4> set @key = 'SOFTWARE\MICROSOFT\Microsoft SQL Server\'+@@servicename+'\MSSQLServer\Supersocketnetlib\TCP'
5> end
6> else
7> begin
8> set @key = 'SOFTWARE\MICROSOFT\MSSQLServer\MSSQLServer\Supersocketnetlib\TCP'
9> end
10> EXEC master..xp_regread @rootkey='HKEY_LOCAL_MACHINE',@key=@key,@value_name='Tcpport',@value=@test OUTPUT
11> SELECT 'Server Name: '+@@servername + ' Port Number:'+convert(varchar(10),@test) port;
12> GO
port
-----------------------------------
Server Name: linux Port Number:1433
(1 rows affected)
Postado por
Eduardo Legatti
às
16:58
0
comentários
Marcadores: sqlserver
Assinar:
Postagens (Atom)
Downloads
Postagens populares
-
Olá, Uma das tarefas de um DBA é monitorar o banco de dados de forma que seja identificado possíveis problemas que possam vir a comprome...
-
Olá, Para qualquer DBA, o monitoramento constante e preventivo do banco de dados é fundamental. Se o mesmo não for monitorado de forma c...
-
Olá, Neste artigo irei abordar de forma simples e direta exemplos de uso de algumas funções analíticas que podemos utilizar nas instruçõ...
-
Olá, Imagine vários ambientes de bancos de dados como desenvolvimento, teste, homologação, produção, entre outros. Particularmente, em u...
-
Olá, Dando prosseguimento ao artigo de Março de 2008 sobre introdução ao conceito de tablespaces, sabemos que o armazenamento dentro de u...
-
Olá, No SQL Server diferentemente do Oracle, temos que nos preocupar em verificar com o tempo a fragmentação dos índices das tabelas. Vale a...
-
Olá, No artigo anterior , eu demonstrei através de exemplos práticos, não só como gerar arquivos externos ao banco de dados, mas também...
-
Olá, Monitorar o crescimento dos bancos de dados de uma organização é uma das tarefas de um DBA. Embora existam várias formas de monitor...
-
Olá, Tanto no utilitário Oracle Datapump Export ( expdp ) quanto no utilitário Oracle Datapump Import ( impdp ), é possível utilizar um ...
-
Olá, Abaixo é possível verificar que a autenticação falhou pelo fato de eu ter esquecido a senha do root para conectar no MySQL. [root@linux...
