o
    :F¶dìV  ã                   @   sÈ  d dl Z d dlZd dlmZmZ d dlZd dlmZmZ d dl	Z	d dl
Z
d dlZd dlmZ d dlmZ d dlZd dlZd dlmZ d dlZzd dlZW n ey^   e d¡ edƒ Y nw e
j d	d
d¡ZdZejddeddddejdedddejdeeƒdddejddddejddddejddddejddd dejd!dd"dejd#dd$dejd%dd&dejd'dd(dejd)dd*d+d,ej d-d.„ ƒƒƒƒƒƒƒƒƒƒƒƒƒZ!e"d/krâe!ƒ  dS dS )0é    N)Úcli_utilÚcli_root)ÚPopenÚPIPE)Úrequests)ÚHTTPBasicAuth)ÚSentinelaž  cx_Oracle module could not be imported. This most likely means you have installed OCI CLI without optional feature 'db'. To use this script, please re-install CLI with 'db' optional feature.
Below are the relevant commands to do it:
In *NIX systems:
    curl -L -O https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh
    ./install.sh --optional-features db
In Windows systems using powershell:
    ((New-Object System.Net.WebClient).DownloadFile('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1', $pwd\install.ps1))
    .\install.ps1 -OptionalFeatures db
If just using pip:
    pip install 'oci-cli[db]'é   ú~z.ociÚconfigÚDEFAULTzcreate-from-onpremz.Create a backup of on-premise database on OCI T)Zallow_interspersed_argsZignore_unknown_options)ÚnameÚhelpZcontext_settingsz--config-filezThe path to the config file.)ÚdefaultZshow_defaultr   z	--profileFzÇThe profile in the config file to load. This profile will also be used to locate any default parameter values which have been specified in the OCI CLI-specific configuration file.  [default: DEFAULT]z--compartment-idzCompartment_id to store backup)Úrequiredr   z--display-namezEThe user-friendly name for the backup. It does not have to be unique.z--availability-domainz7The Availability Domain where the DB System is located.z	--editionz;Database edition on to which the backup will be restored toz--opc-installer-dirz+Directory containing opc_installer.jar filez--additional-opc-argsz/Optional additional arguments for opc installerz	--tmp-dirz&Optional Directory for temporary filesz--rman-passwordz5RMAN password to use (required) if TDE is not enabledz--rman-channelsÚ5zRMAN Channels (default: 5))r   r   r   c           A      K   sh  t jdkr	tdƒ |ttƒkrt}|i |d d d d dd dd ii d dœ}|| _t | ||¡ t 	| dt
j¡ |d }|d }t|d	 ƒ}d
|v rJ|d
 }d|v rR|d }	t j t ¡ d¡}
d|v rk|d rkt j |d ¡}
t j |d¡}t j |¡s†t  |t j¡r†t d| ¡ t  |
d¡ t j |
¡s™t |
d ¡ t  |
¡r¥t |
d ¡ dt jvs¯dt jvr´t d¡ t j t jd dd¡}t j |¡rÌt  |t j¡sÑt d¡ t
 d¡ tjdtjd}| ¡ }|  d¡ |D ]}|d }qéd|v r|  d¡ |D ]}|d }qüt
 d | ¡ d }|  d!¡ |D ]}|d }q|d u r%t d"¡ t
 d#¡ |  d$¡ |D ]}|d d%kr?t d&¡ q1t
 d'¡ |  d(¡ |D ]}|d d)kr[t d*¡ qM|  d+¡ |D ]}|d d,krrt d-¡ qdd }d }d }t
 d.¡ |  d/¡ |D ]}|d }|d, }|d0 }t
 d1|||f ¡ q†d }t
 d2¡ |  d3¡ |D ]}|d }t
 d4| ¡ q®d }t
 d5¡ |  d6¡ |D ]}|d }t
 d7| ¡ qËd8}t
 d9¡ |  d:¡ |D ]}|d }t
 d;| ¡ qèd }d }d}d }|  d<¡ |D ]}|d d=krd>}q|s|st d?¡ nß|r't d@¡ |  dA¡ |D ]8}|d dBks>|d0 d)krCt dC¡ |d, d urRt j !|d, ¡}|d, d u s`t j |¡set dD¡ q.| "dE¡}t|d ƒdFkrþ|  dG¡ |D ]}|d dHkr•|d dIkr•t dJ|d  ¡ q||  dK¡ |D ]}|d }qž|dLkrþg }|  dM¡ |D ]
}| #|d ¡ q´|D ]<}|  dN| dO ¡ |  dP¡ |D ](}|d dBksñ|d, d)ksñ|d0 dHkrú|d0 dIkrút dQ| dR ¡ qÓqÁd}d} |  dS¡ |D ]
}t$ %|d ¡}q	|  dT¡ |D ]
}t$ %|d ¡} q|dks0| dkr5t dU¡ |  dV¡ t&t j |
dW¡dXƒ'}!|D ]}|! '|d, rZ|d dY |d,  ndZ¡ |! 'd[¡ qGW d   ƒ n	1 sow   Y  | (¡  | (¡  t)|d\dgt*t*t*d]}"|" +d^¡\}#}$|$sš|#rš|"j,dkrŸt d_¡ |# -¡ }#|#d` dakr¯t db¡ t .dcdc| ¡}%i }&||&dd< |rÃ||&de< |rÊ||&df< dg|v rÚ|dg rÚ|dg |&dh< |rá||&di< dj|v rñ|dj rñ|dj |&dk< |rø||&dl< |rÿ||&dm< |d8krdnndo|&dp< ||&dq< ||&dr< |ds |&dt< t
 du¡ d }'z÷i }|%j/dÈdv|&i|¤Ž}(|(j0j1}'t
 dw|' ¡ 	 i }|%j2dÈdx|'i|¤Ž}(|'|(j0j1krQt dy¡ |(j0j3rbt4 5dz¡ t
 du¡ q8|(j0j6})|(j0j7}*|(j0j8}+|(j0j9},|(j0j:}-|)d u s|*d u s|+d u s|,d u s|-d u r”t d{¡ 	 t
 d|¡ t4 5d}¡ |rt j |
d~¡}.|)d |* d }/t
 d€¡ t; &|.d¡}0|0j<|t j =|¡d‚ W d   ƒ n	1 sÓw   Y  t
 dƒ¡ t&|.d„ƒ }1t>j?|/t@|,|-ƒd…tAt j B|.¡ƒi|1d†}2|2 C¡  W d   ƒ n	1 sw   Y  nd }/t
 d‡¡ t&t j |
dW¡d„ƒ-}!t>j?|)d |* d dW t@|,|-ƒd…tAt j Bt j |
dW¡¡ƒi|!d†}2|2 C¡  W d   ƒ n	1 sNw   Y  dˆ| d‰ |) dŠ |, d‹ |- dŒ |
 d |
 dŽ t j |
dt jd  d ¡ d‘ |* }3|	rˆ|3d’ |	 }3t
 d“¡ dˆ| d‰ |) dŠ |, d” d• d– |
 d |
 dŽ t j |
dt jd  d ¡ d‘ |* }4t
 d—|4 ¡ t)|3d>t*t*t*d˜}"|" +¡ \}#}$|$sØ|"j,dkrçt d™|3 ¡ tD|#ƒ tD|$ƒ t jdkrïdšnd›}5t j Et j |
dt jd  d ¡¡rt j Et j |
dœ¡¡rt j Et j |
|5¡¡s!t d¡ t&t j |
dž¡dXƒ}6|6 'dŸ¡ |s=|6 'd | d¡ ¡ n|6 'd¢¡ |6 'd£¡ tF|ƒD ]+}7|6 'd¤tA|7ƒ d¥ d¦ |
 t jjG |5 d§ d¨ |
 t jjG d t jd  d© ¡ qK|6 'dª|+ d« d¬ |+ d­ d® |+ d¯ d° ¡ |6 (¡  t
 d±¡ t)|d\dd²t j |
d³¡d´t j |
dž¡ gt*t*t*d]}"|" +¡ \}#}$|$sÃ|#rÃ|"j,dkrÐt dµ¡ tD|#ƒ tD|$ƒ t&t j |
d³¡d„ƒ-}8t>j?|)d |* d d³ t@|,|-ƒd…tAt j Bt j |
d³¡¡ƒi|8d†}2|2 C¡  W d   ƒ n	1 sw   Y  d }9d }:t&t j |
t jG d³ ¡ƒˆ};|; H¡ }<d¶d·„ |<D ƒ}<d}=|=tI|<ƒk r¢|<|= d¸k}>|>rf|>rDd nd}9|=d¹ }=|=tI|<ƒk rftJ Kdº|<|= ¡}?|?rf|>rd|? Ld,¡nd}9|<|= d»k}@|@r—|@rtd nd}:|=d¹ }=|=tI|<ƒk r–tJ Kdº|<|= ¡}?|?r–|@r”|? Ld,¡nd}:n|=d, }=|=tI|<ƒk s6W d   ƒ n	1 s­w   Y  |9d u s¼|:d u rÁt d¼¡ t
 d½¡ i }&|:|&d¾< ||&d¿< | |&dÀ< |9|&dÁ< g |&dÂ< |/|&dÃ< |%jMdÈ|'|&dÄœ|¤Ž}(t
 dÅ|(jN ¡ t
 dÆ¡ d }'W |'d urt
 dÇ¡ i }|%jOdÈdx|'i|¤Ž tP Q|
¡ d S |'d ur.t
 dÇ¡ i }|%jOdÈdx|'i|¤Ž tP Q|
¡ w )ÉNÚntz:This script is not supported on Windows operating systems.FÚproxy)Úconfig_fileZdefault_values_from_fileÚprofileZcert_bundleZendpointZ
request_idZno_retryÚdebugr   ÚsettingsZparameter_aliasesÚregionr   Úavailability_domainZopc_installer_dirZrman_channelsZrman_passwordZadditional_opc_argsZonprem_uploadZtmp_dirzopc_install.jarzCould not access iÀ  z is not a directoryz is not emptyZORACLE_HOMEZ
ORACLE_SIDz(ORACLE_HOME and ORACLE_SID should be setÚbinÚrmanz0Could not find a usable rman in this environmentzConnecting to Oracle databaseú/)Úmodezselect version from v$instancer   z18.z#select version_full from v$instancezOracle version is:%sz?select value from v$parameter where name ='db_create_file_dest'z'OMF is required for the script to work.z-Checking the archive log mode of the databasezselect log_mode from v$databaseZ
ARCHIVELOGz%Database should be in archivelog modez Checking if the database is openzselect status from v$instanceZOPENzDatabase is not openzLselect count(*) from v$parameter where name = 'spfile' and value is not nullr	   z6script requires the instance to be started with spfilez.Getting database name and database unique namez1select dbid, name, db_unique_name from v$databaseé   z$Database Id:%d Name:%s UniqueName:%szFetching character setz;select value$ from sys.props$ where name='NLS_CHARACTERSET'zCharacter Set:%szFetching national character setzAselect value$ from sys.props$ where name='NLS_NCHAR_CHARACTERSET'zNational Character Set:%sZFALSEzFetching rac modez;select value from v$parameter where name='cluster_database'zRac mode:%sz%select BITAND(flags, 8) from x$kcbdbké   Tz<TDE is not active in the instance. RMAN password is requiredzDTDE is active in the instance. RMAN password should not be specifiedz^select upper(wrl_type), wrl_parameter, upper(status) from v$encryption_wallet where rownum < 2ZFILEzFThis operation requires the wallet to be in file and for it to be openzsCould not query the wallet file.
Please ensure that any environment variables referenced in sqlnet.ora file are setÚ.é   z2select upper(wallet_type) from v$encryption_walletZ	AUTOLOGINÚUNKNOWNzUnsupported wallet type:zselect cdb from v$databaseZYESzQselect name from v$containers where name <> 'CDB$ROOT' and open_mode like 'READ%'zalter session set container = "ú"zaselect upper(wrl_type), upper(status), upper(wallet_type), wrl_parameter from v$encryption_walletzPDB:z cannot be backed upzyselect sum(bytes)/1024/1024 from ( select sum(bytes) bytes from v$datafile union select sum(bytes) bytes from v$tempfile)zÒselect sum(bytes)/1024/1024 from (select sum(bytes*members) bytes from v$log where group# in (select group# from v$logfile where type='ONLINE') union select (BLOCK_SIZE*FILE_SIZE_BLKS) bytes from v$controlfile)z.Failed to determine data size and/or redo sizez=select name, value from v$parameter where isdefault = 'FALSE'zparameter.logÚwz:		z<None>Ú
Útarget)ÚstdinÚstdoutÚstderrs	   show all;zError while test running rmanéÿÿÿÿs   Recovery Manager complete.z#Failed to successfully execute rmanZdatabaseZavailabilityDomainZcharacterSetZncharacterSetZeditionZdatabaseEditionÚdbNameÚdisplay_nameZdisplayNameÚdbUniqueNameZexternalDatabaseIdentifierZSIZRACZdatabaseModeZ	dbVersionZpdbNameZcompartment_idZcompartmentIdz(Creating external backup job resource...Z"create_external_backup_job_detailsz.Created external backup job resource with id: Ú	backup_idz@Internal error, backupId mismatch. Please contact Oracle supporté
   zBackup no longer existsz0Waiting for completion of external backup job...i,  ztdeWallet.tar.gzz/tdeWallet.tar.gzzCompressing the walletzw:gz)ÚarcnamezUploading walletÚrbzContent-Length)ZauthÚheadersÚdatazUploading parameter logsz
java -jar z -host z	 -opcId 'z' -opcPass 'z' -walletDir z	 -libDir z -configFile Zopcz.oraz -container ú zSetting up opc installerz' -opcPass z<redacted_password>z -walletDir zExecuting command: %s)Úshellr'   r(   r)   zFailed to run opcInstaller cmd:z	libopc.soz
libopc.dllzcwallet.ssozBUnexpected status from opcInstaller. Please contact Oracle supportzrman.sqlzset echo on
z!set encryption on identified by 'z' only;
zset encryption on;
zrun {
zallocate channel odbmsz
 type sbt zPARMS='SBT_LIBRARY=ú,zSBT_PARMS=(OPC_PFILE=z.ora)';
z-backup as compressed backupset database tag 'z' zformat 'z__%d_%I_%U_%T_%t' z/keep until time 'sysdate+29000' restore point 'z';
z}
z8Executing RMAN. It will take a few minutes to complete..Úlogzrman.logú@z!Error while running rman commandsc                 S   s   g | ]}|  ¡ ‘qS © )Ústrip)Ú.0Úxr9   r9   úBusr/lib/python3.10/site-packages/oci_cli/scripts/database/dbaas.pyÚ
<listcomp>»  s    z-create_backup_from_onprem.<locals>.<listcomp>z&including current SPFILE in backup seté   z^piece handle=(.+?) tag=z,including current control file in backup setz(Could not find spfile/controlfile Handlez$Completing the external backup job..ZcfBackupHandleÚdataSizeÚredoSizeZspfBackupHandleZ
sqlPatchesÚtdeWalletPath)r.   Z$complete_external_backup_job_detailszResponse:%szExternal Backup created.zDeleting incomplete backupr9   )RÚosr   Úexitr   ÚDEFAULT_PROFILEÚobjr   Zload_default_valuesr   Z$populate_dict_key_with_default_valueÚclickÚSTRINGÚintÚpathÚjoinÚtempfileÚ
gettempdirÚabspathÚisfileÚaccessÚR_OKÚsysÚmakedirsÚisdirÚlistdirÚenvironÚX_OKÚechoÚ	cx_OracleÚconnectZSYSDBAÚcursorÚexecuteÚ
expandvarsÚsplitÚappendÚmathÚceilÚopenÚwriteÚcloser   r   ÚcommunicateÚ
returncodeÚ
splitlinesZbuild_clientZcreate_external_backup_jobr3   r.   Zget_external_backup_jobZprovisioningÚtimeÚsleepZ
swift_pathZbucket_nameÚtagZ	user_nameZswift_passwordÚtarfileÚaddÚbasenamer   Úputr   ÚstrÚgetsizeZraise_for_statusÚprintÚexistsÚrangeÚsepÚ	readlinesÚlenÚreÚsearchÚgroupZcomplete_external_backup_jobÚstatusZdelete_backupÚshutilÚrmtree)AÚctxr   r   ÚkwargsZinitial_dictr   ZopcinstallerdirZrmanchannelsZrmanpasswordZadditionalopcargsZtmpdirZopcinstallerr   Údbr[   ÚrowZ	dbversionZomfZdbIdr+   r-   ZcharSetZnCharSetZracModeZpdbnameZcdbmodeZ
tdeenabledZ	walletLocZversionsZpdbsÚpdbr@   rA   ÚpfÚpÚoutÚerrZclientÚdetailsZbackupIdÚresultZ	swiftPathZ
bucketNameZrmanTagZuserNameZpassWordZtdeWalletFilerB   ÚtarÚpayloadÚresponseÚcmdZcmd_redactedZlibfileÚscriptZchannelZrlZ	spfHandleZcfHandleÚfÚlinesÚiZspfÚmÚcfr9   r9   r=   Úcreate_backup_from_onprem)   s~  
ô














€


€

€








€
€



€

€


ÿ8€þ



(þÿ


ÿþÿþ












ÿ
ý
û€
ý
ûÿÿÿÿÿþþþ
ÿÿÿÿÿÿþþþ&ÿþ



ÿÿÿÿÿþþþþþ
þÿÿÿþþþý
*ÿ
ý
û€î€ü

þý


ÿþ
ù
ÿþr’   Ú__main__)#rR   rG   Úoci_clir   r   rL   Ú
subprocessr   r   rh   rC   rw   Zoci._vendorr   Zoci._vendor.requests.authr   r`   r{   Zoci.utilr   rk   rY   ÚImportErrorrX   rD   rJ   rK   ZDEFAULT_LOCATIONrE   ÚcommandÚdictÚoptionZpass_contextr’   Ú__name__r9   r9   r9   r=   Ú<module>   sd   
ô
ÿþþ"   9
ÿ