Best way to backup Oracle Db

Сайн байна уу? Анх сурч байгаа newbie байгаа юм. Oracle database backup хийх энгийн аргуудаас хуваалцаач?

Баазын хувилбар, үйлдлийн систем болон бусад дэлгэрэнгүй мэдээллийг оруулна уу.

Одоогийн байдлаар Oracle Data pump-г л их ашиглаж байна даа. Өгөгдлийн сангийн logical backup-г expdp/impdp коммандын тусламжтай авах боломжтой ба хэрхэн авах талаар доор тайлбарлая.

  • Өгөгдлийн сангийн backup авахын тулд заавал хэрэглэгчийн эрх шаардлагатай ба тухайн хэрэглэгч нь export хийж гэж буй бааз руу хандах эрхтэй байх ёстой.
  • Гарган авч буй dump файлыг хадгалах замыг урьдчилан үүсгэсэн байх шаардлагатай ба мөн oracle дээр Directory гэсэн объектэд нэмсэн байх шаардлагатай.

    CREATE OR REPLACE DIRECTORY test_dir AS ‘D:\backup’;
    GRANT READ, WRITE ON DIRECTORY test_dir TO scott;

Table export/import хийх

TABLES гэсэн параметрийг ашиглаж нэг буюу хэд хэдэн table-г export/import хийх боломжтой

expdp scott/[email protected] tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log
impdp scott/[email protected] tables=EMP,DEPT directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=impdpEMP_DEPT.log

Хэрэв import хийж байгаа table чинь өгөгдлийн санд аль хэдийнэ үүсчихсэн байгаа бол TABLE_EXISTS_ACTION параметрийг ашиглаж шинээр оруулж байгаа өгөгдлөө хэрхэхээ шийднэ.

TABLE_EXISTS_ACTION параметр нь дараах утгуудтай.

  • SKIP - Хэрэв тухайн table өгөгдлийн сан дээр байгаа бол шууд алгасаж дараагийн обьектыг оруулж эхэлнэ
  • APPEND - Өөрчлөгдөөгүй мэдээллийг нь үлдээж, шинэ мэдээллийг нь оруулна
  • TRUNCATE - Байгаа бүх мөрийг устгаж шинэ өгөгдлөө оруулна
  • REPLACE - Тухайн table-г устгаж шинэ table-ээ үүсгэж оруулна.

Их мэдээлэлтэй table дээр ихэвлэн partition үүсгэсэн байдаг ба export хийхдээ зөвхөн зааж өгсөн partition-г зааж өгөх боломжтой байдаг. Энэ аргыг ашигласнаар өмнө нь backup хийгээд авчихсан байгаа, дахин хзэээ ч өөрчлөгдөхгүй мэдээллийг дахин дахин хадгалахаас зайлсхийж системийн нөөц ашиглалтыг сайжруулах боломжтой юм.

Ингэхийн тулд дараах форматын дагуу командаа бичихэд л хангалттай.

expdp scott/[email protected] tables=EMP:partition_2015_06 directory=TEST_DIR dumpfile=EMP_DEPT.dmp logfile=expdpEMP_DEPT.log

Schema export/import хийх

SCHEMAS параметрийг ашиглаж зааж өгсөн schema-н мэдээллийг хадгалах боломжтой.

expdp scott/[email protected] schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
impdp scott/[email protected] schemas=SCOTT directory=TEST_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log

Өгөгдлийн санг бүхэлд нь export/import хийх

FULL гэсэн параметрийг ашиглаж тухайн өгөгдлийн санг бүхэлд нь export/import хийх боломжтой. Full backup-г SYSTEM болон SYS хэрэглэгчийн эрхээр хийх боломжтой

expdp system/[email protected] full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log impdp system/[email protected] full=Y directory=TEST_DIR dumpfile=DB10G.dmp logfile=impdpDB10G.log

INCLUDE / EXCLUDE хийх

INCLUDE болон EXCLUDE параметрийг ашиглан зааж өгсөн обьектийг оруулах, алгасаж болно.

expdp scott/[email protected] schemas=SCOTT include=TABLE:“IN (‘EMP’, ‘DEPT’)” directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
expdp scott/[email protected] schemas=SCOTT exclude=TABLE:"= ‘BONUS’" directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
expdp scott/[email protected] schemas=SCOTT exclude=STATISTICS directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log

За тэгээд өгөгдлийн сангийнхаа нөөцийг өдөр бүр тогтмол цагт авахыг хүсч байвал автомат ажилбар тохируулаад ашиглавал илүү амар болоод л явчихна даа.

6 Likes

Linux үйлдлийн системийн хувьд нөөцлөх скриптын жишээ оруулъя:
RMAN ий тохиргоо:

rman target /
SHOW ALL;
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 32 DAYS;
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/backup/orcl/%F';
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 CHANNEL DEVICE TYPE DISK FORMAT   '/backup/orcl/full_%u_%s_%p';
CONFIGURE MAXSETSIZE TO 33 G;
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 BACKED UP 2 TIMES TO DISK;
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/oracle/fra/orcl/snapcf_orcl.f';

Нөөцлөх скриптийг ашиглахаас өмнө харгалзах орчны болон бусад тохиргоонуудыг зөв хийх шаардлагатай. Дараах жишээнд /backup/log/ болон /backup/orcl/ хавтсуудад нөөцөлсөн файлуудыг хуулах бөгөөд тухайн хавтасны хандах эрх oracle хэрэглэгч бичих эрхтэйгээр байх шаардлагатай.

backup_database.sh файл

#!/bin/bash

# ORACLE HOME -ийг тухайн баазын хувилбар болон хаана суусын зөв зааж өгөх хэрэгтэй. oracle хэрэглэгчийн .bash_profile -д орчны тохиргоо хийгдсэн бол 'echo $ORACLE_HOME' коммандаар харах боломжтой.
export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1

# баазын нэр
export ORACLE_SID=orcl

# хэрэв rman хаана байгааг мэдэхгүй бол 'which rman' коммандыг оракл хэрэглэгчээр ажиллуулж харна 
export RMAN=/u01/app/oracle/product/11.2.0.4/dbhome_1/bin/rman

# тухайн үйлдлийн логийг бүртгэх
export RMAN_LOG_FILE=/backup/log/rmanbackup_`date +%Y%m%d%H%M`.log
export date=$(date -I)
cd /backup/orcl/
test ! -d $date && mkdir -p $date
# дараах 3 мөрнөөс аль нэгийг ашиглана. Лог файл идэвхжүүлэх эсэхээс шалтгаалж сонгоно
#$RMAN catalog=user/[email protected] target=/ >>$RMAN_LOG_FILE 2>>$RMAN_LOG_FILE <<EOF
$RMAN  target / >>$RMAN_LOG_FILE 2>>$RMAN_LOG_FILE <<EOF
#$RMAN  target / <<EOF
run
{
backup as compressed backupset
-- бүтэн нөөцлөлт
incremental level=0
-- диск рүү бичих
device type disk
-- keyword
tag "full_backup"
-- архивлогийг хамт нөөцлөнө
database PLUS ARCHIVELOG;
-- expire backup файлуудыг устгана
delete noprompt obsolete;
sql "alter system archive log current";
}
exit
EOF

Тухайн shell скриптыг оракл хэрэглэгчийн cronjob дээр нэмж өгөн автоматжуулах боломжтой. Түүнчлэн нэмэлт код бичиж өөр сервер рүү хуулсан ч болох юм.

Ашиглахдаа sh backup_database.sh коммандыг oracle хэрэглэгчийн коммандын мөрнөөс ажиллуулна.

2 Likes

Үйлдлийн системийн хувьд win2008, Oracle11g байгаа.

Баярлалаа, Ер нь баазын лог файлыг шаардлагагүй гэж үзэж байвал устгаад байвал зүгээр үү? Backup хийхдээ лог авах шаардлага байдаг уу?

Archivelog файлууд recovery process-т ашиглагдана. Баазын хэмжээнээс шалтгаалаад тодорхой хугацаагаар авч байсан нь дээр. хэр их TRANSACTION хийдэг, хэр хугацаагаар хадгалах уу гэдэгээ тодорхойлох хэрэгтэй.

Hi All.
Thank you for your comment,

Дараах байдлаар баазаа full backup хийх гэж үзлээ тэгсэн хэд хэдэн алдаа гараад байх юм?? Интернетээр жаал хайж үзлээ. Тухайн обект системд үүсээгүй эсвэл түүн дээр алдаа гарсан тохиолдлууд байдаг юм байна. Гэхдээ үүнийг шууд Production System with no Backup дээр хийж болох эсэх дээр иргэлзээд.

C:\app\Administrator\product\11.2.0\dbhome_1\BIN\expdp.exe system/xxxxx full=y directory=‘D:\OracleDBB’ dumpfile=‘D:\OracleDBB\expdp_dumpfile.dmp’ logfile=‘D:\OracleDBB\expdp_dumpfile.log’


Export: Release 11.2.0.1.0 - Production on Thu Dec 22 13:25:38 2016

Copyright © 1982, 2009, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit
Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

ORA-31626: job does not exist
ORA-04063: package body “SYS.DBMS_INTERNAL_LOGSTDBY” has errors
ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_INTERNAL_LOGSTDBY"
ORA-06512: at “SYS.KUPV$FT”, line 991
ORA-04063: package body “SYS.DBMS_LOGREP_UTIL” has errors
ORA-06508: PL/SQL: could not find program unit being called: “SYS.DBMS_LOGREP_UTIL”


санах ой хэр бааз вэ? баазын хэмжээ хэр том бэ? хэрэв ASMM, AMM идэвхжээгүй бол StreamPoolSize (show parameter STREAM_POOL_SIZE) ийн хэмжээ хэд вэ?

datapump нь stream pool ашиглах тул уг хэмжээг шалгах, хэрэв 0 байвал нэмж үзээрэй. баазын хэмжээтэй ойролцоо байхад болно.

1 Like

EXPDP ажилбарын DIRECTORY аргументад ийм absolute зам байж болохгүй байх. Бааз дээрээ эхлээд заавал directory object үүсгэх ёстой. Доорхи шиг

CREATE OR REPLACE DIRECTORY test_dir AS 'D:\BACKUP';
GRANT READ, WRITE ON DIRECTORY test_dir TO scott;

Directory үүсгэсний дараа expdp ажилбарыг ажиллуулж буй USER-т тухайн object-г унших, бичих эрхийг өгөх хэрэгтэй.

Яг дээрхи аргаар object-оо үүсгэцэн бол дараах коммандыг ажиллуулаад үзээрэй.

expdp system/xxxxx full=y directory=test_dir dumpfile=expdp_dumpfile.dmp logfile=expdp_dumpfile.log