пятница, 27 января 2017 г.
Проверка настроек отображения даты
Столкнулся с такой ситуацией, что в базу в поле DATE записывали дату со временем, а когда вычитывали ее, то получали только дату, без времени. Проблема оказалась на стороне клиента.
Для того чтобы проверить настройки вывода даты, нужно выполнить следующий запрос:
SELECT *
FROM nls_session_parameters
WHERE parameter like '%DATE%';
Чтобы установить формат отображения даты вместе с временем, нужно выполнить:
ALTER SESSION SET nls_date_format='dd.mm.yyyy hh24:mi:ss';
Поиск блокирующих сессий
Для отображения сессий, которые блокируют другие, нужно выполнить запрос:
select a.username
, a.program
, a.sid
, a.serial#
from v$session a
join dba_blockers b
on a.sid = b.holding_session
/
Аудит коннекшенов
Очень часто для пользователей используются профили, которые задают ограничение на количество ввода неправильного пароля, после чего пользователь блокируется. Поэтому очень важно определить, кто именно заблокировал пользователя, для этого используется следующий запрос:
SELECT CASE
WHEN dasn.returncode=1017 THEN 'invalid password'
ELSE 'the account is locked'
END reason
, dasn.*
FROM DBA_AUDIT_SESSION dasn
WHERE dasn.username='GUBITST'
AND dasn.returncode IN (1017, 28000)
ORDER BY dasn.timestamp DESC;
воскресенье, 28 августа 2016 г.
Настройка SSH на Linux
Для проверки, запущен у вас сервер SSH, нужно выполнить:
service sshd status
Если сервер запущен, то появится сообщение:
openssh-daemon (pid 3874) is running
Если серкер не установлен, то это можно сделать с помощью команды:
yum install openssh-server
Для подключения из iOS нужно выполнить следующую командy:
ssh user_name@host_name
или если нам нужно указать специфический потр, то пишем:
ssh -p 22 user_name@host_name
Иногда, нужно узнать, какие же порты открыты. Для этого устанавливаем NMAP:
yum nmap instal
После установки, запускаем следующую команду
nmap -sT -O localhost
которая выводит список открытых портов и кем они используются.
service sshd status
Если сервер запущен, то появится сообщение:
openssh-daemon (pid 3874) is running
Если серкер не установлен, то это можно сделать с помощью команды:
yum install openssh-server
Для подключения из iOS нужно выполнить следующую командy:
ssh user_name@host_name
или если нам нужно указать специфический потр, то пишем:
ssh -p 22 user_name@host_name
Иногда, нужно узнать, какие же порты открыты. Для этого устанавливаем NMAP:
yum nmap instal
После установки, запускаем следующую команду
nmap -sT -O localhost
которая выводит список открытых портов и кем они используются.
суббота, 30 июля 2016 г.
Запись образа Федоры на флешку
Я столкнулся с проблемой необходимости записи загрузочного образа Федоры на флешку.
Для этого я использовал следующее:
Сначала определил куда примонтирована флешка, с помощью команды:
fdisk -l
Это оказалось /dev/sdс, после этого, ввел следующую команду для записи образа:
dd if=Fedora_24.iso of=/dev/sdс bs=8M
где
Fedora_24.iso - имя образа в текущей папке
/dev/sdс - точка монтирования флешки.
Для этого я использовал следующее:
Сначала определил куда примонтирована флешка, с помощью команды:
fdisk -l
Это оказалось /dev/sdс, после этого, ввел следующую команду для записи образа:
dd if=Fedora_24.iso of=/dev/sdс bs=8M
где
Fedora_24.iso - имя образа в текущей папке
/dev/sdс - точка монтирования флешки.
четверг, 7 июля 2016 г.
Логирование работы программы
Следующий скрипт создает пакет и таблицы для записи логов.
Логи пишутся в двух режимах:
1. логи которые откатываются при откате транзакции
2. логи которые коммитятся в автономной транзакции и которые невозможно откатить.
DROP SEQUENCE seq_tbl_system_log
/
DROP SEQUENCE seq_tbl_log
/
DROP TABLE tbl_log
/
DROP TABLE tbl_system_log
/
CREATE SEQUENCE seq_tbl_system_log
/
CREATE TABLE tbl_system_log(
id INTEGER CONSTRAINT pk_tbl_system_log PRIMARY KEY,
name VARCHAR2(30) NOT NULL CONSTRAINT un_tbl_system_log UNIQUE
)
/
CREATE SEQUENCE seq_tbl_log
/
CREATE TABLE tbl_log(
id INTEGER CONSTRAINT pk_tbl_log PRIMARY KEY,
system_log_id INTEGER NOT NULL,
message VARCHAR2(4000) NOT NULL,
log_type_id INTEGER NOT NULL,
ts TIMESTAMP DEFAULT SYSDATE NOT NULL,
CONSTRAINT fk_tbl_log_tbl_system_log FOREIGN KEY (system_log_id) REFERENCES tbl_system_log (id)
)
/
CREATE OR REPLACE FORCE VIEW v_log
AS
SELECT tllg.id
, tslg.name
, tllg.message
, DECODE(tllg.log_type_id, 1, 'INFO', 2, 'WARNING', 3, 'ERROR') log_type
, tllg.ts
FROM tbl_log tllg
JOIN
tbl_system_log tslg
ON tllg.system_log_id = tslg.id
/
CREATE OR REPLACE PACKAGE pkg_log IS
PROCEDURE reg_system_log
(p_name IN VARCHAR2);
FUNCTION get_system_log_id
(p_name IN VARCHAR2)
RETURN NUMBER;
PROCEDURE ins_log_info
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_info_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_warning
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_warning_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_error
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_error_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE del_log
(p_id IN NUMBER);
PROCEDURE del_log_autonomous
(p_id IN NUMBER);
END pkg_log;
/
CREATE OR REPLACE PACKAGE BODY pkg_log
IS
PROCEDURE reg_system_log
(p_name IN VARCHAR2)
IS
BEGIN
INSERT INTO tbl_system_log
(id,
name)
VALUES(
seq_tbl_system_log.NEXTVAL,
p_name);
END;
FUNCTION get_system_log_id
(p_name IN VARCHAR2)
RETURN NUMBER
IS
l_id NUMBER;
BEGIN
SELECT id
INTO l_id
FROM tbl_system_log
WHERE name = p_name;
RETURN l_id;
END;
PROCEDURE ins_log
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2,
p_log_type_id IN NUMBER)
IS
BEGIN
INSERT INTO tbl_log
(id,
system_log_id,
message,
log_type_id)
VALUES(
seq_tbl_log.NEXTVAL,
p_system_log_id,
p_message,
p_log_type_id);
END;
--- INFO -----------------------------------
PROCEDURE ins_log_info
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
BEGIN
ins_log(p_system_log_id, p_message, 1);
END;
PROCEDURE ins_log_info_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
ins_log(p_system_log_id, p_message, 1);
COMMIT;
END;
--- WARNING -------------------------------
PROCEDURE ins_log_warning
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
BEGIN
ins_log(p_system_log_id, p_message, 2);
END;
PROCEDURE ins_log_warning_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
ins_log(p_system_log_id, p_message, 2);
COMMIT;
END;
--- ERROR ---------------------------------
PROCEDURE ins_log_error
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
BEGIN
ins_log(p_system_log_id, p_message, 3);
END;
PROCEDURE ins_log_error_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
ins_log(p_system_log_id, p_message, 3);
COMMIT;
END;
--- DELETE -----------------------------
PROCEDURE del_log
(p_id IN NUMBER)
IS
BEGIN
DELETE FROM tbl_log
WHERE id = p_id;
END;
PROCEDURE del_log_autonomous
(p_id IN NUMBER)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
del_log(p_id);
COMMIT;
END;
END pkg_log;
/
Логи пишутся в двух режимах:
1. логи которые откатываются при откате транзакции
2. логи которые коммитятся в автономной транзакции и которые невозможно откатить.
DROP SEQUENCE seq_tbl_system_log
/
DROP SEQUENCE seq_tbl_log
/
DROP TABLE tbl_log
/
DROP TABLE tbl_system_log
/
CREATE SEQUENCE seq_tbl_system_log
/
CREATE TABLE tbl_system_log(
id INTEGER CONSTRAINT pk_tbl_system_log PRIMARY KEY,
name VARCHAR2(30) NOT NULL CONSTRAINT un_tbl_system_log UNIQUE
)
/
CREATE SEQUENCE seq_tbl_log
/
CREATE TABLE tbl_log(
id INTEGER CONSTRAINT pk_tbl_log PRIMARY KEY,
system_log_id INTEGER NOT NULL,
message VARCHAR2(4000) NOT NULL,
log_type_id INTEGER NOT NULL,
ts TIMESTAMP DEFAULT SYSDATE NOT NULL,
CONSTRAINT fk_tbl_log_tbl_system_log FOREIGN KEY (system_log_id) REFERENCES tbl_system_log (id)
)
/
CREATE OR REPLACE FORCE VIEW v_log
AS
SELECT tllg.id
, tslg.name
, tllg.message
, DECODE(tllg.log_type_id, 1, 'INFO', 2, 'WARNING', 3, 'ERROR') log_type
, tllg.ts
FROM tbl_log tllg
JOIN
tbl_system_log tslg
ON tllg.system_log_id = tslg.id
/
CREATE OR REPLACE PACKAGE pkg_log IS
PROCEDURE reg_system_log
(p_name IN VARCHAR2);
FUNCTION get_system_log_id
(p_name IN VARCHAR2)
RETURN NUMBER;
PROCEDURE ins_log_info
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_info_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_warning
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_warning_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_error
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE ins_log_error_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2);
PROCEDURE del_log
(p_id IN NUMBER);
PROCEDURE del_log_autonomous
(p_id IN NUMBER);
END pkg_log;
/
CREATE OR REPLACE PACKAGE BODY pkg_log
IS
PROCEDURE reg_system_log
(p_name IN VARCHAR2)
IS
BEGIN
INSERT INTO tbl_system_log
(id,
name)
VALUES(
seq_tbl_system_log.NEXTVAL,
p_name);
END;
FUNCTION get_system_log_id
(p_name IN VARCHAR2)
RETURN NUMBER
IS
l_id NUMBER;
BEGIN
SELECT id
INTO l_id
FROM tbl_system_log
WHERE name = p_name;
RETURN l_id;
END;
PROCEDURE ins_log
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2,
p_log_type_id IN NUMBER)
IS
BEGIN
INSERT INTO tbl_log
(id,
system_log_id,
message,
log_type_id)
VALUES(
seq_tbl_log.NEXTVAL,
p_system_log_id,
p_message,
p_log_type_id);
END;
--- INFO -----------------------------------
PROCEDURE ins_log_info
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
BEGIN
ins_log(p_system_log_id, p_message, 1);
END;
PROCEDURE ins_log_info_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
ins_log(p_system_log_id, p_message, 1);
COMMIT;
END;
--- WARNING -------------------------------
PROCEDURE ins_log_warning
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
BEGIN
ins_log(p_system_log_id, p_message, 2);
END;
PROCEDURE ins_log_warning_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
ins_log(p_system_log_id, p_message, 2);
COMMIT;
END;
--- ERROR ---------------------------------
PROCEDURE ins_log_error
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
BEGIN
ins_log(p_system_log_id, p_message, 3);
END;
PROCEDURE ins_log_error_autonomous
(p_system_log_id IN NUMBER,
p_message IN VARCHAR2)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
ins_log(p_system_log_id, p_message, 3);
COMMIT;
END;
--- DELETE -----------------------------
PROCEDURE del_log
(p_id IN NUMBER)
IS
BEGIN
DELETE FROM tbl_log
WHERE id = p_id;
END;
PROCEDURE del_log_autonomous
(p_id IN NUMBER)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
del_log(p_id);
COMMIT;
END;
END pkg_log;
/
Определение размера таблиц
Для определения размера таблиц, я использую следующий SQL
файл table_size.sql
SELECT
table_name
, TRUNC(SUM(table_size)/1024/1024) AS
table_size_meg
, TRUNC(SUM(index_size)/1024/1024) AS
index_size_meg
, TRUNC(SUM(lobsegment_size)/1024/1024) AS lobsegment_size_meg
, TRUNC(SUM(lobindex_size)/1024/1024) AS lobindex_size_meg
, TRUNC(SUM(table_size +
index_size +
lobsegment_size +
lobindex_size)/1024/1024) AS sum_meg
FROM
(SELECT segment_name AS table_name
,
bytes as table_size
, 0 as index_size
, 0 as lobsegment_size
, 0 as lobindex_size
FROM user_segments
WHERE
segment_type = 'TABLE'
UNION
ALL
SELECT
i.table_name
, 0 as table_size
, s.bytes as index_size
, 0 as lobsegment_size
, 0 as lobindex_size
FROM user_indexes i
,
user_segments s
WHERE
s.segment_name = i.index_name
AND
s.segment_type = 'INDEX'
UNION
ALL
SELECT
l.table_name
, 0 as table_size
, 0 as index_size
, s.bytes as lobsegment_size
, 0 as lobindex_size
FROM user_lobs l
,
user_segments s
WHERE
s.segment_name = l.segment_name
AND
s.segment_type = 'LOBSEGMENT'
UNION
ALL
SELECT
l.table_name
,
0 as table_size
, 0 as index_size
, 0 as lobsegment_size
, s.bytes as lobindex_size
FROM user_lobs l
,
user_segments s
WHERE
s.segment_name = l.index_name
AND
s.segment_type = 'LOBINDEX')
GROUP
BY table_name
ORDER
BY sum_meg DESCфайл table_size.sql
Подписаться на:
Сообщения (Atom)