изменить владельца всех таблиц в бд PostgreSQL

Change all tables, view and sequences owner in a Postgres DB from bash:

Tables:
for tbl in `psql -qAt -c "select tablename from pg_tables where schemaname = 'public';" maksenov` ; do psql -c "alter table \"$tbl\" owner to maksenov" maksenov; done

Sequences:
for tbl in `psql -qAt -c "select sequence_name from information_schema.sequences where sequence_schema = 'public';" maksenov` ; do psql -c "alter sequence \"$tbl\" owner to maksenov" maksenov ; done


Views:
for tbl in `psql -qAt -c "select table_name from information_schema.views where table_schema = 'public';" maksenov` ; do psql -c "alter view \"$tbl\" owner to maksenov" maksenov; done

initial postgres beauty

после установки свежего экземпляра postgresql отображение в консоли psql не очень радует на больших строках, которые не вмещаются в экран 🙂
поправим пейджинг:

cd
echo "\setenv PAGER 'less -XS'" > .psqlrc

поправим bash prompt string:

echo 'PS1=["\u@\h \w]\$ "' >> .bash_profile

Частота переключения REDO логов по часам

Online Redo Log Switch Frequency Map Query.

Взято с: https://blog.zeddba.com/2019/05/31/online-redo-log-switch-frequency-map/
Пусть будет здесь, в последнее время часто ищу подобного рода запрос

SELECT TRUNC (first_time) "Date", inst_id, TO_CHAR (first_time, 'Dy') "Day",
 COUNT (1) "Total",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '00', 1, 0)) "h0",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '01', 1, 0)) "h1",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '02', 1, 0)) "h2",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '03', 1, 0)) "h3",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '04', 1, 0)) "h4",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '05', 1, 0)) "h5",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '06', 1, 0)) "h6",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '07', 1, 0)) "h7",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '08', 1, 0)) "h8",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '09', 1, 0)) "h9",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '10', 1, 0)) "h10",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '11', 1, 0)) "h11",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '12', 1, 0)) "h12",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '13', 1, 0)) "h13",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '14', 1, 0)) "h14",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '15', 1, 0)) "h15",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '16', 1, 0)) "h16",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '17', 1, 0)) "h17",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '18', 1, 0)) "h18",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '19', 1, 0)) "h19",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '20', 1, 0)) "h20",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '21', 1, 0)) "h21",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '22', 1, 0)) "h22",
 SUM (DECODE (TO_CHAR (first_time, 'hh24'), '23', 1, 0)) "h23",
 ROUND (COUNT (1) / 24, 2) "Avg"
FROM gv$log_history
WHERE thread# = inst_id
AND first_time > sysdate -7
GROUP BY TRUNC (first_time), inst_id, TO_CHAR (first_time, 'Dy')
ORDER BY 1,2;

под катом — шапка для корретного отображения в sqlplus
Читать далее «Частота переключения REDO логов по часам»

Чистим-чистим арклоги в FRA ASM Standby

Automatic Storage Management на стендбай сервере ругается, что Disk Group FRA is 90.358% used ?
Давайте почистим Fast Recovery Area.

Немного подхачим гуляющий по интернету скрипт и получим готовую к выполнению в RMAN команду для удаления применённых арклогов с учётом тредов. Минус 2 от максимального, т.к. бывали случаи, что стендбай ломался и требовал пару уже применённых логов. Выполнять строго на Standby:

select 'DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE '|| (max(sequence#)-2)||' THREAD '||THREAD# ||';'
from v$archived_log
where applied = 'YES'
AND  RESETLOGS_TIME = (select MAX(RESETLOGS_TIME) from V$DATABASE_INCARNATION)
group by THREAD#;---

Чтобы быть уверенным, что особого отставания нет и адских гепов, посмотрим на PRIMARY

select max(SEQUENCE#),THREAD# from v$archived_log
where RESETLOGS_TIME = (select MAX(RESETLOGS_TIME) from V$DATABASE_INCARNATION)
group by THREAD#;

Получим что-то вроде этого:

DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE 3786 THREAD 1;
DELETE NOPROMPT ARCHIVELOG UNTIL SEQUENCE 3571 THREAD 2;

Возможно, будет хорошим решением будет включение опции автоматического удаления накатившихся арклогов:

CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

Drop и Create индекса на Primary key

Появилась задача — Drop и Create индекса на Primary key (Именно такое потенциальное решение, из всех других предложенных вариантов, остаётся для Internal error ORA 600 [kdsgrp1] по рекомендации MOS)

Alter table "ARDOME"."RUNDOWN_ROW" drop primary key
Error report -
SQL Error: ORA-02273: denna UNIQUE/PRIMARY KEY refereras från några främmande nycklar
02273. 00000 - "this unique/primary key is referenced by some foreign keys"
*Cause: Self-evident.
*Action: Remove all references to the key before the key is to be dropped.

I. Давайте определим имя PK при помощи представления DBA_CONSTRAINTS:

В нашем случае это таблица RUNDOWN_ROW в схеме ARDOME.
select CONSTRAINT_NAME from DBA_CONSTRAINTS
where OWNER like 'ARDOME' and Table_name like 'RUNDOWN_ROW'
and CONSTRAINT_TYPE='P'

Типы констрейнтов:

  • C (check constraint on a table)
  • P (primary key)
  • U (unique key)
  • R (referential integrity) — он же FK, который ссылаясь мешает удалить PK
  • V (with check option, on a view)
  • O (with read only, on a view)

Немного подшаманим и увидим информацию о FK на наш PK:
select * from DBA_CONSTRAINTS
where R_CONSTRAINT_NAME in (
select CONSTRAINT_NAME from DBA_CONSTRAINTS
where OWNER like 'ARDOME' and Table_name like 'RUNDOWN_ROW' and CONSTRAINT_TYPE='P')

Читать далее «Drop и Create индекса на Primary key»

Statspack. Установка и настройка.

«А у нас в квартире газ! А у вас?» А у нас Standard Edition!

Лишенные радости использования AWR (Automatic Workload Repository) в Enterprise Edition администраторы SE могут использовать набор утилит мониторинга производительности Statspack.

Установить Statspack
@%ORACLE_HOME%\rdbms\admin\spcreate

OR
@?/rdbms/admin/spcreate

Хорошо, установили, но статистика от этого собирается просто так не станет.
Что бы автоматом собиралась статистика:
@?/rdbms/admin/spauto.sql
Читать далее «Statspack. Установка и настройка.»

Повышенное ожидание log file sync. LGWR — Post/wait и Polling.

Version 11.2.0.3 , Windows 2008R2

Столкнулись с ситуацией повышенного log file sync wait.

Конечно написанное приложение далеко от идеала, и в БД очень много коммитов. Но раньше такой ситуации по ожиданиям не возникало, а код остался нетронутым.

Деградации в производительности дискового хранилища и сети не были найдены, всё железо стабильно продолжало работать. В алертлоге ничего путного тоже нет, только:
«Thu Mar 30 15:20:19 2017
Thread 1 cannot allocate new log, sequence 4824
Private strand flush not complete»
Читать далее «Повышенное ожидание log file sync. LGWR — Post/wait и Polling.»

Получить команду DDL, GET_DDL

Вывод получится довольно большой, потому перед началом лучше дать:
set pagesize 0
set long 30000

Получиться DDL команду для VIEW:
select dbms_metadata.get_ddl('VIEW','ИМЯ_ПРЕДСТАВЛЕНИЯ','ИМЯ_СХЕМЫ') from dual;
select dbms_metadata.get_ddl('VIEW','ACCOUNT_MANAGERS','OE') from dual;

 

 

 

select dbms_metadata.get_ddl('INDEX','ИМЯ_ИНДЕКСА','ИМЯ_СХЕМЫ') from dual;
select dbms_metadata.get_ddl('INDEX','DEPT_IDX','SCOTT') from dual;

Доп инфа

Перенос файлов временного табличного пространства.

    «Место на файловой системе начало подходить к коцу. Здесь же, на диске D располагаются bigfile пространства, довольно большие, переносить их не очень хочется, да и особо некуда, а место для их роста освободить не помешает.» — руководствуясь такими рассуждениями принимаю решение перенести что-то наименее критичное — это пара temp файлов.

1. Используя следующий запрос, посмотрим какие TEMP файлы имеет смысл переносить:
select round((bytes/1024/1024/1024),2) GB, Name from v$tempfile;

Нашли два файла по 60Гб каждый, их и будем переносить. Идём дальше. Читать далее «Перенос файлов временного табличного пространства.»

Перекомпиляция инвалидных объектов схемы

Определение инвалидных объектов

Для определения инвалидных объектов можно использовать представление DBA_OBJECTS, как в этом запросе:

COLUMN object_name FORMAT A30
SELECT owner,
object_type,
object_name,
status
FROM dba_objects
WHERE status = 'INVALID'
ORDER BY owner, object_type, object_name;

Полученную информацию можно использовать для выбора метода рекомпиляции. Читать далее «Перекомпиляция инвалидных объектов схемы»