| tail -f [plik] | show file online |
| ctrl + C, fg [nr jobs], jobs | background process manager>/td> |
| iptables -L -t nat -v|drop | list all rules from chain nat without drop |
| iptables -m [cel] –help | goal desc |
| sort -u | sort and output only unique rows |
| ctrl z | pause |
| bg [program] | put on background |
| jobs | show background jobs |
| fg [nr z jobs] | recover from background |
| find / -perm +4000 | search files with setuid for owner, 2000 for group |
| find -perm -002 -mtime,-atime,-ctime -n,+n | search files with write privilege at least, -mtime (modyfy),-atime (access),-ctime(time change privileges),-n (within n days),+n (more then n days ago) |
| find / -name plik -exec /bin/execfile {} \; | run execfile on search file |
| find -type d -exec /bin/chmod 774 {} \; | change privileges only on directories |
| lspci | listuje urządzenia dla pci podobnie lsusb |
| date[opcje], hwclock –systohc | konfiguracja daty |
| strobe | skanowanie |
| scripts | wyciąganie tekstu z binarek |
| file [plik] | pokazanie rodzaju pliku |
| file -s [raw_device] | pokazanie filesystemu |
| md5sum -b [plik] | suma md5 z pliku |
| lsmod | lista modułów |
| strings [plik] | wypisanie np. z pliku w C ciagów znaków |
| uniq -d | wypisuje tylko linie powtarzajace sie |
| strace [polecenie] 2> [plik] | zapis w [plik] informaciji o wykonywanych przez polecenie instrukcjach |
| strace -f -e open [polecenie] | jw tyko -f procesy potomne, -e open otwierane pliki |
| echo “$((`date -d ‘10 mar’ +%s`-`date +%s`))/86400″|bc | obliczanie dni pomiędzy określonymi datami |
| zcat /usr/src/2.4.32-libata1.patch.gz | patch -p1 | patchowanie jądra – bedąc w katalogu ze źródlami |
| logger [tekst] | wpis do logów dowolnego tekstu |
| sed -e’s/a//g’ | edytor liniowy |
| shc -f | kompilacja plików w bashu |
| expect | automatyczne wykonywanie programów |
| which [polecenie] | ścieżka polecenia |
| locate [plik] | proste wyszukiwanie pliku |
| man -k [slowo],apropos [slowo] | wyszukiwanie manuali w których występuje [slowo] |
| /proc/sys/kernel/printk | ustawienia dotyczace komunikatow |
| mbmon | odczyty z czujnikow na plycie glownej |
| ab | testowanie serwera Apache |
| mii-tools | testowanie linkow |
| tcpdump -D | wypisuje wszystkie interfejsy |
| tcpdump ‘tcp[tcpflags] & {tcp-syn) !=0′ | nasłuch pakietow SYN |
| tcpdump -nv dst |
nasłuch tylko icmp-echo |
| hdparm -it /dev/hda | testowanie prędkości dysku |
| iperf -s|iperf -c [IP servera] | testowanie prędkości łącza komendy odpowiednio dla serwera i dla klienta |
| ethtool | zestawienie kart sieciowych |
| type [program] | pokazuje ścieżkę do programu |
| SVGAtextmode 80×40x9 | ustawianie rozdielczości pod konsolą |
| cfdisk /dev/hda1 | do kasowania i tworzenia partycji |
| mkfs -t xfs -f /dev/hda1 | do formatowania partycji |
| man [polecenie]| col -b >[plik] | zamiana mana na plik tekstowy |
| ldd [polecenie] | pokazuje z jakich bibliotek korzysta polecenie |
| dpkg –get-selections “*” | wyświetla listę zainstalowanych pakietów |
| watch | powtarzanie polecen z wyswietlaniem wyniku na konsole |
| mysql>load data local infile ‘[path_do_pliku]‘ into table [nazwa_tabeli] fields terminated by ‘[znak]‘([kolumna1],[kolumna2]); | wrzut danych do tabeli mysql |
| ps auxSwwf | pokazuje procesy z wykorzystaniem zasobow, w strukturze zaleznosci |
| dpkg-reconfigure locales | rekonfiguracja ustawień lokalnych |
| cp /usr/share/zoneinfo/Europe/Poland /etc/localtime | zmiana ustawień strefy czasowej |
| locale | wyświetlenie ustawień lokalnych, w cudzysłowie te które pobierane ze zmiennej LANG, bez cudzysłowia te konfigurowalne indywidualnie |
| locale -a | wyświetlenie dostępnych ustawień |
| gbd | debuger c |
| netselect-apt | wybór najszybszego repozytorium |
| tzconfig,tzselect | konfiguracja strefy czasowej |
| dircolors -p >.dircolorseval `dircolors -b .dircolors` | zmiana kolorów plikow |
| smbclient -L [serwername] -U [user] -W [workgroup] | przeglądanie zasobów na serwerze w$ |
| mount -t cifs //[serwername]/[share] /[mount_point] | montowanie zasobów w$ |
| dos2unix [file] | konwersja plików z w$ |
| dmidecode |grep MB | sprawdzanie podpięcia pamięci |
| dmidecode -s | sprawdzanie wersji biosu, chassis,serwer,tag etc. |
| blkid | sprawdzanie uuid, label urządzeń blokowych |
| unset | usuwanie zmiennych środowiskowych |
| chkconfig –list | sprawdzenie uruchamianych usług |
| basename | wyciaganie samej nazwy bez ścieżki |
| echo ${zm:0:3} | wyciąganie ze zmiennej zm od 1 do 3 pozycji w prawo |
| command1 && command2 | gdy wynik błędu z command1 jest 0 to wykonuje command2 |
| command1 || command2 | gdy wynik błędu z command1 jest różne od 0 to wykonuje command2 |
| tarowanie z wykluczeniem plikow | tar -cf [archive_name].tar [dir_path] –exclude [dir_path]/[exclude_dir] –exclude [dir_path]/[exclude_dir] |
| tarowanie z usunięciem i wyszukaniem | tar –remove-file -czf [archive_name].tar.gz -C [dir_path] `find [dir_path] -name “[name]\.*” -exec basename {} \;` |
| tarowanie logow | find [dir_logpath] -mtime 18 -exec tar –remove –append –file=[destination_path]/filename`date -d “18 days ago” +%F`.tar {} \; |
| sprawdzenie zawartości | tar -tf [plik].tar |
| sprawdzenie aliasów | alias -p |
| szukanie plików w bieżącym katalogu zmodyfikowanych między 495 a 312 dniem | find ./ -maxdepth 1 -mtime +312 -mtime -495 -exec basename {} \; |
| dodawanie plików do istniejącego archiwum | tar –append –file=[archiwum].tar plik |
| ładnie sformatowany output z basha | awk ‘{printf(”%-25s%-10s%-10s%-10s%\n”,$1,$2,$3,$4)}’ |
| ethtool -s eth0 speed 10 duplex half autoneg off | zmiana ustawień karty |
| ETHTOOL_OPTS=”autoneg off speed 100 duplex full” | wpis do ifcfg-ethx |
| ssh-keygen -t rsa cat id_rsa.pub >> .ssh/authorized_keys |
generacja kluczy (pc local) dołączenie klucza do zaufanych (pc remote) |
| alternatives –install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/java/jdk1.6.0_17/jre/plugin/i386/ns7/libjavaplugin_oji.so 2 | add symbolic link /usr/lib/mozilla/plugins/libjavaplugin.so to alternatives with name libjavaplugin.so and with source /usr/java/jdk1.6.0_17/jre/plugin/i386/ns7 and priority 2 |
| change default priority | alternatives –config libjavaplugin.so |
| check alternatives | alternatives –display libjavaplugin.so |
| chkconfig [command] on |
turn on command during start |
| partprobe | refresh table partitions |
| cpio -t < file.cpio cpio -id < file.cpio |
check cpio unpack cpio |
| getfacl [dir] | [file] | show extended acl list |
| setfacl -m user:[user]:rwx [dir] | [file] | set extended acl |
| vmstat [delay] [how_many] | virtual memory stats |
| iostat [delay] [how_many] | cpu and i/o stats |
| sar [delay] [how_many] | collected stats |
| sar -r | collected mem stats |
| pwck,grpck | verify passwd and group file |
| paste file1 file2 > file3 | concatenate files by columns |
| cut -f3 file | get 3-rd column from file |
| cut -c3-5 file | get 3-5 character from file |
szacowanie ilości danych do wprowadzenia przy odtwarzaniu (róznica pomiędzy tym co w plikach danych a tym co w redologach):
SELECT * FROM v$instance_recovery;
wymagane do archiwizacji:
- v$datafile
- v$controlfile
- v$logfile
- SPFILE
.ora - PWD
.ora
przełączenie całej bazy do archiwizacji:
ALTER DATABASE BEGIN|END BACKUP;
sprawdzenie plików w procesie backupu:
SELECT file#,status FROM v$backup;
ustawianie takiego samego nr SCN dla wszystkich plików danych-CHECKPOINT:
ALTER SYSTEM SWITCH LOGFILE;
kopia pliku kontronlnego:
ALTER DATABASE BACKUP CONTROLFILE TO ‘
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
wywołanie checkpointa:
ALTER SYSTEM CHECKPOINT;
podano za http://www.ploug.org.pl/plougtki.php?action=read&p;=8&a;=6
zawartość naglówka pliku danych:
start SCN,
nr sekwencyjny bieżącego redologa w momencie punktu kontrolnego,
licznik punktów kontrolnych dla danego pliku
zawartość controlfile:
stop SCN dla kazdego pliku danych (dla pracującej bazy nieskończony),
nr sekwencyjny bieżącego redologa w momencie punktu kontrolnego,
licznik punktów kontrolnych dla każdego pliku danych
zamknięcie bazy (normal,imediate) to zrobienie punktu kontrolnego czyli:
- zwiększenie licznika punktów kontrolnych w nagłówku pliku danych
oraz zwiekszenie licznika punktów kontrolnych w controlfile dla w/w pliku, - uaktualnienie nr sekwencyjnego bieżącego redologa w nagłówku pliku danych i w controlfile
- stop SCN dla określonego pliku danych w controlfile przyjmuje taką wartość jak start SCN tego pliku
uruchomienie bazy (sprawdzenie czy):
- licznik punktów kontrolnych w nagłówku pliku = licznik punktów kontrolnych w controlfile dla pliku
- nr sekwencyjny bieżącego redologa w nagówku pliku = nr sekwencyjny w controlfile
- start SCN w pliku danych = stop SCN w controlfile dla pliku
W przypadku gdy baza danych zostanie zamknięta w trybie ABORT punkt kontrolny nie zostanie wykonany. Oznacza to, że wartości stop SCN (w pliku kontrolnym) dla wszystkich plików danych nie zostaną zrównane z odpowiadającymi im wartościami start SCN (por. rysunek 3b). Jeżeli pliki danych nie zostały wczytane z kopii bezpieczeństwa, to po ponownym otwarciu bazy danych liczniki punktów kontrolnych i numery sekwencyjne w plikach danych posiadają takie same wartości, jak odpowiadające im liczniki i numery sekwencyjne w pliku kontrolnym. Natomiast, wartości parametrów start SCN i stop SCN są różne. Oznacza to, że system powinien zaaplikować zmiany zapisane we włączonych (online) plikach dziennika powtórzeń.
W przypadku gdy po zamknięciu bazy danych dowolny plik danych zostanie zastąpiony plikiem archiwalnym, wartość licznika punktów kontrolnych i numer sekwencyjny w jego nagłówku nie będą zgodne z odpowiadającymi im wartościami w pliku kontrolnym. Niezgodność ta zostanie wykryta w momencie otwierania bazy danych. Wówczas system zgłosi potrzebę odtworzenia bazy danych. Po wydaniu odpowiedniego polecenia, do archiwalnego pliku danych zostaną zaaplikowane zmiany pochodzące ze zarchiwizowanych plików dziennika powtórzeń. Do pliku danych będą aplikowane zmiany zapisane w plikach dziennika począwszy od numeru wskazywanego w nagłówku tego pliku danych, a skończywszy na pliku dziennika wskazywanym w pliku kontrolnym – dla odtwarzania pełnego lub wskazanym pliku dziennika – dla odtwarzania częściowego.
Zaleca się sporządzanie kopii jednej przestrzeni tabel w danej chwili. Oprócz archiwizacji plików składających się na przestrzenie tabel, należy sporządzić również kopie pliku kontrolnego i wszystkich zarchiwizowanych plików dziennika powtórzeń zapisywanych w czasie archiwizacji przestrzeni. W celu odtworzenia stanu bazy danych na podstawie kopii archiwalnej, wykonanej w trybie online, system musi zaaplikować zapisy ze wszystkich tych zarchiwizowanych plików dziennika powtórzeń, które zostały utworzone w czasie między wydaniem polecenia alter tablespace … begin backup, a alter tablespace … end backup. Do odtworzenia pełnego są również potrzebne pozostałe zarchiwizowane pliki dziennika, zapisane po zakończeniu archiwizacji.
W celu wykonania archiwizacji fizycznej w trybie online całej bazy danych należy wykonać poniższe operacje:
W celu odtworzenia bazy danych w przypadku awarii nośników niezbędne będzie zaaplikowanie zapisów w zarchiwizowanych plikach dziennika powtórzeń o numerach począwszy od numeru sekwencyjnego najstarszego włączonego (online) pliku dziennika powtórzeń.
sql> alter tablespace nazwa_przestrzeni begin backup;
sql> alter tablespace nazwa_przestrzeni end backup;
sql> archive log list
Current log sequence określa numer ostatniego zarchiwizowanego pliku dziennika powtórzeń, którego kopię należy sporządzić aby możliwe było odtworzenie bazy danych.
sql> alter system switch logfile;
sql> alter database backup controlfile to ‘nazwa_pliku’;
ustawianie pamięci:
SGA
parametr sga_target można zmieniać dynamicznie do wartość sga_max_size, natomiast parametr sga_max_size może być zmianiany tylko statycznie czyli z restartem bazy
sga_target > 0 – automatyczne zarządzanie pamięcią
a wpisy:
- db_cache_size,
- java_pool_size,
- large_pool_size,
- shared_pool_size
oznaczają ich minimalną wartość
sga_target = 0 – ręczne ustawianie pamięci i powyższe parametry ustawić ręcznie
sga_max_size – do jakiej wartości można ręcznie podwyższyć sga_target
SHARED_POOL_SIZE – pamięć w Bajtach dla współdzielnonych SQL i PL/SQL i dla danych słownikowych (Library Cache, Data Dictionary Cache)
DB_CACHE_SIZE – rozmiar bufora danych dla podstawowego rozmiaru bloku danych
PGA
PGA – (dla procesu) pamięć zawierająca kursor, zmienne, obszary sortowania, łaczenia itp.
ustawienie pamięci w spfile:
ALTER SYSTEM SET sga_max_size=[size]M scope=spfile;
ALTER SYSTEM SET sga_target=[size]M scope=spfile;
sprawdzenie zużycia pamięci:
SELECT name,bytes/(1024*1024) as MB FROM v$sgainfo;
SELECT component, min(final_size) low, (min(final_size/1024/1024)) lowMB,
max(final_size) high, (max(final_size/1024/1024)) highMB
FROM v$sga_resize_ops GROUP BY component ORDER BY component;
sprawdzenie ustawień pamięci:
SHOW SGA
SELECT name, value FROM v$parameter WHERE name in (’sga_max_size’, ’shared_pool_size’,'db_cache_size’, ‘large_pool_size’,'java_pool_size’);
sprawdzenie liczby bloków:
SELECT blocks, extents FROM dba_segments WHERE segment_name=’[table]‘ AND owner=’[owner]‘;
sprawdzenie liczby bloków zajętych przez segment:
SELECT blocks, empty_blocks FROM dba_tables WHERE table_name = ‘[table]‘ AND owner=’[owner]‘;
optymalizacja przestrzeni:
zmiejszenie ilosci bloków zformatowanych pod wcześniej zainstertowane dane, które to dane następnie zostały zdeletowane, a bloki zostały automatycznie przesunięte do FREELIST, czyli obniża się HWM, jednak zaalokowana liczba bloków przez segment pozostaje nie zmieniona, ponadto bloki migrują do wolnej przestrzeni w miejsce pustych bloków dlatego zmienia się row_id i block_id.
ALTER TABLE [table] MOVE;
następnie proces Automatic Space Segment Management powinien wszystko wyczyścić, oczywiście przestrzeń musi być w trybie Extent Management Local, jeżeli nie to trzeba to zrobić ręcznie jak poniżej
zmniejszenie zaalokowanej liczby bloków przez segment:
ALTER TABLE [table] ENABLE ROW MOVEMENT;ALTER TABLE [table] SHRINK SPACE;
obliczanie wielkości przestrzeni wycofania:
undo_blk/s – ilość bloków wycofań na sekundę,
86400 – ilość sekund w ciągu dnia
undo_blk/s = SELECT (SUM(undoblks))/ SUM ((end_time – begin_time) * 86400) FROM v$undostat;ts_size = (show parameter undo_retention) * undo_blk/s * db_block_size + db_block_size
lub zapytanie:
SELECT (UR * (UPS * DBS)) + (DBS) AS “Bytes” FROM (SELECT value AS UR FROM v$parameter WHERE name = ‘undo_retention’), (SELECT (SUM(undoblks)/SUM(((end_time – begin_time)*86400))) AS UPS FROM v$undostat), (select block_size as DBS from dba_tablespaces where tablespace_name= (select value from v$parameter where name = ‘undo_tablespace’));
podstawowa procedura upgarade dla wersji 10:
1. przeczytać dokument README.html
2. sprawdzić System Requirements
3. ustawić zmienną systemową $ORACLE_HOME
4. wyłączyć wszystkie usługi bazy
5. zainstalować patcha na binaria bazy (modyfikuje,dodaje tylko pliki binarne w $ORACLE_HOME)
6. wykonać skrypt sprawdzający bazę danych:
SPOOL preupgrade_check.log
@$ORACLE_HOME/rdbms/admin/utlu102i.sql
SPOOL OFF
7. sprawdzić spool i zweryfikować, po ewentualnej korekcie wykonąć skrypt ponownie
8. wykonać upgrade bazy danych (modyfikuje obiekty w przestrzeni SYSTEM)
SPOOL patch.log
@$ORACLE_HOME/rdbms/admin/catupgrd.sql
SPOOL OFF
9. wyłączyć bazę:
10. uruchomić bazę i skompilować pakiety:
@$ORACLE_HOME/rdbms/admin/utlrp.sql
11.sprawdzić komponenty po upgrade:
OGÓLNE:
catupgrd.sql – wykonuje skrypty do upgrade, które to z kolei tworzą i zmieniają tabele słownikowe, widoki, typy, pakiety etc.,
czas upgrade poszczególnych komponentów:
przeczytać dokument README.html
sprawdzić System Requirements
ALTER SYSTEM SET java_pool_size=150M scope=spfile
ALTER SYSTEM SET shared_pool_size =150M scope=spfile
wyłączyć wszystkie usługi bazy
zainstalować patcha na binaria bazy
upgrade zainstalowanej bazy
- sqlplus /nolog
- sql> STARTUP MIGRATE
- sql> SPOOL PATCH.LOG
- sql> @$ORACLE_HOME/rdbms/admin/catpatch.sql
- sql> SPOOL OFF
zrestartować bazę
w razie problemów naprawić i wykonać ponownie
wykonać plik do kompilacji pakietów
- sql> @$ORACLE_HOME/rdbms/admin/utlrp.sql
sprawdzanie patchy:
@$ORACLE_HOME/opatch/opatch lsinventory
@$ORACLE_HOME/opatch/opatch lsinventory -detail
for more read documentation
format signs:
| %s | set nr |
| %p | piece of set nr |
| %c | copy nr for multi copy |
| %d | database name |
| %I | database id |
| %t | time index in sec |
| %D | day of month |
| %M | month |
| %Y | year |
| %T | year,month,day YYYYMMDD |
| %u | eight digit name consist of set nr and time |
| %U | uniq file name (necessary for many channel), consist of database id,day nr,month,year,file nr |
| %F | for controlfile c-[db_ID]-[YYYYMMDD]-[hex sequence from 00 to ff - max 256 different values] |
connect to database without catalog using controlfile:
rman> connect target /
rman> connect target [sys_user]/pass@[sid_target]
connect to catalog, and next to database (in one catalog may be register many databases):
rman> connect catalog [rman_user]/[pass]@[sid_rman_base]
rman> connect target [sys_user]/pass@[sid_target] lub
settings:
rman> configure retention policy to redundancy [number_of_files];
rman> configure retention policy to recovery window of [number od days] days;
rman> configure device type disk backup type to compressed backupset;
rman> configure device type disk backup type to [copy|backupset];
example of default settings:
CONFIGURE RETENTION POLICY TO REDUNDANCY ;
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/oracle/rmandata/%F.rbk’;
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 ‘/oracle/rmandata/data-%I-%T-%s-%p-%U.rbk’;
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM ‘AES128′; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO ‘/oracle/product/10.2.0/db_1/dbs/snapcf_sow01.f’; # default
example of backup script:
run {
backup full tag “FULL”
filesperset 20
database;
sql ‘alter system archive log current’;
backup format ‘/oracle/rmandata/arc-%I-%T-%s-%p-%U.rbk’
archivelog all delete input;
}
! if you set CONFIGURE CONTROLFILE AUTOBACKUP ON – for any command “BACKUP” automaticaly will be backuped controlfile, thus we get two entries for one backup in command “list backup”,
in example of backup script above we get four entries
!setting tags is not neccessary because in default you get nice format TAGYYYYMMDDTHH24MISS
list commands:
rman> list all script names;
rman> list copy of database;
rman> list backup [summary];
rman> list backup by file;
rman> list backup of database [summary];
rman> list backup of database archivelog all;
rman> list backup of archivelog all [summary];
rman> list backup of datafile ‘[path]‘ | [nr] [summary];
rman> list backupset [nr],[nr],[nr];
rman> list archivelog all; #list current archivelog
rman> crosscheck backup | archivelog | copy #check if backup files are still exist and they obtain status AVAILABLE or EXPIRED, (you can test move backup files to other location and then bring it back)
rman> list expired backupset; #backups that were not found during a crosscheck, crosscheck must be first
rman> list expired backup of archivelog summary;
rman> list expired copy of archivelog all;
rman> list incarnation of database;
report commands:
rman> report schema;
rman> report need backup; #what is neccessary to backup according present backup policy
rman> report need backup days 7;
rman> report need backup redundancy 7;
rman> report need recovery window of 7 days;
rman> report obsolete; #old files according present policy, (if you change policy, report will be change olso)
rman> report obsolete redundancy 7;
rman> report obsolete recovery window of 7 days;
delete commands:
rman> delete obsolete; #remove expired according present backup policy
rman> delete expired archivelog all;
backup commands:
rman> backup as copy database – copy at files which format is simmilar as datafiles
rman> backup as backupset database – copy at set?
rman> backup database;
other commands:
sql> select obsolete,backup_type,file_type,fname from v$backup_files;
sql> select * from v$rman_status;
sql> select * from v$rman_output;
rman> run {execute script [script_name];}
rman> run {sql ‘[sql_command'}
rman> run {host '[os_command]‘}
rman> create script {[data_script];}
create database for catalog:
sql> create tablespace [ts_rman] datafile ‘[file]‘ size [size]m autoextend on next [size]m;
sql> create user [rman_user] identified by [password] default tablespace [ts];
sql> grant resource,connect,recovery_catalog_owner to [rman_user];
create structure of catalog database on schema [rman_user]):
rman catalog [rman_user]/[pass]@[sid_rman_base] lub
rman> connect catalog [rman_user]/[pass]@[sid_rman_base]
rman> create catalog
register database in catalog (in table [rman_user].db occur new entry):
rman catalog [rman_user]/[pass] target [sys_user]/[pass]@[sid] lub
rman> connect catalog [rman_user]/[pass]@[sid_rman_base]
rman> connect target [sys_user]/[pass]@[sid]
you get:
RMAN-06004: ORACLE error from recovery catalog database: RMAN-20001: target database not found in recovery catalog
rman> register database;
base tables of schema [rman_user]:
DB – inf about register databases
DF,DFATT – inf about database files
SCR,SCRL – scripts
ORL – inf about redologs
TS,TSATT – inf about tablespaces
TF,TFATT – inf about temp tablespaces
V$BACKUP_CORRUPTION #damaged blocks of backupset
V$COPY_CORRUPTION #damaged blocks of copy files
[rman_user].RC_STORED_SCRIPT
[rman_user].RC_STORED_SCRIPT_LINE
backupsets:
FULL BACKUP – full backup
all blocks, can not be used with incremental backup
in default is incremental backupset
levels can be 0,1,2,3,4
backupset on level 0 – all blocks like FULL BACKUP
backupset on level 1 – contain blocks which were changed from parent backup (base on SCN which is wrote inside each block, if child block SCN > parent block SCN than it is copied)
INCREMENTAL BACKUP SET – backupset of level n, which contain blocks which were modified from backupset of level n or n-1
INCREMENTAL CUMULATIVE – backupset of level n, which contain blocks which were modified from backupset of level n-1 or lower
options:
BACKUP INCREMENTAL LEVEL=0 DATABASE
BACKUP INCREMENTAL LEVEL=1 CUMULATIVE DATABASE
BACKUP (tablespace [ts_name1,ts_name2)
BACKUP ARCHIVELOG FROM TIME '[time]‘ | FROM LOG SEQ=[nr_seq]
BACKUP ARCHIVELOG UNTIL TIME ‘[time]‘ | UNTIL LOG SEQ=[nr_seq]
BACKUP ARCHIVELOG ALL DELETE INPUT #backup with remove
COPIES [nr] FORMAT ‘[1st_copy]‘,’[2nd_copy] ‘ #a number of copies (up to 4)
example scripts:
rman> create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> set limit channel [channel_name] kbytes=10000; –limit of backup piece
rman> backup
rman> filesperset 20 –a number of files in one backupset (default 4 datafiles and,16 archivelogs),
– ! one backupset include many files but one files could not be in many backupsets
rman> format ‘[dir_path/file_%s_%p_%t]‘ — %s-backupset nr, %p-backup piece nr, %t-4byte timestamp
(archivelog all);
rman> release channel [channel_name];
}
rman> create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> copy
rman> datafile ‘[file_path.dbf]‘ to ‘[file_path.bck]‘,
rman> datafile ‘[file_path.dbf]‘ to ‘[file_path.bck]‘,
rman> current controlfile to ‘[controlfile_path.bck]‘
rman> tag=’[tag_name]‘;
rman> release channel [channel_name];
}
create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> copy controlfile to ‘[path_control.bck]‘;
rman> release channel [channel_name];
}
create script [script_name] {
rman> allocate channel [channel_name] type disk;
rman> backup
rman> filesperset 3
rman> tag=’[tag_name]‘
rman> format ‘[dir_path/fileincrement_%s_%p_%d]‘
(database include current controlfile);
release channel [channel_name];
}
rman> create script [script_name] {
rman> allocate channel [channel1_name] type disk;
rman> allocate channel [channel2_name] type disk;
rman> set limit channel [channel1_name] kbytes 10000;
rman> set limit channel [channel2_name] kbytes 10000;
rman> backup full
rman> filesperset 3
rman> tag=’[tag_name]‘
rman> format ’[dir_path/fileincrement_%s_%p_%d]‘
(datafile 1,2,3 channel [channel1_name)
(datafile 4,5,6 channel [channel1_name);
rman> release channel [channel1_name];
rman> release channel [channel2_name];
}
rman> create script [scirpt_name]{
rman> allocate channel [channel_name1] type disk;
rman> allocate channel [channel_name2] type disk;
rman> backup
rman> format ‘/[backup_dir]/controlfile_t%t_s%s_p%p’
rman> (current controlfile);
rman> backup
rman> incremental level 0
rman> tag db_intr_0
rman> filesperset 5
rman> format ‘/[backup_dir]/datafile_t%t_s%s_p%p’
rman> (database);
rman> sql ‘alter system archive log current’;
rman> backup
rman> filesperset 20
rman> format ‘/[backup_dir]/archivelog_t%t_s%s_p%p’
rman> (archivelog all delete input);
rman> release channel [channel_name1];
rman> release channel [channel_name2];
}
recovery:
all db:
sql> STARTUP MOUNT;
rman> RESTORE DATABASE; #or
rman> RESTORE DATABASE UNTIL TIME “to_date(’2009/08/18 16:00′,’YYYY/MM/DD HH24:MI’)”; #or
rman> RESTORE DATABASE FROM TAG=”[tag_name]“; #check TAG from command “list backup”
rman> RECOVER DATABASE; #get alertlogs from backup
rman> ALTER DATABASE OPEN;
! MAKE FULL BACKUP
tablespace:
rman> SQL ‘ALTER TABLESPACE [ts_name] OFFLINE’;
rman> RESTORE TABLESPACE [ts_name];
rman> RECOVER TABLESPACE [ts_name];
rman> SQL ‘ALTER TABLESPACE [ts_name] ONLINE’;
datafile:
rman> SQL ‘ALTER DATABASE DATAFILE [file_nr] OFFLINE’;
rman> RESTORE DATAFILE [file_nr];
rman> RECOVER DATAFILE [file_nr];
rman> SQL ‘ALTER DATABASE DATAFILE [file_nr] ONLINE’;
backup without alertlog from disk:
rman> SHUTDOWN IMMEDIATE;
rman> STARTUP NOMOUNT;
rman> CONFIGURE DEFAULT DEVICE TYPE TO DISK;
rman> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ‘/[backup_datafile_path]/ora_df%t_s%s_s%p’ MAXPIECESIZE 4000M;
rman> CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
rman> CONFIGURE CONTROLFILE AUTOBACKUP ON;
rman> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO ‘/[backup_controlfile_path]/%F’;
rman> BACKUP DATABASE;
rman> ALTER DATABASE OPEN;
recovery cold backup without alertlog:
remove all datafiles etc.
rman> set DBID=[dbid]
rman> set controlfile autobackup format for device type disk to ‘[backup_controlfile_path]/%F’;
rman> restore controlfile from autobackup;
rman> alter database mount;
rman> recover database; (!get error RMAN-03002, RMAN-06054)
rman> recover database noredo;
rman> alter database open resetlogs;
odtwarzanie do momentu w czasie:
należy ustawić zmienną:
export NLS_LANG=american_america.AL32UTF8
export NLS_DATE_FORMAT=’yyyy-mm-dd hh24:mi:ss’
rman> run {
set until time “to_date(’2009-09-25:18:18′,’yyyy-mm-dd:hh24:mi’)”;
restore database;
recover database;
}
rman> alter database open resetlogs
! wszystko musi się znaleźć w jednym bloku run ponieważ inaczej będzie odtwarzał do stanu bieżącego a nie do punktu w czasie, z uwagi na fakt że set będzie się odnosił tylko do instrukcji RESTORE a już nie do RECOVER
! jezeli już raz odtwarzaliśmy do momentu w czasie i otworzyliśmy bazę z opcją RESETLOGS, to w przypadku gdy okazało się że nie trafiliśmy, a chcielibyśmy odtworzyć inny moment w czasie to dostaniemy komunikat:
RMAN-06004: ORACLE error from recovery catalog database: RMAN-20207: UNTIL TIME or RECOVERY WINDOW is before RESETLOGS time
należy wtedy wykonać zapytanie:
rman> list incarnation of database;
otrzymamy listę wszystkich tzw. inkarnacji, ponieważ w momencie odtwarzania do punktu w czasie i otwierania bazy w trybie RESETLOGS otrzymujemy komunikat:
database opened
new incarnation of database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
tak więc lecąc dalej wykonujemy (na niezamontowanej bazie):
rman> reset database to incarnation [nr inkarnacji];
rman> run {
set until time “to_date(’2009-09-26 23:32′,’yyyy-mm-dd hh24:mi’)”;
restore controlfile;
alter database mount;
restore database;
recover database;}
rman> alter dat
abase open resetlogs;
!Jeżeli chcemy podać inną lokalizację plików źródłowych:
rman> catalog start with ‘[backup_datafile_path]‘
błąd przy uruchamianiu bazy:
Tue Jun 17 02:15:54 2008
Shutting down archive processes
Tue Jun 17 02:15:59 2008
ARCH shutting down
ARC2: Archival stopped
wynika z faktu że uruchomiły się 3 procesy archiwizujące ARC0, ARC1, ARC2 a parametr bazy:
log_archive_max_processes=2
błąd przy instalacji bazy na linuxie z serwerem xorg:
potrzeba instalacji xorg-X11-deprecated-libs
błąd przy instalacji produktów oracle:
/usr/lib/libXtst.so.6: undefined reference to `__stack_chk_fail@GLIBC_2.4′
/usr/lib/libXtst.so.6: undefined reference to `__fprintf_chk@GLIBC_2.3.4′
/usr/lib/libXtst.so.6: undefined reference to `__sprintf_chk@GLIBC_2.3.4′
ściągnąć ze strony oracle (w linkach jest namiar) biblioteki
crate oracle directory by dba:
CREATE OR REPLACE DIRECTORY [oracle_dir] as ‘[path_to_directory_on_disk]‘;
remove oracle directory:
DROP DIRECTORY [oracle_dir];
check oracle directory:
SELECT directory_name, directory_path FROM dba_directories;
grant privileges to user:
GRANT READ, WRITE ON DIRECTORY [katalog oracle] TO [user];
expdp:
EXPDP [user]/[pass] SCHEMAS=[schema] LOGFILE=[logfile] DIRECTORY=[oracle dir] DUMPFILE=[dumpfile] PARALLEL=[parallel write to many files - use witch option %U as sufix in file name]
impdp:
IMPDP [user]/[pass] DUMPFILE=[plik dumpa] PARFILE=imp.par
[imp.par]
REMAP_SCHEMA=[old_user]:[new_user>]
REMAP_TABLESPACE=[old_ts]:[new_ts]
REMAP_TABLESPACE=[old_ts]:[new_ts]
DIRECTORY=[oracle directory]
LOGFILE=[logfile]
PARALLEL=[a number of processes]
STATUS=[time in sek]
JOB_NAME=[job name]
other:
DUMPFILE=dpump_dir1:plik1.dpump, dpump_dir2:plik2.dmp
FILESIZE=2G
chack current state of dump process:
SELECT job_name,state FROM v$datapump_job;
SELECT * FROM v$datapump_session;
estimate dump size:
EXPDP [user]/[pass] FULL=y ESTIMATE_ONLY=y DIRECTORY=[katalog] logfile=[logfile]
!warning
during estimation, dump size will be lower than original db size, because for indexes during dump only their definition is written, and finally indexes are rebuid, you must notice that index is based on ROWID which changing during dump
dump table:
IMPDP [user]/[pass] TABLES=[tabela] REMAP_SCHEMA=[src_schema]:[dst_schema] DIRECTORY=[directory] PARALLEL=[nr] DUMPFILE=[dumpfile]
dpump by NETWORK_LINK:
- on source db:
CREATE DATABASE LINK [link_name] CONNECT TO [src_user] IDENTIFIED BY [src_password] USING [src_tnsname]
- choose mode IMPDP or EXPDP (the difference is that IMPDP connect with source db, get data and write them directly to destination db, to specified schema, in the other side EXPDP write data only to file)
IMPDP [dst_user]/[dst_password] NETWORK_LINK = [link_name] DIRECTORY = [dir_name] SCHEMAS = [schema_name] LOGFILE = [logfile_name]
EXPDP [dst_user]/[dst_password] NETWORK_LINK = [link_name] DIRECTORY = [dir_name] SCHEMAS = [schema_name] LOGFILE = [logfile_name] DUMPFILE = [file_name]
connect to console:
EXPDP|IMPDP user/pass ATTACH=[nazwa_joba]
ctrl C #go to console mode from log mode
console commands:
exit_client #go from console mode to system
continue_client #go from console mode to log mode
help
add_file=plik1,plik2 #add files
kill_job #stop job end exit
pararell=[nr] #change numbers of process
start_job #start job which was stoped
status
stop_job[=IMMEDIATE] – stop job for a while
pamiętać należy że jeżeli dodajemy drugą instancję lub bazę musimy sprawdzić czy w pliku init.ora jest:
LOCAL_LISTENER=[nazwa listenera]
i albo go wywalić albo wpisać poprawnie ponieważ potem przy komendzie
LSNRCTL.EXE opcja STATUS będzie podawana konfiguracja nie z tego pliku listener.ora
lsnrctl start [listener_name]
w winshit wywołanie po raz pierwszy stworzy nowy service
konfiguracja listener.ora:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = [sid_pierwszej_bazy])
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = [IP])
(PORT = 1521)
)
)
)
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = [sid_drugiej_bazy])
(ORACLE_HOME = G:\oracle\product\10.2.0\db_1)
)
)
LISTENER1 =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = [IP])
(PORT = 1522)
)
)
LISTENER =
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=[ip1])(PORT=[port]))
(ADDRESS=(PROTOCOL=tcp)(HOST=[ip2)(PORT=[port2]))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=db1)
(ORACLE_HOME=d:\oracle\product\10.2.0\db_1)
)
(SID_DESC=
(SID_NAME=db2)
(ORACLE_HOME=d:\oracle\product\10.2.0\db_1)
)
)
tnsnames.ora:
alias=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)
(Host=host.domain)
(Port=1521)
)
(CONNECT_DATA=
(SID=dbsid)
)
)
ORA-01150 #check listener.ora
Linux Error: 110: Connection timed out dla lsnrctl status #compare /etc/hosts via listener.ora
col [column] format a[nr]
set heading off
set feedback offset linesize [nr] – value between 1- 32767
set termout offset pagesize [nr] – “0″ means no limit
set serveroutput on size unlimited – means no buffer limit for output dbms_output
config $oracle_home/sqlplus/glogin.sql
set linesize 1000
set pagesize 1000
set sqlprompt “_user _connect_identifier> “
- client10g:
sqlplus user/password@//hostname:port_nr/db_sid
- client9i:
sqlplus user/password@”(descripteion=(address_list=(address=(pototcol=tcp)(host=hostname)(port=port_nr)))(connect_data=(sid=db_sid)))”
sqlplus linux vs previous command:
install rlwrap
rlwrap sqlplus
Ostatnie komentarze