Roman Krasavtsev

четверг, 24 мая 2012 г.

Oracle RMAN


Для проверки установки режима архивации можно сделать следующий запрос к представлению V$DATABASE:
#sqlplus / as sysdba
 
SQL> select log_mode from v$database;
 
LOG_MODE
------------
ARCHIVELOG
Команда archive log так же показывает состояние режима архивирования. В дополнение она выводит информацию о режиме архивирования, состоянии флага автоматического архивирования, месте назначения архивных журнальных файлов и значениях последовательностей журналов.
#sqlplus / as sysdba
 
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/admin/orcl/arch
Oldest online log sequence     4
Next log sequence to archive   6
Current log sequence           6

Включение режима архивации базы данных
oracle@uc-oracle06:~> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Thu Feb 17 09:51:21 2011

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount;
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size                  1261372 bytes
Variable Size             125829316 bytes
Database Buffers          155189248 bytes
Redo Buffers                2932736 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> ARCHIVE LOG START;



Начиная с первого релиза 10g в Oracle можно определить специальную область на диске, называемую флэш-областью восстановления (FRA), которая используется базой данных как резервное местоположение. По умолчанию, RMAN создает в FRA резервные копии всех типов - регулярных резервных копий, образов копий, журнальных архивных файлов. Так как RMAN знает о существовании этой области, это позволяет ему автоматически удалять ненужные избыточные или устаревшие резервные копии, чтобы освободить место для новых копий. Для автоматического удаления необходимо правильно настроить политику удержания.
Retention Policy (политика удержания)
Настройка политики 
Существуют две политики удержания Recovery window и Redundancy, которые являются взаимозаменяемыми. В один момент работает только одна политика.
  1. Recovery window (SYSDATE – checkpoint_time <= recovery_window):
Устанавливает количество дней (срок годности бэкапа).
#rman target /
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
  1. Redundancy
Устанавливается фиксированное число бекапов, которые необходимо иметь.
#rman target /
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 1;


Просмотр настоек конфигурации базы данных
Два параметра, которые определяют работу FRA:
  1. Устанавливает месторасположение FRA
DB_RECOVERY_FILE_DEST
  1. Устанавливает размер FRA
DB_RECOVERY_FILE_DEST_SIZE

Пример изменения параметра:
#sqlplus / as sysdba
ALTER SYSTEM DB_RECOVERY_FILE_DEST_SIZE = /oracle/FRA

Просмотр всех настроек:
oracle@uc-oracle06:~> rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Tue Dec 13 16:39:51 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: LEARN06 (DBID=640305899)

RMAN> show all;

using target database control file instead of recovery catalog
RMAN configuration parameters for database with db_unique_name LEARN06 are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/product/11.2/db/dbs/snapcf_learn06.f'; # default

RMAN>

Если  в значении параметра CONTROLFILE AUTOBACKUP стоит ON , то RMAN автоматически выполняет резервирование управляющих файлов и текущего файла первоначальной инициализации  после выполнения команды BACKUP.
#rman target /
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

Полный бекап со сжатием
#rman target /
RMAN> CROSSCHECK BACKUP;
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG DELETE ALL INPUT;
RMAN> DELETE NOPROMPT OBSOLETE;

Проверка свободного места во FRA(1)
#sqlplus / as sysdba
SELECT ROUND((SPACE_USED)/1024/1024/1024) "USED GB", ROUND((SPACE_LIMIT)/1024/1024/1024) "MAX GB", ROUND(((SPACE_LIMIT)-(SPACE_USED))/1024/1024/1024) "FREE GB" FROM V$RECOVERY_FILE_DEST;

Проверка свободного места во FRA(2):
#sqlplus / as sysdba
SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

CROSSCHECK ARCHIVELOG
Use the CROSSCHECK command to synchronize the physical reality of backups and copies with their logical records in the RMAN repository.
#rman target /

CROSSCHECK ARCHIVELOG ALL;

CROSSCHECK BACKUP;
Удаление архивных журналов (системная дата – 30 дней):
#rman target /
DELETE NOPROMPT FORCE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-30’;


Удаление всех архивных журналов:
#rman target /
DELETE NOPROMPT ARCHIVELOG ALL;

Восстановление
  1. Перенести на резервный сервер FRA, положить в тот же каталог, что и на исходном.
  2. Создать структуру папок базы данных также, как и на исходном.
  3. Создать экземпляр с помощью oradim, коннектимся к нему при помощи RMAN (rman target / nocatalog)
  4. Потом set dbid (циферки) (SELECT DBID FROM V$database;)
  5. startup force nomount;
  6. restore controlfile from ' /oracle/flash_recovery_area/LEARN06/autobackup/2012_01_12/o1_mf_s_772393200_7jxw60np_.bkp';
  7. restore spfile to pfile '/oracle/11.2/db/dbs/ initlearn06.ora' from '/opt/oracle/flash_recovery_area/LEARN06/autobackup/2011_12_22/o1_mf_s_770575072_7h6dojmn_.bkp';
  8. startup force mount pfile='/oracle/11.2/db/dbs/initlearn06.ora';
  9. restore database;
  10.  recover database;
    Потом ALTER DATABASE OPEN RESETLOGS;

Всякие примеры:



RMAN> set dbid xxxxxxxx;
executing command: SET DBID
run {
startup nomount
restore controlfile from autobackup;
alter database mount;
restore database;
recover database;
alter database open resetlogs;
}
поскольку не указано UNTIL, Скрипт выполняется c остановкой :
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 05/16/2008 16:55:53
RMAN-06054: media recovery requesting unknown log: thread 1 seq 305 lowscn 6889283

RMAN> alter database open resetlogs;

--

connect target sys/sys ;
configure controlfile autobackup on;
CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
delete obsolete;
RUN {                                                                                                        
  BACKUP  AS COMPRESSED BACKUPSET DATABASE
 PLUS ARCHIVELOG DELETE ALL INPUT ;
}
exit



Дополнительные команды:
startup force nomount;

restore controlfile from '/oracle/flash_recovery_area/LEARN06/autobackup/2011_12_22/o1_mf_s_770575072_7h6dojmn_.bkp';

restore spfile to pfile '/oracle/11.2/db/dbs/initlearn06.ora' from '/oracle/flash_recovery_area/LEARN06/autobackup/2011_12_22/o1_mf_s_770575072_7h6dojmn_.bkp';





MS SQL

Дата последнего восстановления базы DB_NAME:

select max(restore_date) as restore_date from msdb..restorehistory where destination_database_name = 'DB_NAME'

Дата последнего бэкапа и путь к нему для базы DB_NAME

select top 1 a.backup_finish_date, b.physical_device_name from msdb.dbo.backupset a join msdb.dbo.backupmediafamily b on b.media_set_id=a.media_set_id where a.database_name = 'DB_NAME' order by a.backup_finish_date desc

Модель восстановления, владелец, статус, дата создания для базы DB_NAME:

select DatabasePropertyEx('DB_NAME','Recovery') as recovery, suser_sname(sid) as owner, DatabasePropertyEx('DB_NAME','Status') as status, crdate as createed from master..sysdatabases where name = 'DB_NAME'

Другое:

use database
go
sp_configure 'allow updates',1
reconfigure with override
go

sp_configure 'deadlock checking period' ,5000
go


use master
go
create login username
with password='123456',
DEFAULT_DATABASE = master,
DEFAULT_LANGUAGE =us_english,
CHECK_POLICY = OFF
go


use master
go
backup log AAAA with no_log
--backup log dexia with truncate_only
go

use AAAA
go
DBCC SHRINKFILE (New_Log_File,470)
go

sp_helpdb AAAA

sp_helplogins 'user'

#Порты

--Для 2005 и 2008
declare @rc int, @instace_name varchar(20), @dir varchar(5), @reg varchar(100)
set @instace_name = (select @@servicename)
set @reg = 'SOFTWARE\Microsoft\Microsoft SQL Server\' + @instace_name + '\MSSQLServer\SuperSocketNetLib\Tcp'
exec @rc = master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', @reg ,'TcpPort', @dir output
select @dir

--Для 2000
xp_instance_regread N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp', N'TcpPort'




#Сбросить пароль для всех на 123456

set nocount on
go
use master
go
SELECT 'ALTER LOGIN [' + ltrim(rtrim(log.name)) + '] WITH PASSWORD = 123456, CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
      + char(10)
FROM
sys.server_principals AS log
JOIN sys.sql_logins AS sqllog ON sqllog.principal_id = log.principal_id
WHERE log.type = 'S' and log.principal_id > 255
GO

-- alter login LOGIN_NAME with password = '123456', CHECK_POLICY = OFF   -- отдельно для 1 логина

#Password

alter login sa with CHECK_POLICY = OFF
alter login sa with password = 'pfpbr'


#Kill

use master
select 'kill',*  from sysprocesses where dbid=db_id('')

sp_who

#history_of_restore

use msdb
go
select destination_database_name, restore_date
from restorehistory
where destination_database_name = ''
order by destination_database_name, restore_date
desc
go

select max(restore_date) from msdb..restorehistory
where destination_database_name = ''
go

#compatibility_level
use master
go
exec dbo.sp_dbcmptlevel 'AAAA' , 100
go

#restore
sp_helpdb AAAA

restore filelistonly from disk = ''


/*
sp_dboption 'AAAA', 'dbo use only',  true
go

use master
go
restore database AAAA
  from disk = ''
     with replace, 
move 'DATA' to '',
move 'LOG' to '',
stats = 1
go
*/







Sybase


--------------------Смотрим список файлов в дампе---------------------------------
---Высчитываем размер базы  размер страницы * кол-во страниц----------------------

use master
go
load database toyota from 'd:\dump\report72.bak'
with headeronly
go

----------------------Инициализируем девайс для даты базы------------------------
DISK INIT
    NAME='report72_pr_data',
    PHYSNAME='D:\data\sybase\report72_pr_data.dat',
    SIZE='11700M',
    VSTART=0,
    CNTRLTYPE=0,
    DSYNC=TRUE
go
-----------------------Инициализируем девай для логов базы--------------------------
DISK INIT
    NAME='report72_pr_log',
    PHYSNAME='D:\data\sybase\report72_pr_log.dat',
    SIZE='3300M',
    VSTART=0,
    CNTRLTYPE=0,
    DSYNC=TRUE
go
---------------------- Дропаем девайс, если нужно-----------------------
USE master
go
EXEC sp_dropdevice 'report72_data'
go

-------------------------Создаем пустую базу на созданных девайсах-----------------------
USE master
go
CREATE DATABASE report72_pr
    ON report72_pr_data=11700        --'AAAA_data' - имя девайса и размер
    LOG ON report72_pr_log=3300      --'AAAA_log' - девайс, на котором будет располагаться файл данных и размер
go                                   --если дату и логи восст. на один девайс нужен параметр with override
USE report72_pr
go
EXEC sp_changedbowner 'sa'
go

-----------------------Восстанавливаем дамп на созданную базу---------------------------------
load database report72_pr from 'd:\dump\report72.bak'
 go
online database report72_pr
go
--------------------------------

use master
go
sp_addlogin 'user', '123456'
go

use report72_pr
go
sp_dropalias user
go

use report72_pr
go
sp_addalias user_dbo, dbo
go
sp_adduser 'user', 'user'
go

USE master
go
CREATE DATABASE report72_pr
    ON report72_data=11700        --'AAAA_data' - имя девайса и размер
    LOG ON report72_data=3300 with override   --'AAAA_log' - девайс, на котором будет располагаться файл данных и размер
go

use master
go
DROP database report72
go

select @@version


#Cross_dump_unix


--DATABASE_NAME заменить на имя бд

use master
go

select getdate()
go

exec sp_dboption DATABASE_NAME ,'single user', true    
go

use DATABASE_NAME  
go
checkpoint
go

exec sp_flushstats
go

checkpoint
go

waitfor delay '00:03:00' --'HH:MM:SS'
go

use master
go
dump database DATABASE_NAME to 'compress::5::c:\dump\DATABASE_NAME_1.dmp'
                stripe on 'compress::5::c:\dump\DATABASE_NAME_2.dmp'
            stripe on 'compress::5::c:\dump\DATABASE_NAME_3.dmp'
            stripe on 'compress::5::c:\dump\DATABASE_NAME_4.dmp'
            stripe on 'compress::5::c:\dump\DATABASE_NAME_5.dmp'
go

exec sp_dboption DATABASE_NAME ,'single user', false      
go

use DATABASE_NAME
go
checkpoint
go

#Девайсы

-- Перед созданием новой БД, необходимо создать девайсы,
-- на которых она будет располагаться
-- вместо АААА указать имя базы.

USE master
go
DISK INIT
    NAME='AAAA_data',
    PHYSNAME='c:\sybase\data\AAAA_data',    -- указать путь, где будет создан файл
    SIZE='100M',        -- указать необходимый размер файла данных в Мб
    VSTART=0,
    CNTRLTYPE=0
go
EXEC sp_diskdefault 'AAAA_data',defaultoff
go
IF EXISTS (SELECT * FROM master.dbo.sysdevices WHERE name='icb61_data')
    PRINT '<<< CREATED DATABASE DEVICE AAAA_data >>>'
ELSE
    PRINT '<<< FAILED CREATING DATABASE DEVICE AAAA_data >>>'
go


USE master
go
DISK INIT
    NAME='AAAA_log',
    PHYSNAME='c:\sybase\data\AAAA_log',     -- указать путь, где будет создан файл
    SIZE='100M',        -- указать необходимый размер файла лога в Мб
    VSTART=0,
    CNTRLTYPE=0
go
EXEC sp_diskdefault 'AAAA_log',defaultoff
go
IF EXISTS (SELECT * FROM master.dbo.sysdevices WHERE name='AAAA_log')
    PRINT '<<< CREATED DATABASE DEVICE AAAA_log >>>'
ELSE
    PRINT '<<< FAILED CREATING DATABASE DEVICE AAAA_log >>>'
go


#База разворачивается на предварительно созданных девайсах

USE master
go
CREATE DATABASE aaaa
    ON AAAA_data=100        --'AAAA_data' - имя девайса и размер
    LOG ON icb61_log=100    --'AAAA_log' - девайс, на котором будет располагаться файл данных и размер
go
USE aaaa
go
EXEC sp_changedbowner 'sa'
go
IF DB_ID('aaaa') IS NOT NULL
    PRINT '<<< CREATED DATABASE aaaa >>>'
ELSE
    PRINT '<<< FAILED CREATING DATABASE aaaa >>>'
go



UNIX


#Создание пользователя
mkdir /export/home
mkdir /export/home/wsadmin
useradd -d /export/home/wsadmin/ -s /bin/bash wsadmin


useradd -g oinstall -G dba -d /export/home/oracle/ -s /bin/bash oracle
passwd oracle
usermod -g oinstall -G dba oracle


mkdir /home/wsadmin
useradd -d /home/wsadmin/ -s /bin/bash wsadmin

#Смена пароля
passwd wsadmin

#Создание папок
mkdir /opt/diasoft
mkdir /opt/diasoft/profiles

#Смена владельца
chown -R wsadmin /opt/IBM
chown -R wsadmin /opt/diasoft

#Создание профиля
./manageprofiles.sh -create -profileName main -profilePath /opt/diasoft/profiles/main -templatePath /opt/IBM/WebSphere/AppServer/profileTemplates/default

#ORACLE
 /usr/sbin/groupadd oinstall
 /usr/sbin/groupadd dba

#tar & gzip
tar -cfE /opt/diasoft/dump/profiles/$1.tar *
gzip -q $1.tar

Oracle

Создание пользователя и раздача привилегий
CREATE USER VIRT_CBS2 IDENTIFIED BY VIRT_CBS2;
GRANT CONNECT, RESOURCE TO VIRT_CBS2;

Создание директории, экспорт и импорт
CREATE DIRECTORY DUMPS AS '/opt/oracle/dumps';
expdp system/system DIRECTORY=DUMPS DUMPFILE=USER_SCHEMA_PLATFORM.DMP LOGFILE=USER_SCHEMA_PLATFORM.EXPDP.LOG SCHEMAS=PLATFORM
impdp system/system DIRECTORY=DUMPS DUMPFILE=USER_SCHEMA_PLATFORM.DMP LOGFILE=USER_SCHEMA_PLATFORM.IMPDP.LOG2 SCHEMAS=PLATFORM REMAP_SCHEMA=PLATFORM:VIRTUAL1 TRANSFORM=OID:N

Импорт с максимальным количеством параметров
impdp system/system DIRECTORY=DP DUMPFILE=USER_SCHEMAS.DMP LOGFILE=SYSFLEXTERA_DEMO.IMPDP.LOG SCHEMAS=SYSFLEXTERA,DEMO REMAP_SCHEMA=SYSFLEXTERA:TAX1 REMAP_TABLESPACE=USERS1:USERS TRANSFORM=OID:N TABLE_EXISTS_ACTION=REPLACE

Размер схемы
SELECT SUM(BYTES/1024/1024) FROM DBA_SEGMENTS WHERE  OWNER = 'PLATFORM' AND (SEGMENT_TYPE LIKE 'TABLE%' OR SEGMENT_TYPE  LIKE 'LOB%')

Размер всех схем
SELECT OWNER AS SCHEMA, TRUNC(SUM(BYTES)/1024/1024) AS MB FROM DBA_EXTENTS GROUP BY OWNER ORDER BY SCHEMA ASC, MB DESC;

#ВСТАВКА ИЗ OMEGA7.PDOCBUFERRORSTACK@ST7
INSERT INTO "LOAN_ADMWS"."PDOCBUFERRORSTACK" SELECT * FROM OMEGA7.PDOCBUFERRORSTACK@ST7

Использование эскпорта с текущей датой в имени файла и лога
expdp system/system DIRECTORY=DP DUMPFILE=DEPOSIT_BACK_`date +%F`.DMP LOGFILE=DEPOSIT_BACK_`date +%F`.EXPDP.LOG SCHEMAS=DEPOSIT_BACK