sap oracle backup
TRANSCRIPT
-
8/19/2019 SAP Oracle Backup
1/52
SAP Oracle Backup Type (Offline, Online Incremental, Partial) Backups
BR-BACKUP
BR Backup is used to take backup of the database (Datafiles). When ever a backup is triggered BR
Backup is initialized.
There are various types of backups
1. ffline Backup
!. nline Backup
". #ncre$ental Backup
%. &artial Backup
! Offline Backup (C"l# Backup)
The database is do'n during backup and no transaction is allo'ed as it is do'n.
#t is consistent and reliable.
$%"le Offline Backup The backup taken fully and a catalog is opened to start the incre$ental
backup.
g * database is of !+++ ,B Which is not possible to take a daily full offline backup 'ith a backup
speed of 1-+,B /our.
&ull Offline Backup #t is a co$plete database backup 'ithout any 0atalog.
0atalog (23D*4 5 The rest 'ill be taken)
'! Online Backup
The DB is up and running 'ith out effecting the user transactions. #t is consistent and reliable 'ith
redo logs that are generating during backup.
$%"le Online Backup The backup is taken fully and a catalog is opened to start the online
incre$ental backup.
&ull Online Backup #t is co$plete database backup 'ith out any catalogs.
Online Backup #t is consistent al'ays 'ith redo logs.
! Incremental Backup
#t is initiated fro$ level+ backup and used 'hen the database size is too big. #t
can be online or offline.
*! Partial Backup
#t is taken for a specific table during a patch (specially /R &atches)
Backup type is defined by a para$eter
Backup6$ode 7 all
Backup6type 7 offline
Backup6dev6type 7 Tape or Disk
Backup6root6dir 7 /8oracle8#D8sapbackup
*ll the above backups are perfor$ed by using brbackup.BR ARC+I (init#D.sap)
#t is used to backup the offline redolog file to tape or disk i.e. fro$ R**R0/ directory to tape or
disk.
*rchive6function 7 *9 0&4 D:T
*rchive6copy6dir 7 /8racle83WD
-
8/19/2019 SAP Oracle Backup
2/52
Tape6size7 1++,
9olu$e6archive73WD*+1...... 3WD*"+...
Reads content from Log Buffer. Log writer writes to OrigLogA and OrigLog B, Mirror Log A, Mirror
Log B. When OrigLog A is full it is moved to OrigLog B When OraArch is full it is backed up to a tape
or disk.
5 *rchive function $eans the saving $echanis$ of log files.
5 :og 'riter logs into riglog*; riglogB; t 'ant the corruption of
logs.
The data transfer fro$ Oraarc% t" #isk is done by BRArc%i.e.
/0-Sep-/1
BRTOO2S
#t uses BR0onnect; BRBackup; BRRestore; BRRecover 'ith various options.
We can do the follo'ing 'ith BRTools.
-
8/19/2019 SAP Oracle Backup
3/52
5 tart and stop the database
5 Database backup
5 Redolog Backup
5 Restore Database 5 fro$ database backup
5 Recover Database fro$ Redolog Backup
5 ?tend the tablespace by adding datafile or resizing datafile.
-
8/19/2019 SAP Oracle Backup
4/52
Open ;init5C!sap< =it% n"tepa#
-
8/19/2019 SAP Oracle Backup
5/52
-
8/19/2019 SAP Oracle Backup
6/52
-
8/19/2019 SAP Oracle Backup
7/52
-
8/19/2019 SAP Oracle Backup
8/52
ave Einit.C#D.sapF Gile. *nd close it
3o' open c$d
Type 0o$$and
BRT:
3ote5 To use BRT: you should login 'ith C#Dad$ os user.
-
8/19/2019 SAP Oracle Backup
9/52
-
8/19/2019 SAP Oracle Backup
10/52
elect 1 for backup and you 'ill see the follo'ing screen
-
8/19/2019 SAP Oracle Backup
11/52
dit the 9alues of above screen
elect ! for editing the Backup Device type
&ress EcF to continue
Press “c” to continue
-
8/19/2019 SAP Oracle Backup
12/52
nter
-
8/19/2019 SAP Oracle Backup
13/52
-
8/19/2019 SAP Oracle Backup
14/52
3o' Backup is co$plicated 'ith return code +
-
8/19/2019 SAP Oracle Backup
15/52
H!I 3o' Take the backup of controlfile
0ontrol file is generated in directory copy and paste in backup directory
0opy and paste in
-
8/19/2019 SAP Oracle Backup
16/52
3o' Backup is co$pleted We can Restore the syste$ 'ith this backup .
racle Database Backup using Brtools on a Disk/i *ll;
This blog contains steps 'ith screenshot 'hich sho's you the steps to take racle DB backup on Disk.
&lease stop your *& application server before you proceed 'ith your DB backup activities and take a
backup of init#D.sap file before you $odify it $anually.
tep1
-
8/19/2019 SAP Oracle Backup
17/52
tep! tart Brtools utility fro$ the co$$and pro$pt by logging in as #Dad$ on 'indo's and ora#D in
:inu?.
nter J%J (&ress nter Key)
nter J1J (&ress nter Key)
http://4.bp.blogspot.com/-CyOLEqb2cXo/T_HxnOLEhdI/AAAAAAAAAXk/t8RQsdJu3TM/s1600/30-06-2012+15-44-45.jpghttp://4.bp.blogspot.com/-CyOLEqb2cXo/T_HxnOLEhdI/AAAAAAAAAXk/t8RQsdJu3TM/s1600/30-06-2012+15-44-45.jpg
-
8/19/2019 SAP Oracle Backup
18/52
nter JcJ (&ress nter Key)
nter JcJ (&ress nter Key)
nter JcJ (&ress nter Key)
-
8/19/2019 SAP Oracle Backup
19/52
#t 'ill sho' you the su$$ary of all the files 'hich it 'ill copy during this backup activity; &ress JcJ and
continue.
4ou can see the progress of your backup as sho'n in the screen above.
Ginally once your backup is over; you can see the return code + on the screen 'hich sho's that your
backup 'as successfull.
-
8/19/2019 SAP Oracle Backup
20/52
& su - oraSID > sqlplus /nolog > conn sys as sysdba
Enter password: (Press enter)
Connected
s'l&brtools
(((((((((((((((((((((((((((((((((((((((((((((((((((
Ste)s a!e $o%%on on$e b!tools sta!ts:
Step!:((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
BR*Tools %ain %enu
+ Instan$e %anage%ent
- ( S)a$e %anage%ent
( Seg%ent %anage%ent
/ ( Ba$0u) and database $o)y
1 ( Resto!e and !e$o2e!y
3 ( 4he$0 and 2e!ifi$ation
5 ( Database statisti$s
6 ( Additional fun$tions
7 ( 8#it )!og!a%
Standa!d 0eys: $ ( $ont, b ( ba$0, s ( sto), ! ( !ef!, h ( hel)
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
BR933-I 8nte! you! $hoi$e:
" ((((((((((((((((& 8nte! -
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
Database s)a$e %anage%ent
+ 8#tend tables)a$e
- ( 4!eate tables)a$e
( D!o) tables)a$e
/ ( Alte! tables)a$e
1 ( Alte! data file3 ( Mo2e data file
5 ( Additional s)a$e fun$tions
6 ( Reset )!og!a% status
Standa!d 0eys: $ ( $ont, b ( ba$0, s ( sto), ! ( !ef!, h ( hel)
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
BR933-I 8nte! you! $hoi$e:
! (((((((((((((& 8nte! +
And then ente! c two ti%es.
Step":(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
Tables)a$e e#tension %ain %enu
+ 8#tend tables)a$e
- ( Show tables)a$es
( Show data files
/ ( Show dis0 2olu%es
1 * 8#it )!og!a%
-
8/19/2019 SAP Oracle Backup
21/52
3 ( Reset )!og!a% status
Standa!d 0eys: $ ( $ont, b ( ba$0, s ( sto), ! ( !ef!, h ( hel)
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
BR933-I 8nte! you! $hoi$e:
! (((((((((((((((& Sele$t
Afte! this all the table s)a$e will be dis)layed
Sele$t the tables)a$e fo! whi$h you want to add a new datafile.
#or e$ample we are try%ng to add data&%le to tablespace 'PSPS*'
As an e#a%)le we ha2e sele$ted
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
)tions fo! e#tension of tables)a$e PSAPSR ;+. file<
+ * "ast added file na%e ;lastfile< ....... ==D!i2e>:?RA4"8?SID?SAPDATA-?SR@/?SR.D
ATA/>
- * "ast added file sie in MB ;lastsie< . =-999>
( ew file to be added ;file< ........... ==D!i2e>:?o!a$le?SID?sa)data-?s!@1?s!.data1>
/ C Raw dis0 lin0 ta!get ;!awlin0< ...... =>
1 ( Sie of the new file in MB ;sie< ..... =-999>
3 ( ile autoe#tend %ode ;autoe#tend< ..... =yes>
5 ( Ma#i%u% file sie in MB ;%a#sie< ..... =+9999>
6 ( ile in$!e%ent sie in MB ;in$!sie< .. =-9>
7 ( SE" $o%%and ;$o%%and< ................. =alte! tables)a$e PSAPSR add dataf
ile FD:?o!a$le?SID?sa)data-?s!@1?s!.data1F sie -999M autoe#tend on ne#t -9M %
a#sie +9999M>
Standa!d 0eys: $ ( $ont, b ( ba$0, s ( sto), ! ( !ef!, h ( hel)
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
BR933-I 8nte! you! $hoi$e:c (((((((((((((((& 8nte! $ to $ontinue and $!eate datafiles.
((((Afte! that ente! n ((((((((((((((((((((
BR9351I Do you want to )e!fo!% this a$tionG
BR9353I Enter +y,es+ to per&orm t.e act%on +n,o/c,ont+ to s0%p %t +s,top+
to abo!t:
n ((((((((((((((& 8nte! n to sto) $!eating anothe! datafile.
It w%ll add a new data&%le to %t
1urray 22222222 3ou .a4e added a new data&%le
ote: Please !efe! to the SAP!a$le note fo! e#a$t )!o$edu!e fo! adding datafile, the blogge! is not !es)onsible fo! any issue a!ising by using
the abo2e blog.
/o' to change racle database para$eter using BRT:/i *ll;
4ou can use BRT: to change racle DB para$eter.
-
8/19/2019 SAP Oracle Backup
22/52
rspace -u + -f dparam
0hanging *&R" pass'ord using BRT:/i *ll;
There are ti$es 'hen it beco$es co$pulsory to change the pass'ord of *& che$a 2ser. The older
techni=ue involves s=l =uery 'hich is not allo'ed in *& enviro$ent.
The best practice to change *&R" or *& pass'ord is through BRT: utility.
tep1 :ogin to erver as R*#D user.
tep! brconnect 5u 5f chpass 5o 5p
? brconnect 5u 5f chpass 5o *&R" 5p ne'6pass'ord
#n the above e?a$ple;
5u 55 option $eans that authorization 'ill be done fro$ level user
*&R" 55 Represents che$a user in 3or$al R" syste$
5p 55 3e' &ass'ord
How to Generate Doveloper Access KeyDeveloper *ccess Key
#f a developer 'ant to develop any obAect in *& na$espace then syste$ ask for developer access key.
That $ean if a *B*& developer 'ant to change standard *& obAect then he need a access key. ee
ho' to generate access key.
#f a developer 'ant to edit this obAect
-
8/19/2019 SAP Oracle Backup
23/52
,enerating *ccess Key
,o to
-
8/19/2019 SAP Oracle Backup
24/52
-
8/19/2019 SAP Oracle Backup
25/52
Register obAect
3o' select the Basis Release as per 1st screenshot
fill up the entries Release !+;
&rogra$ #D 5 R"TR
Type 5 0:*
bAect na$e 5 0:63D6RL2T6B0
-
8/19/2019 SAP Oracle Backup
26/52
elect the installation no as per the first screen shot then click on Register *ccess key 'ill be generated.
-
8/19/2019 SAP Oracle Backup
27/52
*fter the successful registration of the obAect the the access key 'ill be generated.
This is the desired *ccess key..)
Netweaver Tools T""ls use# in >et=ea.er ?!/
#n 3et'eaver M.+ 'e co$$ony use follo'ing tools.
1. Te$plete 0onfig Tool!. 0onfig Tool (ffline Tool)
". 9isual *d$in Tool (nline Tool)
%. #ntegrated :og 9ie'er
C"ns"le 3ase# t""l
-. Telnet Tool (0onsole base tool)
. Nc$on
-
8/19/2019 SAP Oracle Backup
28/52
S"ft=are 5epl"yment T""l
M. D< (oft'are Deploy$ent
-
8/19/2019 SAP Oracle Backup
29/52
#SPM$ #ava Support Packae Manaer SP@ a.a Supp"rt Packa4e @ana4er
N&< is a 'idely used tool to apply support packages in Nava stack or Dual stack *& syste$. 3o' adays 'e use 2< (oft'are 2pgrade "! Use# By
-
8/19/2019 SAP Oracle Backup
30/52
"!++ Dispatcher &ort
""++ ,ate'ay &ort
"++
-
8/19/2019 SAP Oracle Backup
31/52
2+1 2ser
-
8/19/2019 SAP Oracle Backup
32/52
T+! *& etupsTune Buffers
T+% DB activities (L: erver &erfor$ance *nalysis)
T+- Displays &erfor$ance trace
T+ or T+3 perating yste$
-
8/19/2019 SAP Oracle Backup
33/52
00: :ocal 0lient 0opy
Background Jobs Administration
-
8/19/2019 SAP Oracle Backup
34/52
Database SID must be started first
Log on to remote server and start database
Our DB was up and running and listener was also up.
Even R3trans -d and R3trans - were su!!essful.
sidadm> R3trans -d
"#is is R3trans version $.%& 'release (%) - %$.*+.)3 - %*,)3,*( .
uni!ode enabled version
R3trans finis#ed '****.
---------------------------------
sidadm> R3trans -
"#is is R3trans version $.%& 'release (%) - %$.*+.)3 - %*,)3,*( .
uni!ode enabled version
R3trans finis#ed '****.
Solution:
0heck for para$eter na$ed J*&DB/TJ in DG*2:T.&G:.
ntry should be as
*&DB/T 7
*lso;
0heck DG*2:T.&G: if the file na$e is JDG*2:TJ only then na$e it to DG*2:T.&G:.
There 'ill be an additional para$eter in Nava server i.e.
A!eedbhost7
-
8/19/2019 SAP Oracle Backup
35/52
tep ! :ogin to the server using db!
tep " Take ffline backup for database and also level backup(Reco$$ended).
tep % top database.
db!stop force
tep - pen co$$and pro$pt and $ove to the kernel location. ,enerate script file using belo'
co$$and;
brdbbrt 5s 5b$ RTR#96R:0*T
eg brdbbrt 5s T1 5b$ RTR#96R:0*T
tep
-
8/19/2019 SAP Oracle Backup
36/52
-
8/19/2019 SAP Oracle Backup
37/52
3ote &lease try this your o'n risk. This blog is only intended for sharing kno'lodge only. 3ot to be used in production landscape.
RR*#L3 5 Report for i$proving inde? Luality in racle DB/i *ll;
#n this post; # 'ill sho' users to use *& report RR*#L3 to i$prove the inde? =uality of table in
racle DB. /ere 'e are taking an e?a$ple of
-
8/19/2019 SAP Oracle Backup
38/52
Step' C%eckin4 uality
nce step 1 is done; it 'ill bring you to the $ain screen as sho'n above.
3o' nter the detail as sho'n belo' to check the inde? =uality of the
-
8/19/2019 SAP Oracle Backup
39/52
nce; you rebuild the inde?; you can check to it using tep1 and tep!.
etting up peration $odes/i *ll;
This blog 'ill sho' J/o' to setup peration
-
8/19/2019 SAP Oracle Backup
40/52
tep% Repeat step nu$ber ! U " for creating $ore operation $ode.
tep- teps for 0reating #nstance and distributing 'ork process.
• 0lick on pertaion
-
8/19/2019 SAP Oracle Backup
41/52
• #nstance &rofile
• *nd *9 it.
tep
-
8/19/2019 SAP Oracle Backup
42/52
• elect the ti$e range by double clicking on the duration and 0lick on J*ssignJ.
• *nd elect peration $odes and 0lick on J*9J button.
3o' you have setup the operation $ode.
3ote This blog is only for your reference; please refer to *& note or *& docu$ent for e?act
Rene'ing *& Router :icenseHi All,
Here are the Steps of renewing the SAP Router License.
Step1: Login as sncadm user. Take a ackup of folder where SAP Router is installed.
!": #:$usr$sap$saprouter to #:$usr$sap$saprouter%&ackup.
Step': !"ecute the &elow command
-
8/19/2019 SAP Oracle Backup
43/52
sapgenpse get%pse () (r certre*1 (p local.pse
+t will ask for P+, so enter an- digit num&er and remem&er this, as -ou ma- need it in at
other places during renewal. !as- to remem&er code is 1'/.
Also enter the distinguish name.0ou can find the distinguish name athttps:22we&smp'3/.sap(
ag.de2saprouter(sncadd 4
ow cop- the content of 5certre*5 .0!ither to the clip&oard or to the notepad4
Step/: At Ser)ice 6arket Place logon to https:22we&smp'3/.sap(ag.de2saprouter(sncadd (((((7
SAPRouter 8ertificates (((((7 Appl- ow.
9n the ne"t page 8lick on 8ontinue
After that Paste the 8ontect into the !dit o"0Paste the content from (((((!;+ 8!RT+!ST((((( to (((((!# 8!RT+!ST((((( 4.
ow 8lick on Re*uest 8ertificate.
8op- the entire content of the 8ertificate from egining to !nd to a te"t file named 5srcert.t"t5
and cop- this file to the same location where it was present. Rename it to srcert.
!" D"#usr#sap#saprouter
Step: +nstall the certificate in our saprouter &- running
:$usr$sap$saprouter7sapgenpse.e"e import%own%cert (c srcert (p local.pse
Now we have to create the credentials for the SAProuter with command
:\usr\sap\saprouter>sapgenpse seclogin -p local.pse -O
This will create a file called credv! in the same director".
Step#: $hec% if the certificate has &een imported correctl"
:\usr\sap\saprouter>Sapgenpse getm"name -v -n 'ssuer
'itching ffn *rchive :og in racle Database/i *ll;
-
8/19/2019 SAP Oracle Backup
44/52
:ogin to the syste$ as root; then follo' these steps
55555555555555555555555'itching *rchive log ff5555555555555555555555555555
su 5 #Dad$
s=lplus nolog
conn sys as sysdba
nter pass'ord (&ress nter)
startup $ountV (&ress nter)
alter database noarchivelogV (&ress nter)
alter database openV
3o' tart the *& #nstance only.
55555555555555555555555'itching *rchive log n5555555555555555555555555555
su 5 #Dad$
s=lplus nolog
conn sys as sysdba
nter pass'ord (&ress nter)startup $ountV (&ress nter)
alter database archivelogV (&ress nter)
alter database openV
&roceed 'ith starting *& instance.
3ote &lease refer to *&racle note for e?act steps.
ISSUS
*&
-
8/19/2019 SAP Oracle Backup
45/52
*& DBTech NDB0 H!-OI insufficient privilegeHi All,
Error while export catalogue obect !ails with SAP "#$ech %"#C: &'()*: insu+cient priilege
error in SAP HA-A "#.
Exact error log is:
//////////////////////////////////////////////////////////////////////////////////
.
SAP "#$ech %"#C: &'()*: insu+cient priilege: Can0t export iew SAPS1".2#3:#1A:S1":2S"4C25.
user has no priilege on the un6erlying obects
///////////////////////////////////////////////////////////////////////////////////
Solution:
7ogin to SAP HA-A Stu6io as the S8S$E9 user
1n the security area grant the user that is haing the issue the syste priilege E;P
-
8/19/2019 SAP Oracle Backup
46/52
:ogin as ad$
To start;
sidad$sap"sc"l -l
To stop;
sidad$sap"sc"l -k
To check status;
sidad$sap"sc"l -s
But so$e ti$e 'e have error $essages like J0annot create hared
-
8/19/2019 SAP Oracle Backup
47/52
#n $y e?a$ple; # tried to clear $e$ory 'ith #Dad$ user 'hich is not the o'ner of the $e$ory assigned.
o; clear this $e$ory 'ith root user.
nce it is cleared; you can try starting saposcol 'ith the sa$e co$$and 'hich is sho'n above.
?a$ple is
-
8/19/2019 SAP Oracle Backup
48/52
*nd once; it is started you can check the status 'ith belo' co$$and
saposcol 5s.
0 package *&K#T:M+- does not $atch the current
soft'are co$ponent vector /i *ll;
*fter installation of *& olution
-
8/19/2019 SAP Oracle Backup
49/52
,oogled this and found $any confusing solutions. *lso; for your infor$ation; our servers 'ere on *# and
# a$ sure the solution 'ill 'ork on all linu? flavors.
S"luti"n
Gollo' *& note nu$ber; 3ote %%1M! 5 &,60*&3T*B> i$port package is started.
TR*0 !+1!51!5+- 1-11 co$.sap.inst.$ig$on.:oadTask process&ackage
Task file generation for >*&3T*B> i$port package
usrsap&B/4e?euchpia%R"load 5ctf #
soft'are-1+%!"%OD*T*623#T&"D*T**&3T*B.TR
t$psapinst6instdir3WM"1/DB#3T*::3WM"1/DBTD*B*&DD:/DB.T&: *&3T*B.TK /DB
5l *&3T*B.log
https://service.sap.com/sap/support/notes/446172https://service.sap.com/sap/support/notes/446172https://service.sap.com/sap/support/notes/446172https://service.sap.com/sap/support/notes/446172https://service.sap.com/sap/support/notes/446172
-
8/19/2019 SAP Oracle Backup
50/52
RRR !+1!51!5+- 1-11 co$.sap.inst.$ig$on.:oadTask run
:oading of >*&3T*B> i$port package is interrupted 'ith R"load error.
&rocess >usrsap&B/4e?euchpia%R"load 5ctf #
soft'are-1+%!"%OD*T*623#T&"D*T**&3T*B.TR
t$psapinst6instdir3WM"1/DB#3T*::3WM"1/DBTD*B*&DD:/DB.T&: *&3T*B.TK /DB
5l *&3T*B.log> e?ited 'ith return code !.
Gor $ode details see >*&3T*B.log> file.
oln # Gound a solution in *& note nu$ber 1M+!1MM 'hich 'as relevant to 2< 1.+; but to take in
chance # took a backup of file *&3T*B.TR and tried 'ith the one 'hich is attached to this note and it
'orked.
rror in &hase &R&6#3&2TT:9R#36#3# of 2< Tool
During /&- 2pgraderror in &R&6#3&2TT:9R#36#3# phase 'hile /&- 2pgrade 'hile using 2< Tool.
rror :og
02T#3, usrsap#D2
-
8/19/2019 SAP Oracle Backup
51/52
% TL"PP yste$5nr 7 >++>; ,'ervice 7 >sapg'++> 0lient 7 >+++>
% TL"PP nviron$ent variables
% TL"PP dbs6ada6sche$a7*&#D
% TL"PP auth6shado'6upgrade7+
1 TL!++ ?ecuting actual phase >&R&6#3#T9*:0/K6#3#>.
1 TL"PP &hase argu$ents
! TL"PP *rgH+I 7 >/*RD50/K>
1 TL"-P RG0 :ogin to yste$7J#DJ; *s/ost7Jhostna$eJ 3r7J++J; ,'/ost7Jhostna$e
J; ,'ervice7Jsapg'++J
! TL!"! RG0 :ogin succeeded
% TL+1+ Date U Ti$e !+1!1++O!1%M!M
1 TL!"" 0alling function $odule J2BT6/*3D:629RJ by RG0
! TL"M" para$eter J#96
-
8/19/2019 SAP Oracle Backup
52/52
*nd then; once this co$$and is e?ecuted successfully; delete 2< directory and e?tract fresh 2< files
in the sa$e location and continue.
////////////////////////////////////////////////////////////////
E-"//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////