关于oracle:Oracle-19C-静默安装-GoldenGate

首先在Linux零碎上装置好Oracle 19c 关上Oracle 下载网站 https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 搜寻Oracle GoldenGate,并下载V983658-01.zip 软件包 Oracle 19c 静默装置 Oracle GoldenGate 19.1.0.0,解压下载的软件包并批改相干的配置 [oracle@19coggmsoftware]$ cp V983658-01.zip software/[oracle@19coggmsoftware]$ unzip V983658-01.zip [oracle@19coggmsoftware]$ cd fbo_ggs_Linux_x64_shiphome/[oracle@19coggmfbo_ggs_Linux_x64_shiphome]$ lsDisk1[oracle@19coggmfbo_ggs_Linux_x64_shiphome]$ pwd/tmp/software/fbo_ggs_Linux_x64_shiphome[oracle@19coggmfbo_ggs_Linux_x64_shiphome]$ cd Disk1/[oracle@19coggmDisk1]$ cd response/[oracle@19coggmresponse]$ lsoggcore.rsp[oracle@19coggm response]$ vim oggcore.rsp###################################################################### Copyright(c)Oracle Corporation 2019. All rights reserved. #### #### Specify valuesfor the variables listed below to customize #### yourinstallation. #### #### Each variable isassociated with a comment. The comment #### can help topopulate the variables with the appropriate #### values. #### #### IMPORTANT NOTE:This file should be secured to have read #### permission onlyby the oracle user or an administrator who #### own thisinstallation to protect any sensitive input values. #### #######################################################################-------------------------------------------------------------------------------# Do not change thefollowing system generated value.#-------------------------------------------------------------------------------oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v19_1_0################################################################################## #### Oracle GoldenGateinstallation option and details #### ###################################################################################-------------------------------------------------------------------------------# Specify theinstallation option.# Specify ORA19c forinstalling Oracle GoldenGate for Oracle Database 19c or# ORA18c for installing OracleGoldenGate for Oracle Database 18c or# ORA12c for installing OracleGoldenGate for Oracle Database 12c or# ORA11g for installing OracleGoldenGate for Oracle Database 11g#-------------------------------------------------------------------------------INSTALL_OPTION=ORA19c #-------------------------------------------------------------------------------# Specify a locationto install Oracle GoldenGate#-------------------------------------------------------------------------------SOFTWARE_LOCATION=/opt/oracle/ogg/19.1.0.0.4#-------------------------------------------------------------------------------# Specify true tostart the manager after installation.#-------------------------------------------------------------------------------START_MANAGER=#-------------------------------------------------------------------------------# Specify a freeport within the valid range for the manager process.# Required only ifSTART_MANAGER is true.#-------------------------------------------------------------------------------MANAGER_PORT=#-------------------------------------------------------------------------------# Specify thelocation of the Oracle Database.# Required only ifSTART_MANAGER is true.#-------------------------------------------------------------------------------DATABASE_LOCATION=/opt/oracle/product/19c/dbhome_1阐明: ...

September 6, 2023 · 2 min · jiezi

关于oracle:WSL-配置-Oracle-19c-客户端

Windows  WSL 登陆后显示如下:   Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 4.4.0-19041-Microsoft x86_64)  * Documentation:  https://help.ubuntu.com * Management:     https://landscape.canonical.com * Support:        https://ubuntu.com/advantage   System information as of Tue Aug 22 14:12:16 CST 2023   System load:           0.52  Usage of /home:        unknown  Memory usage:          75%  Swap usage:            2%  Processes:             12  Users logged in:       0   登陆WSL零碎上,从Oracle下载几个压缩包   ~# wget https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-sqlplus-linux.x64-21.11.0.0.0dbru.zip--2023-08-22 10:26:32--  https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-sqlplus-linux.x64-21.11.0.0.0dbru.zipResolving download.oracle.com (download.oracle.com)... 23.203.124.79Connecting to download.oracle.com (download.oracle.com)|23.203.124.79|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 936855 (915K) [application/zip]Saving to: ‘instantclient-sqlplus-linux.x64-21.11.0.0.0dbru.zip’ instantclient-sqlplus-linux.x 100%[==============================================>] 914.90K   172KB/s    in 5.3s     2023-08-22 10:26:38 (172 KB/s) - ‘instantclient-sqlplus-linux.x64-21.11.0.0.0dbru.zip’ saved [936855/936855] ~# wget https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-basic-linux.x64-21.11.0.0.0dbru.zip--2023-08-22 10:27:18--  https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-basic-linux.x64-21.11.0.0.0dbru.zipResolving download.oracle.com (download.oracle.com)... 23.203.124.79Connecting to download.oracle.com (download.oracle.com)|23.203.124.79|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 78744025 (75M) [application/zip]Saving to: ‘instantclient-basic-linux.x64-21.11.0.0.0dbru.zip’ instantclient-basic-linux.x64 100%[==============================================>]  75.10M  1.75MB/s    in 59s      2023-08-22 10:28:19 (1.27 MB/s) - ‘instantclient-basic-linux.x64-21.11.0.0.0dbru.zip’ saved [78744025/78744025] ~# wget https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-jdbc-linux.x64-21.11.0.0.0dbru.zip--2023-08-22 10:40:23--  https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-jdbc-linux.x64-21.11.0.0.0dbru.zipResolving download.oracle.com (download.oracle.com)... 23.203.124.79Connecting to download.oracle.com (download.oracle.com)|23.203.124.79|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 1579011 (1.5M) [application/zip]Saving to: ‘instantclient-jdbc-linux.x64-21.11.0.0.0dbru.zip’ instantclient-jdbc-linux.x64- 100%[==============================================>]   1.51M   301KB/s    in 5.1s     2023-08-22 10:40:29 (301 KB/s) - ‘instantclient-jdbc-linux.x64-21.11.0.0.0dbru.zip’ saved [1579011/1579011] ~# wget https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-sdk-linux.x64-21.11.0.0.0dbru.zip--2023-08-22 10:28:39--  https://download.oracle.com/otn_software/linux/instantclient/2111000/instantclient-sdk-linux.x64-21.11.0.0.0dbru.zipResolving download.oracle.com (download.oracle.com)... 104.76.200.85Connecting to download.oracle.com (download.oracle.com)|104.76.200.85|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 1001766 (978K) [application/zip]Saving to: ‘instantclient-sdk-linux.x64-21.11.0.0.0dbru.zip’ instantclient-sdk-linux.x64-2 100%[==============================================>] 978.29K   479KB/s    in 2.0s     2023-08-22 10:28:42 (479 KB/s) - ‘instantclient-sdk-linux.x64-21.11.0.0.0dbru.zip’ saved [1001766/1001766]   ...

August 22, 2023 · 3 min · jiezi

关于oracle:ORACLEoracleASM添加和删除磁盘三

1、环境与筹备oracle 11gR2 RAC +施行前平安起见,操作之前停数据库实例、ASM实例2、节点1、2磁盘信息查看磁盘信息及新增加磁盘;共享磁盘信息:ls -l /dev/asm*需新增加磁盘:ls -l /dev/sd*udev形式将新磁盘配置为ASM共享磁盘(节点1、2都要执行)查看磁盘的UUID: for disk in `ls /dev/sd*`do echo $disk /usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=$diskdonecd /etc/udev/rules.d增加vi 99-oracle-asmdevices.rules KERNEL=="sd?", ENV{ID_SERIAL}=="36000d310008ec3000000000000000036", SYMLINK+="asm_ocr", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd?", ENV{ID_SERIAL}=="36000d310008ec3000000000000000016", SYMLINK+="asm_data", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd?", ENV{ID_SERIAL}=="36000d310008ec3000000000000000035", SYMLINK+="asm_fra", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd?", ENV{ID_SERIAL}=="36000d310008ec300000000000000002c", SYMLINK+="asm_bak", OWNER="grid", GROUP="asmadmin", MODE="0660"KERNEL=="sd?", ENV{ID_SERIAL}=="36000d310008ec3000000000000000039", SYMLINK+="asm_data3", OWNER="grid", GROUP="asmadmin", MODE="0660" 重启udev服务start_udev查看/dev/sdh是否已为/dev/asm-diskh格局的asm磁盘s -l /dev/asm*向ASM磁盘组中加盘(grid用户的sysasm) SQL>select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS,MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;SQL>alter diskgroup data add disk '/dev/asm-data3';SQL> select GROUP_NUMBER,DISK_NUMBER, MODE_STATUS,HEADER_STATUS,MODE_STATUS,state,TOTAL_MB,FREE_MB,name,PATH from v$asm_disk;增加完磁盘之后,oracle会主动做重均衡rebalance操作,能够通过视图查看 SQL> select * from v$asm_operation;SOFAR:就是目前为止移动的AU数量EST_WORK:预计要移动的AU数量EST_RATE:预计每分钟移动的AU数量EST_MINUTES:预计移动多少分钟重均衡的过程就是从其余的磁盘向新磁盘移动数据的过程,如果数据量很大,这个工夫会很长,能够更改power值加快速度,默认power值为1,可依据存储性能将此值设置大一些(power取值0-11),数据均衡结束还原power值即可SQL> show parameter asm_power_limitSQL> alter diskgroup data_dg rebalance power 11;注:power=0是进行rebalance操作或也可在加盘时间接增加rebalance指令,如下:SQL> alter diskgroup data_dg add disk '/dev/asm-diskh' rebalance power 8;注:如增加磁盘报错(新增磁盘不为全新盘,有旧数据在外头),可应用dd命令将磁盘头信息革除掉dd if=/dev/zero of=/dev/sdd bs=4096 count=256 --磁盘头信息大小个别是1M。删除ASM磁盘 ...

October 25, 2022 · 1 min · jiezi

关于oracle:ORACLEoracleASM管理二

一、查看磁盘组情况信息1、查问磁盘组故障组调配SELECT G.NAME,D.disk_number,D.STATE,D.redundancy,D.NAME,D.PATH,D.FAILGROUP,D.FAILGROUP_TYPE FROM V$asm_diskgroup g,v$asm_disk d where g.group_number=d.group_number;2、查看磁盘组,(空间状况)select name name2,state,type,free_mb,total_mb,usable_file_mb from v$asm_diskgroup;3、查看磁盘状况select GROUP_NUMBER,free_mb,total_mb,disk_number,MOUNT_STATUS,mode_status,STATE,HEADER_STATUS,name name2,PATH from v$asm_disk order by 4,5;二、创立磁盘组获取磁盘列表信息查看磁盘状态: CANDIDATE-该磁盘素来没有调配给任何ASM磁盘组;MEMBER-该磁盘调配给ASM磁盘组;PROVISIONED-正在应用ASMLib,并且该磁盘尚未调配给磁盘组。 1、勾销删除的操作提到的ASM主动均衡的个性,上述语句返回后并不代表磁盘曾经被删除,此时后盾可能因为正繁忙地执行着IO重均衡的工作,因而如果在这个当口,DBA突然意识到操作失误,其实磁盘并不需要被删除,那也能够马上通过alter diskgroup dgname undrop disks语句来勾销删除的操作,例如: SQL> alter diskgroup asmdisk2 drop disk asmdisk2; SQL> alter diskgroup asmdisk2 undrop disks; Diskgroup altered.只有删除操作还没有真正实现,任何就会被勾销,否则的话,上述语句也挽回不了什么了,如果心愿挽回,那DBA只能再通过ADD语句将该磁盘重新加入到磁盘组了。 三、AU与条带AU和条带就是一个调配单位,数据会被以肯定单位宰割,存储在多个磁盘中。宰割单位的大小由AU、条带来决定。 1、ASM有两种条带不可调粗粒度:相当于ASM没有条带,或者说AU就是条带,条带就是AU。条带宽度永远为1,不可扭转。条带大小等于AU大小。可调细粒度:条带大小为128kb,条带宽度为8 这是oracle默认的细粒度条带设置。条带的宽度不肯定等于磁盘数。a、在DG上创立细粒度模板: alter diskgroup data add template stp_fine attributes (unprotected fine);b、创立应用细粒度可调条带的表空间 create tablespace test datafile '+data(stp_fine)/test.dbf' size 10m;总结下小条带的优缺点: 小条带的长处是数据更扩散,有助于扩散热点。小条带的毛病是过小的AU、条带,导致间断数据太小,OLAP零碎性能受影响。大AU、大条带的长处是数据间断存储,显著进步OLAP类操作性能。大AU、大条带的毛病是过大的AU、条带,可导致数据分散度不够高。在OLTP环境下,应用较小的条带扩散热点,能够缩小竞争、进步性能。但在OLAP环境下,全扫描操作较多,这时数据的连续性是要害。间断的IO越多,IO性能越佳,为了让数据间断的存储,尽量应用大的AU.四、最大I/O与最小IOORACLE 最大IO取决于间断的数据有多大,当然还有OS和硬件的限度。ORACLE 最小IO 取决于块大小,数据文件最小I/O是8kb,redo文件最小IO是512byte,ASM元数据文件大小是4kb,很多操作系统、硬件层都有一个单次IO最大大小限度通常都是1MB. 五、AU与条带的总结AU是针对DG的,条带是针对文件的,一个DG只能有一种大小的AU,但能够有多个条带大小不一的文件。例: 1、在data 磁盘组上创立一个细粒度可调条带的表空间(数据文件)create tablespace test1 datafile '+data(stp_fine)/test1.dbf' size 10m;2、在这个data磁盘组上创立粗粒度不可调条带的表空间(数据文件)create tablespace test2 datafile '+data' size 10m;3、在OLAP环境下:不必思考条带大小,用大AU,大小为4MB或8MB为宜,甚至能够思考更大。但大的AU惟一的毛病会节约一点点空间。4、在OLTP环境下:如果并发插入的数据比拟多,能够应用小条带进一步宰割数据。六、ASM常用命令--------查看磁盘组,(空间状况)select name,state,free_mb,total_mb,usable_file_mb from v$asm_diskgroup;--------查看磁盘状况select GROUP_NUMBER,free_mb,total_mb,disk_number,MOUNT_STATUS,mode_status,HEADER_STATUS,name,PATHfrom v$asm_disk order by 4,5;select g.group_number,g.name,d.name,d.path from v$asm_diskgroup g,v$asm_disk d where g.group_number=d.group_number;select GROUP_NUMBER,free_mb,total_mb,disk_number,HEADER_STATUS,name,PATHfrom v$asm_disk order by 4;---查看是否有数据库实例连贯上ASM实例select instance_name,db_name,status from v$asm_client;--------查看asm存储文件的档次图(树状)select lpad(' ', 4*(level-1))||name name ,REFERENCE_INDEX,PARENT_INDEX,GROUP_NUMBERfrom v$asm_aliasstart with ALIAS_INDEX = 0connect by prior REFERENCE_INDEX=PARENT_INDEX ;--------查看档次图-类型和大小select a.GROUP_NUMBER,b.name,a.file_number,a.bytes,a.type ,a.modification_datefrom v$asm_file a ,v$asm_alias bwhere a.file_number=b.file_number and a.GROUP_NUMBER = b.GROUP_NUMBERorder by 1,5;--------查看及批改asm从新均衡速度show parameter poweralter diskgroup data check all repair ;;--检测一致性,并修复谬误ALTER DISKGROUP data REBALANCE POWER 11;--设置最高速度来做均衡的操作--------查看asm实例操作变动均衡的进度(只记录构造变动操作) select group_number,operation,power,est_minutes from v$asm_operation;#####################################################################################3---手动均衡磁盘组alter diskgroup data rebalance power 5;--------创立磁盘组create diskgroup DATA2 external redundancy disk '/dev/vx/rdmp/Disk_0s2', '/dev/vx/rdmp/Disk_4s2', '/dev/vx/rdmp/Disk_5s2'create diskgroup DATA2 external redundancy disk '/dev/rdisk/ora_data_01' ATTRIBUTE 'compatible.asm' = '11.2';;--------删除磁盘组的某个磁盘alter diskgroup datadg drop disk DATADG_0000 ;alter diskgroup datadg drop disk DATADG_0001 ;SQL> alter diskgroup DATA drop disk A4; SQL> alter diskgroup DATA undrop disks; --------批改asm实例搜寻可用asm磁盘门路,不同门路用逗号隔开ALTER SYSTEM SETasm_diskstring='/dev/vx/rdsk/oradata122/*','/dev/vx/rdmp/emc*'scope=both sid='+ASM1';应用asmlib时磁盘的格局:alter diskgroup DATA2 add disk 'ORCL:ASMDISK09';SQL> alter diskgroup fra add disk 'ORCL:ASMDISK06' NAME A6;--卸载所有磁盘组SQL> alter diskgroup all dismount; SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup; --挂载所有磁盘组SQL> alter diskgroup all mount;select group_number,name,state,total_mb,free_mb from v$asm_diskgroup; --如果以后磁盘组有实例在拜访,则不能被卸载 SQL> alter diskgroup data dismount; #############################################################################a、在DG上创立细粒度模板: alter diskgroup data add template stp_fine attributes (unprotected fine); b、创立应用细粒度可调条带的表空间 create tablespace test datafile '+data(stp_fine)/test.dbf' size 10m;c、创立非标准大小AU的磁盘组,个别在OLAP零碎上倡议应用。CREATE DISKGROUP DATA2 external redundancy DISK '/dev/raw/raw11', '/dev/raw/raw10','/dev/raw/raw9' ATTRIBUTE 'au_size' = '16M', 'compatible.asm' = '11.2';CREATE DISKGROUP DATA external redundancy DISK 'ORCL:ASMDISK01', 'ORCL:ASMDISK02' ATTRIBUTE 'compatible.asm' = '11.2';select name,state,compatibility,ALLOCATION_UNIT_SIZE from v$asm_diskgroup;######################################################################################3试验一:启动Gi服务cd /u01/app/oracle/product/11.2.0/grid/bin./crsctl start has --启动高可用服务./crsctl stop has --进行高可用服务./crsctl enable has --重启操作系统会主动启动HAS服务。如果创立了ASM实例,咱们就能够通过. oraenv 命令来切换环境变量(+ASM),而后间接运行srvctl,crsctl这些命令******************************************************************. oraenv PROD4切换到数据库的环境变量,执行上面操作注册数据库和监听到has服务中去:srvctl add database -d PROD4 -o /u01/app/oracle/product/11.2.0/db_1 --注册数据库到GIsrvctl remove database -d PROD4srvctl start database -d PROD4 --启动数据库srvctl stop database -d PROD4 --闭关数据库srvctl config database --查看哪些数据库曾经注册srvctl status database -d PROD4/EMREPlsnrctl stop listenersrvctl add listener -l listener -p 1521 -o /u01/app/oracle/product/11.2.0/db_1srvctl config listener --查看监听是否注册胜利srvctl start listener 启动监听srvctl remove listener -l listener如果注册谬误能够应用该命令删除*******************************************************************************crs_stat -ttarget是资源所在指标的状态,state是资源是否可用####################crs_stat -p ora.cssd --查看cssd资源状态crs_stat -p ora.diskmon --查看crsctl start resource ora.cssd --手工重启cssd#########################################################################################试验:二1、会创立ASM实例cd /u01/app/oracle/product/11.2.0/grid/bin单机环境:要先启动has服务./crsctl start has2、会应用./asmca 创立磁盘组3、会应用sqlplus 命令创立管治理磁盘组create diskgroup DATA2 external/normal/high redundancy disk 'ORCL:ASMDISK03','ORCL:ASMDISK04'(v$asm_disk里的path) ATTRIBUTE 'compatible.asm'(版本兼容性) = '11.2';--创立磁盘组alter diskgroup data2 add disk 'ORCL:ASMDISK06';--增加磁盘alter diskgroup data2 add disk 'ORCL:ASMDISK07';alter diskgroup data2 add disk 'ORCL:ASMDISK11';alter diskgroup data2 drop disk 'ASMDISK04';--删除磁盘 SQL> drop diskgroup data2 including contents;--删除磁盘组4、会应用ASMCMD命令治理asm文件5、会删除第一个磁盘组SQL>sqlplus / as sysasmSQL> alter diskgroup data dismount force;SQL> drop diskgroup data force including contents;########################################################################################试验三:文件系统迁徙到ASM1、首先关上归档,确认归档门路2、查问下数据库文件构造SQL> select name from v$datafile;NAME--------------------------------------------------------------------------------/u01/app/oracle/oradata/PROD4/PROD4/system01.dbf/u01/app/oracle/oradata/PROD4/PROD4/sysaux01.dbf/u01/app/oracle/oradata/PROD4/PROD4/undotbs01.dbf/u01/app/oracle/oradata/PROD4/PROD4/users01.dbf/u01/app/oracle/oradata/PROD4/PROD4/example01.dbfSQL> select name from v$controlfile;NAME--------------------------------------------------------------------------------/u01/app/oracle/oradata/PROD4/PROD4/control01.ctl/u01/app/oracle/oradata/PROD4/PROD4/control02.ctl/u01/app/oracle/oradata/PROD4/PROD4/control03.ctlSQL> select member from v$logfile;MEMBER--------------------------------------------------------------------------------/u01/app/oracle/oradata/PROD4/PROD4/redo03.log/u01/app/oracle/oradata/PROD4/PROD4/redo02.log/u01/app/oracle/oradata/PROD4/PROD4/redo01.logSQL> select name from v$tempfile;NAME--------------------------------------------------------------------------------/u01/app/oracle/oradata/PROD4/PROD4/temp01.dbf3、全库做备份:open状态就能够[[email protected] ~]$ rman target /RMAN> BACKUP as copy database format '+DATA';RMAN> EXITPROD4创立一个测试表:SQL> create table t1 as select * from dba_objects;Table created.SQL>alter system switch logfile;4、 在生产库查看asm磁盘组中备份的管制文件的门路RMAN> list backup of controlfile;specification does not match any backup in the repositoryRMAN> list copy of controlfile;List of Control File Copies===========================Key S Completion Time Ckp SCN Ckp Time ------- - --------------- ---------- ---------------5 A 17-MAY-16 871730 17-MAY-16 Name: +DATA/prod4/controlfile/backup.260.912089587 Tag: TAG20160517T141203批改spfile文件中管制文件的门路信息create pfile='/home/oracle/pfile' from spfile批改文件中*.control_files='+DATA/prod4/controlfile/backup.262.940489201'删除$ORACLE_HOME/dbs/lkPROD4文件应用另一个实例 将数据库开启到mountexport ORACLE_SID=p4startup pfile='/home/oracle/pfile' mount;进入rman批改管制文件指针 复原数据rman target /RMAN> catalog start with '+data';RMAN> switch database to copy;RMAN> recover database;复原后 开启数据库[[email protected] dbs]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on Thu May 19 09:57:03 2016Copyright (c) 1982, 2009, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, Automatic Storage Management, OLAP, Data Miningand Real Application Testing optionsSQL> alter database open resetlogs; 指定resetlogs,会执行下列操作: 1)将以后的在线重做日志文件归档,而后清空其内容并将日志文件序列号重置为1 2)重置管制文件中对于在线重做日志文件的元数据 3)更新数据文件和在线重做日志文件的resetlogs scn等信息6、创立新的长期表空间文件,并删除旧的SQL> alter tablespace temp add tempfile '+DATA' size 200M;SQL> alter database tempfile '/u01/app/oracle/oradata/PROD4/PROD4/temp01.dbf' drop ; 或alter tablespace temp drop tempfile '/u01/app/oracle/oradata/PROD4/PROD4/temp01.dbf';7、把redo增加新的成员,删除老的成员,查看原来有多少组,就增加多少成员 select member from v$logfile; alter database add logfile member '+data' to group 1; alter database add logfile member '+data' to group 2; alter database add logfile member '+data' to group 3;select group#,status,member from v$logfile;初始化新加的logfileSQL> alter system switch logfile;--起码执行三遍select group#,status,member from v$logfile;--查问下日志成员状态删除旧的logfile member(如果无奈删除,阐明该文件还在应用,咱们能够进行手工切换之后,再删除)SQL> select group#,members,status from v$log; GROUP# MEMBERS STATUS---------- ---------- ---------------- 1 2 CURRENT 2 2 INACTIVE 3 2 INACTIVEalter database drop logfile member '/u01/app/oracle/oradata/PROD4/PROD4/redo03.log';alter database drop logfile member '/u01/app/oracle/oradata/PROD4/PROD4/redo02.log';SQL> alter system switch logfile;alter database drop logfile member '/u01/app/oracle/oradata/PROD4/PROD4/redo01.log';8、能够依据理论状况从新设置归档门路alter system set log_archive_dest_1='location=+arch'

October 25, 2022 · 4 min · jiezi

关于oracle:ORACLEoracleASM管理一

一、oracle_ASM治理Oracle 10g 应用dbca创立asm实例,11g应用grid软件创立实例。 查看asm实例参数文件;ASM_POWER_LIMIT: 这个参数 ASM_POWER_LIMIT 参数管制 ASM 后盾过程 ARBx 的数量。 RBx 过程用来进行 ASM 磁盘数据从新散布打散。ASM_POWER_LIMIT 取值 从 0 到 11(据说从 10gR2 开始能够设置为 0,设置为0是为不做reblance,默认是1,数值越大速度越快,对性能要求更高,主机忙碌的时候须要特地留神 ). 当新增加磁盘或者删除磁盘后,ASM 会启动 ARBx 进行 IO 扩散操作,这是个十分耗费资源的动作,所以肯定要抉择零碎闲暇的时候进行。INSTANCE_TYPE:ASM实例要求此参数为ASM,隐含着将DB_UNIQUE_NAME设置为+ASM.ASM_DISKSTRING:指定在磁盘发现过程该当查找的地位,默认值是NULL。ASM_DISKGROUPS:指定在实例启动时要主动装载的磁盘组的名称,默认值是NULL。视图显示V$ASM_CLIENT:这个视图显示了所连贯ASM实例的实例信息。V$ASM_DISKGROUP:这个视图列出了在ASM中创立的磁盘组,还有元数据信息,如磁盘组的闲暇空间、调配单元大小和状态。**V$ASM_FILE **:这个视图列出了在V$ASM_DISKGROUP视图所列磁盘组中创立的文件。**V$ASM_ALIAS**:这个视图列出了在V$ASM_FILE视图中所列ASM文件的用户敌对名称。这个视图对于辨认ASM文件的确切名称十分有用,因为V$ASM_FILE视图仅列出了文件号。**V$ASM_DISK_IOSTAT**:这个视图列出了V$ASM_DISKGROUP视图中所列每个磁盘的磁盘I/O性能统计信息。V$ASM_ACFSVOLUMES:这个视图列出了ASM动静卷的元数据信息。**V$ASM_OPERATION**:这个视图显示了以后操作,例如在V$ASM_DISKGROUP视图中所列磁盘组上产生的任何再平衡操作。这个视图对于监控ASM中的再平衡操作十分有用。其它RBAL :这是一个再平衡后盾过程。它负责再平衡操作,还协调ASM磁盘复原过程。GMON :这是“组监控器”后盾过程。它在治理磁盘组时将磁盘组标记为“脱机”,甚至会删除这个磁盘组。ARBn :只管RBAL负责协调磁盘组的再平衡,但实际上是由ARBn来执行再平衡协调的。VMB :这是一个“卷成员资格”后盾过程,它与ASM实例一起负责集群成员资格。在创立ASM动静卷时,ASM实例会启动这个后盾过程。VDBG :这是“卷驱动程序”后盾过程。它与动静卷驱动程序一起提供卷盘区的锁定和解锁。这是一个十分重要的过程,如果被意外终止,那么它会敞开ASM实例。VBGn :这是“卷后盾”过程。ASM实例中的VBG与操作系统卷驱动程序通信。它负责ASM与操作系统之间的音讯发送。XDMG :这是一个Exadata主动管理器。XDMG监控所有配置的Exadate单元,以理解状态变动,例如更换了一个坏磁盘等。它的次要工作是监控不可拜访的磁盘和单元,当它们再次可供拜访时,启动ASM ONLINE操作。治理ASM阐明: failgroup (故障组)的个数的限度: HIGH ---------- failgroup >= 3 NORMAL ---------- failgroup >= 2 EXTERNAL -------- failgroup == 0 (不能指定故障组)ASM与RDBMS的兼容性compatible.asm 和compatible.rdbms是ASM磁盘组的兼容性的两个属性。ASM兼容性:解决阐明磁盘组的长久数据结构 RDBMS兼容性: 解决数据库实例(磁盘组的使用者)的兼容性 能够独立管制每个磁盘组的兼容性。这是启用蕴含来自Oracle database 10g 和11g的磁盘组的异构环境所必须的。比方,Oracle database 10g想调用11g ASM instance,就须要设置兼容性属性。 ...

October 25, 2022 · 1 min · jiezi

关于oracle:ORACLEoracle日常运维SQL脚本

1、正在执行的语句查问和拼接杀过程SELECT 'alter system kill session '''||b.sid||','|| b.serial#||''';',b.sid oracleID,b.username Oracle用户,b.serial#,spid 操作系统ID,paddr,sql_text 正在执行的SQL,b.machine 计算机名FROM v$process a, v$session b, v$sqlarea cWHERE a.addr = b.paddrAND b.sql_hash_value = c.hash_value;2、锁表语句杀过程select 'alter system kill session '''||s.sid||','|| s.serial#||''';', l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#, l.os_user_name, s.machine, s.terminal, a.sql_text, a.action from v$sqlarea a, v$session s, v$locked_object l where l.session_id = s.sid and s.prev_sql_addr = a.address order by sid, s.serial#;3、最耗CPUselect * from (select sql_text, buffer_gets, disk_reads, sorts, cpu_time / 1000000 cpu_sec, executions, rows_processed from v$sqlstats order by cpu_time DESC) where rownum < 11;4、通过SQL_ID查看数据状态剖析select * from (SELECT T.INST_ID,T.SQL_ID,T.LAST_ACTIVE_TIME,T.SQL_PROFILE, --如果该字段有值,就是按固化走执行打算 T.PLAN_HASH_VALUE,T.SQL_FULLTEXT,T.CHILD_NUMBER 执行打算版本号, TRUNC((T.CPU_TIME/T.EXECUTIONS/1000000),4) 每次CPU工夫,TRUNC((T.ELAPSED_TIME-T.CPU_TIME)/T.EXECUTIONS/1000000,4)"每次等待时间",T.EXECUTIONS 总执行次数, --trunc(T.EXECUTIONS/((T.LAST_ACTIVE_TIME-to_date(T.LAST_LOAD_TIME,'yyyy/mm/dd hh24:mi:ss'))*86400)) 均匀每秒执行次数, round(t.ROWS_PROCESSED/t.executions,2) 均匀返回行数,TRUNC(T.ELAPSED_TIME / T.EXECUTIONS / 1000000,4) "每次执行(秒)", TRUNC((T.BUFFER_GETS / T.EXECUTIONS/1000000),4) 每次逻辑读,TRUNC((T.DISK_READS / T.EXECUTIONS/1000000),4) 每次物理读, TRUNC((t.cluster_wait_time/t.EXECUTIONS/1000000),4) 每次集群期待,TRUNC((t.user_io_wait_time/t.EXECUTIONS/1000000),4) 每次IO期待, TRUNC((t.application_wait_time/t.EXECUTIONS/1000000),4) 每次利用期待,TRUNC((t.concurrency_wait_time/t.EXECUTIONS/1000000),4) 每次并发期待, T.FIRST_LOAD_TIME 首次硬解析工夫,T.LAST_LOAD_TIME 上次硬解析工夫, t.MODULE,t.ACTION,t.PARSING_SCHEMA_NAME,TRUNC(T.ELAPSED_TIME/1000000,4) "执行工夫(秒)", TRUNC(T.CPU_TIME/1000000,4) CPU工夫,t.PARSE_CALLS 总解析次数, t.LOADS 硬解析次数, T.BUFFER_GETS,T.CLUSTER_WAIT_TIME, T.USER_IO_WAIT_TIME,T.APPLICATION_WAIT_TIME,T.CONCURRENCY_WAIT_TIME,T.PLAN_HASH_VALUE FROM GV$SQL Twhere t.EXECUTIONS >0 --and t.sql_id='cjrpgh8gqybs0' order by t.CPU_TIME desc) xx where rownum<=20;5、最耗缓存SELECT * FROM (SELECT SQL_FULLTEXT sql, buffer_gets, executions, buffer_gets/executions "Gets/Exec", hash_value,address,LAST_ACTIVE_TIME FROM V$SQLAREA WHERE buffer_gets > 10000ORDER BY buffer_gets DESC)WHERE rownum <= 10 ;6、最多物理读取SELECT * FROM (SELECT SQL_FULLTEXT sql, disk_reads, executions, disk_reads/executions "Reads/Exec", hash_value,address,LAST_ACTIVE_TIME FROM V$SQLAREA WHERE disk_reads > 1000ORDER BY disk_reads DESC)WHERE rownum <= 10 ;7、最多执行sqlSELECT * FROM (SELECT substr(sql_text,1,40) sql,SQL_FULLTEXT, executions, rows_processed, rows_processed/executions "Rows/Exec", hash_value,address,LAST_ACTIVE_TIME FROM V$SQLAREA WHERE executions > 100ORDER BY executions DESC)WHERE rownum <= 10 ;8、最耗内存的sqlSELECT * FROM (SELECT substr(sql_text,1,40) sql, sharable_mem, executions, hash_value,address,LAST_ACTIVE_TIME FROM V$SQLAREA WHERE sharable_mem > 1048576ORDER BY sharable_mem DESC)WHERE rownum <= 10 ;9、生效的索引重建select 'alter index '||index_name||' rebuild online;' from user_indexes where status <> 'VALID' and index_name not like'%$$';

October 25, 2022 · 2 min · jiezi

关于oracle:Oracle批量扩数据文件脚本fileid连续

Oracle批量扩数据文件脚本(file_id间断)nohup ./resize.sh 20 25 &,参数指定数据文件file_id 20 到 25 顺次串行扩大大小;每次扩大数据文件从100m递增扩大到2400m,每次递增100m;初始数据文件大小要小于100m或者未应用,否则报错;校验Linux CPU IOwait,只有<5%时才resize数据文件;IO性能足够状况,#sleep 1无需放开,IO较差环境,倡议设置脚本执行间隔时间,单位-秒; #!/bin/bash# Usage: nohup ./resize.sh 20 25 &source ~/.bash_profileexport resize_tmp=/tmp/resize_tmp.log> $resize_tmpf=$1for((f=$1; f<=$2; f++));doecho "$(date +'%F %T'): Resize datafile : $f">> $resize_tmp for((i=100; i<=2400; i=i+100)) do echo "$(date +'%F %T'):Begin alter database datafile $f resize $i m;">> $resize_tmp export wa=99 # resize datafile only when CPU iowait is less than 5% until [ $wa -lt 5 ]; do wa=$(top -cn 1 | grep 'wa,'|grep -v grep|awk '{print $10}'|cut -d. -f1) echo -e "alter database datafile $f resize $i m;\nexit;" | sqlplus -S / as sysdba echo "$(date +'%F %T'):End alter database datafile $f resize $i m;">> $resize_tmp #sleep 1 done donedone# End

October 19, 2022 · 1 min · jiezi

关于oracle:202210-当前数据库版本的发行时间表-Doc-ID-16262441

以后数据库版本的发行时间表 (Doc ID 1626244.1)文档内容 | | 详细信息 ||   | 新内容 | |   | Oracle 数据库版本路线图 ||   | 举荐的降级门路 ||   | Oracle数据库公布时间表 ||   | Oracle私有云版本 ||   | On-Premises Engineered Systems ||   | On-Premises 服务器端版本 (包含客户端) ||   | Instant 仅客户端版本 || | 操作 || | 联系人 ||   | [**批改历史 (2020-2021)**](https://support.oracle.com/ep...) || | 参考 | 实用于:Oracle Cloud Infrastructure - Database Service - 版本 N/A 和更高版本Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本Gen 1 Exadata Cloud at Customer (Oracle Exadata Database Cloud Machine) - 版本 N/A 和更高版本Oracle Database Cloud Service - 版本 N/A 和更高版本Oracle Database Backup Service - 版本 N/A 和更高版本本文档所含信息实用于所有平台 ...

October 19, 2022 · 9 min · jiezi

关于oracle:Recluster-Table-RFC-解读

背景Databend Clustering 的设计受到 Snowflake Data Clustering 和 Oracle Attribute Clustering 的启发。 注:这里的 Clustering 是分组、聚类的意思,下文将译为聚类。聚类后的表会依据表中某一组列的值,以某种顺序存储数据。聚类有利于分区的打消(partition elimination)和文件碎片整顿(file defragmentation)。默认状况下,数据是依照天然维度存储在表中的。因而,须要依据聚类键(cluster key)对表进行重聚类。另一方面,即便表曾经聚类过,数据失去无效地组织,但如果一直地写入新的数据,聚类状况会随着工夫的推移而变差。因而,有必要减少重聚类(recluster)操作。 设计如果打算理解更具体的原理和图景,请参考 摸索 Snowflake auto clustering 设计 一文。 执行全表排序的老本十分高,尤其是对于一直有新数据流入的表。为了在高效剪枝和低成本之间获得均衡,只须要对表进行粗略排序而不是齐全排序。因而,在观测指标 一节中引入了两个指标来确定表是否曾经无效聚类。从新聚类的目标是为了缩小重叠 "overlap"和深度 "depth" 。 为了防止对同一份数据进行屡次搅动,这里将数据块划分到不同的层(level),就像 LSM 树一样。那么重聚类就与 LSM 树的压缩操作相似。层示意该块中的数据被聚类的次数。重聚类操作是在同一层上进行的。 pub struct ClusterStatistics {    ... ...    pub level: i32,}重聚类操作的工作流程能够划分为两个工作:块抉择(Block Selection)和块合并(Block Merge)。 语法alter table [if exists] tbl_name recluster [final] [where condition]如果指定 "final",那么优化将会重复执行直到该表的聚类水平足够好。否则,重聚类的工作流程将只会运行一次。 观测指标"overlap"与指定块重叠的块数。"depth"在同一点重叠的块数。这些点是从聚类值域范畴中的最小值和最大值中收集的。块抉择新流入的数据的初始层是第 0 层(level 0)。咱们首先要关注的就是这些较新的数据,换句话说,抉择操作优先在第 0 层执行。这样做的长处是能够缩小写放大。1.计算每个点的深度和重叠的块数,汇总失去 "avg_depth" 。这个算法曾经反映在 system$clustering_information 中,这里不再进行复述。avg_depth 的现实后果是 1 。为了实现粗略排序,须要定义一个阈值(threshold)或者是一个比率(ratio)("threshold = blocks_num * ratio")。只有 "avg_depth" 不大于该阈值。就认为这一层中的块的聚类水平足够好,那么咱们将对下一层执行块抉择。2.抉择深度最大的点范畴(一个或多个)并抉择该范畴所笼罩的区块作为下一次块合并的对象集。如果存在不止一个的深度最大的范畴,那么在块合并过程中,可能会呈现多组块并行的状况。 Tip: 聚类键(cluster key)可能会在表中存在数据的时候创立/变更,故而可能存在一些没有按聚类键进行排序的块。目前打算是在重聚类过程中临时疏忽这些块。如果某个块的聚类键只有一个值(最大值和最小值相等,达到一个不变的状态)且行数 "row_num" 为 "1_000_000" ,那么重聚类时,将其所处层数设为 -1 并过滤掉。须要思考选定的块的总大小,免得在排序时遇到内存溢出(out of memory, OOM)。块合并接下来就须要对收集到的块进行排序和合并。当合并后的块超过某个确定的阈值("1_000_000" 行)之后,就会进一步拆分成多个块。新生成的块放入下一层。而后,咱们须要组织块并生成新的段和快照,最初更新表的元信息。如果在此期间有新的 DML 执行,以后的工作流将无奈提交(commit),并返回谬误。具体的解决流程依然须要进一步的探讨。抉择和合并操作会反复进行,直到表的聚类水平足够好。 回顾这篇 RFC 介绍了 Databend 反对 Recluster Table 的背景,以及重聚类操作的相干设计和工作流程。重聚类的第一版代码实现能够查看 https://github.com/datafusela... ,Databend 自 v0.8 起正式提供对重聚类的反对。 ...

September 30, 2022 · 1 min · jiezi

关于oracle:CNET-ORM-FreeSql-读取使用-US7ASCII-的-Oracle-数据库中文显示乱码问题

前言对于 Oracle US7ASCII 中文乱码的问题,Ado.Net 和 Odbc 无奈解决。包含最新的.Net Core、.NET6、.NET7 都无奈解决这个问题。 FreeSql 对 Oracle 反对十分敌对,是 c#.net ORM 不二之选,提供了 Ado.net 实现包 FreeSql.Provider.Oracle,Odbc 实现包 FreeSql.Provider.Odbc,Oledb 实现包 FreeSql.Provider.OracleOledb,他们都反对 .NETCore2.1+、.NET4.0+ 等最新或较低的 .NETFramework 版本。 FreeSql 拜访 Oracle 只须要援用 FreeSql.Provider.Oracle/FreeSql.Provider.Odbc/FreeSql.Provider.OracleOledb 任意一个包即可。 若想以 Ado.net 驱动拜访数据库,请装置: dotnet add package FreeSql.Provider.Oracle若想以 ODBC 驱动拜访数据库,请装置: dotnet add package FreeSql.Provider.Odbc若想以 Oledb 驱动拜访数据库,请装置: dotnet add package FreeSql.Provider.OracleOledb 解决办法装置 FreeSql.Provider.OracleOledb 应用 Oledb 驱动解决读取应用 US7ASCII 的 Oracle 数据库中文显示乱码问题。 无关 US7ASCII Oracle 参考了其余解决办法: C#解决读取应用US7ASCII的oracle数据库中文显示乱码问题https://blog.csdn.net/guhun_shmily/article/details/83064225public class DB{ static Lazy<IFreeSql> oracleLazy = new Lazy<IFreeSql>(() => new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Oracle, "Provider=OraOLEDB.Oracle;user id=9user;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2") //.UseConnectionString(FreeSql.DataType.OdbcOracle, "...") //ODBC 特定类型 .UseAutoSyncStructure(true) .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) .UseNoneCommandParameter(true) .UseMonitorCommand(cmd => Trace.WriteLine(cmd.CommandText)) .Build()); public static IFreeSql oracle => oracleLazy.Value;}定义 DB.cs 类之后就能够高兴的 CRUD 了。FreeSql 提供多种 CRUD 应用习惯,请依据理论状况抉择团队适合的一种: ...

August 23, 2022 · 3 min · jiezi

关于oracle:Oracle12c新特性大全-IO资源隔离

       12cR2中,引入了两个参数MAX_IOPS和MAX_MBPS来限度PDB的物理IO。这两个参数只作用于PDB,不对CDB和非多租户环境失效。另外,这两个参数不限度redo log的写入(LGWR过程)和buffer cache脏块写入磁盘(DBWR过程)。     IO对数据库性能至关重要。如果某个PDB产生了大量的IO,那可能导致CDB中的其它PDB也受影响。MAX_IOPS参数限度每秒IO操作次数,MAX_MBPS参数限度每秒IO吞吐,如果这两个参数同时在pdb中设置,都会失效起作用。如果在CDB$ROOT中设置这两个值,那么以后CDB中每个PDB都采取此作为默认值。     默认状况下,这两个参数都为0。如果在PDB中这两个参数为0,CDB$ROOT中也为0,那对于PDB来讲,没有IO限度。 有些状况下,尽管物理IO限度曾经达到,然而一些要害IO依然容许,比方:对管制文件的拜访或对口令文件的拜访,然而这些要害IO也是计入到IO数统计里的。     能够应用DBA_HIST_RSRC_PDB_METRIC来计算一个PDB正当的IO限度。当计算IO限度值时,能够参考以下列:IOPS、IOMBPS、IOPS_THROTTLE_EXEMPT和IOMBPS_THROTTLE_EXEMPT。不举荐设置MAX_IOPS的值小于100,MAX_MBPS的值小于25。 set linesize 400 col PDB_NAME for a10 col BEGIN_TIME for a30 col END_TIME for a30 SELECT R.SNAP_ID,        R.CON_ID,        P.PDB_NAME,        TO_CHAR(R.BEGIN_TIME, 'YYYY-MM-D HH24:MI') AS BEGIN_TIME,        TO_CHAR(END_TIME, 'YYYY-MM-D HH24:MI') AS END_TIME,        R.IOPS,        R.IOMBPS,        R.IOPS_THROTTLE_EXEMPT,        R.IOMBPS_THROTTLE_EXEMPT,        R.AVG_IO_THROTTLE   FROM DBA_HIST_RSRC_PDB_METRIC R, CDB_PDBS P  WHERE R.CON_ID = P.CON_ID  ORDER BY R.BEGIN_TIME;   ALTER SYSTEM SET MAX_IOPS = 1000 SCOPE = BOTH; ALTER SYSTEM SET MAX_MBPS = 50 SCOPE = BOTH; ...

August 15, 2022 · 1 min · jiezi

关于oracle:Oracle12c新特性大全二CDB的创建

Managing a Multitenant Environment官网文档链接: https://docs.oracle.com/en/database/oracle/oracle-database/12.2/admin/managing-a-multitenant-environment.html#GUID-93F1E584-D309-4301-82E0-AD0E60D4977C   CDB的创立:如果要应用可插拔数据库的性能,须要在创立数据库时专门指定启用可插拔数据库,创立CDB通常有如下两种形式:· 应用DBCA图形工具创立CDB\    这里须要留神的是Oracle 12.2之后反对LOCAL UNDO,这里留神须要手动要勾选LOCAL UNDO选项。 · CREATE DATABASE语句创立CDB\    在应用脚本创立CDB时Oracle提供了两种办法,一种是应用OMF,另外一种是非OMF**的形式,留神参数文件中须要将ENABLE_PLUGGABLE_DATABASE设置为TRUE。  这里演示应用非OMF形式创立CDB,数据名称为ora12c:\1.设置ENABLE_PLUGGABLE_DATABASE参数为TRUE,参数文件如下: audit_file_dest='/u01/app/oracle/admin/ora12c/adump' audit_trail='none' compatible='12.2.0' control_files='/u01/app/oracle/oradata/ora12c/control01.ctl','/u01/app/oracle/oradata/ora12c/control02.ctl' db_block_size=8192 db_domain='linux.com' db_name='ora12c' diagnostic_dest='/u01/app/oracle' enable_pluggable_database=true memory_target=801m nls_language='AMERICAN' nls_territory='AMERICA' remote_login_passwordfile='EXCLUSIVE' undo_tablespace='UNDOTBS1'   2.创立相应目录以及设置环境变量 export ORACLE_SID=ora12c export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch: **$ORACLE_HOME/perl/bin**:$ORACLE_HOME/jdk/bin:$PATH   3.CREATE DATABASE脚本 createdb.sql 如下: CREATE DATABASE ora12c USER SYS IDENTIFIED BY oracle USER SYSTEM IDENTIFIED BY oracle LOGFILE GROUP 1 ('/u01/app/oracle/oradata/ora12c/redo01a.log','/u01/app/oracle/oradata/ora12c/redo01b.log')            SIZE 100M BLOCKSIZE 512,         GROUP 2 ('/u01/app/oracle/oradata/ora12c/redo02a.log','/u01/app/oracle/oradata/ora12c/redo02b.log')            SIZE 100M BLOCKSIZE 512, ...

August 2, 2022 · 3 min · jiezi

关于oracle:Oracle12c新特性大全一可插入数据库的概念

Oracle Multitenant Container Database是Oracle 12C引入的新个性,Multitenant Container Database (CDB),多租户容器数据库是指能够包容一个或者多个可插拔数据库的数据库,这个个性容许在CDB容器数据库中创立并且保护多个数据库,在CDB中创立的数据库被称为PDB,每个PDB在CDB中是互相独立存在的,在独自应用PDB时,与一般数据库无任何区别。**CDB根容器数据库的次要作用就是包容所有相干的PDB的元数据,以及在CDB中对所有的PDB进行治理。 多租户环境的组成· ROOT\Root容器数据库,是CDB环境中的根数据库,在根数据库中含有主数据字典视图,其中蕴含了与Root容器无关的元数据和CDB中所蕴含的所有的PDB信息。在CDB环境中被标识为CDB$ROOT,每个CDB环境中只能有一个Root容器数据库。 · CDB seed\CDB seed为PDB的种子,其中提供了数据文件,在CDB环境中被标识为PDB$SEED,是创立新的PDB的模板,你能够连贯PDB$SEED,然而不能执行任何事物,因为PDB$SEED是只读的,不可进行批改。 · PDBs\PDB数据库,在CDB环境中每个PDB都是独立存在的,与传统的Oracle数据库根本无差别,每个PDB领有本人的数据文件和objects,惟一的区别在于PDB能够插入到CDB中,以及在CDB中插入,并且在任何一个工夫点之上PDB必须插入或者插入到一个CDB中,当用户链接PDB时不会感觉到根容器和其余PDB的存在。 CDB with PDBs sys. ora12c>show pdbs       CON_ID CON_NAME                       OPEN MODE  RESTRICTED          2 PDB$SEED                       READ ONLY  NO          3 ORA12CPDB                      READ WRITE NO          4 PDB2                           MOUNTED          5 PDB1                           MOUNTED          6 PDB3                           READ WRITE NO sys. ora12c>   PDB$SEED为CDB seed,ORA12CPDB/PDB1/PDB2/PDB3为PDB数据库。   Application Containers在12cR2版本中Oracle带来新的Application Containers个性,该个性对原有的多租户性能进行了加强,在CDB root容器中能够创立一个叫做Application root的容器,相似于CDB root,可在其内创立多个依赖于Application root的Application PDBs,其架构图如下: Application Containers in a CDB ...

August 1, 2022 · 3 min · jiezi

关于oracle:Oracle12c基于容器的数据库整合1

数据库整合   在一体机技术呈现之前,通常状况下,一台服务器部署一套数据库,这种数据库部署形式实际上老本昂扬,在一体机呈现后,因其高性能/高可用以及良好的扩展性,将同一个机房中的多个服务器中的数据库装置部署在一台一体中的状况也较常见,这也是一种数据库整合计划,该计划尽管能够降低成本,但同时存在一些负面问题。 保护治理更加简单  当咱们将20套数据库部署到一台一体机中时,在20套数据库中辨识不同的数据库也会变的很头痛,显然会让保护变得更加艰难,保护每套治理每套数据库任然有很大的挑战性。 资源隔离较艰难  该整合形式中,如果其中某套数据库在某个工夫点负载急剧减少,占用了绝大部分一体机资源,那势必会对其余数据库性能造成肯定影响。内存资源咱们能够通过数据库外部的SGA进行配置,CPU资源能够通过CPU_COUNT进行管制,但I/O资源又要如何进行治理呢?这种整合形式下咱们很难做到对资源的细粒度的治理调配。 资源任然存在节约状况  尽管在肯定水平上做到了数据库的整合,但如果每个数据库后盾启动20个过程,当咱们同时部署20套数据库时,后盾会同时启动400个相干过程,同样的过程Oracle为每套数据库别离启动一个,显然冗余,在资源上也造成肯定的节约。 基于12c中容器的数据库整合在12C中,Oracle推出了容器数据库,通过容器的形式对数据库进行整合后,能够对下面的问题进行完满的解决。   资源被正当利用在Oracle 12c中当,咱们把20套数据库以PDB的形式插入到CDB中,因其PDB共享CDB的后盾过程,后盾只会启动20个过程,并不会因为我数据库的减少,后盾过程也随之减少。 在资源方面咱们能够节俭更多的资源,更加无效的对资源进行利用,同样配置的一体机中,当应用容器的形式进行整合后,能够部署更多的数据库。 资源管理更加灵便  当数据库以PDB的形式插入到CDB中时,资源管理变得更加灵便,能够更加细粒度的依据每个PDB的需要状况为每个PDB数据库配置不同的资源,以及限度PDB对资源的过多应用,能够达到防止因为某个数据库应用过多的资源而影响其余数据库。 I/O资源隔离 MAX_IOPS/MAX_MBPS内存资源隔离 SGA_TARGET/SGA_MIN_SIZE CPU资源隔离 CDB resource plans存储资源隔离 flex diskgroup当某个PDB随着工夫的推移它的业务量也一直的减少,须要更多资源的时候,我能够非常灵活的修个相干参数动静的为他调配更多的资源。 升高保护老本整合后,在保护上咱们也能够升高保护老本,之前我须要别离去保护20个不同的数据库,那整合后咱们只须要将20个库作为一个CDB数据库进行对立治理。 备份:在不做整合时,20套数据库须要咱们保护20个不同的备份工作,当初咱们只须要在CDB级别进行对立备份就能够实现对20个PDB数据库的备份。 DG:整合后只须要搭建一套DG环境就能够,不须要为独自为每个数据库都去搭建一个备库。 降级保护:在降级方面,整合后咱们只须要对一个CDB进行降级,就能够实现CDB中所有PDB数据库的降级,如果想对其中一个PDB进行降级,咱们也能够通过克隆或者挪动的形式,将他挪动到更高版本的CDB中,这样就能够做到对某一个PDB进行降级。 更好的一个降级形式。我能够在一体机中在装置配置一个更高版本的CDB,而后间接把低版本CDB中的PDB插入,插入到高版本的CDB中,同样也能够实现降级工作。可能之前一套数据库降级要花费2个小时的工夫,那当初咱们可能10分钟就降级实现20套数据库。 整合时须要思考的问题任何事件都是两面性的,尽管整合能够为咱们带来很多的益处,但同时也会带来一些其余问题。 1.当一体机呈现问题时,一起一体机中部署了更多的数据库,那咱们所有的PDB都会受到牵连。这个问题咱们要如何去防止呢? 另外,CDB层面呈现了不能够修复的问题,咱们又该如何去解决呢? 2.因每个PDB均是来自不同的业务,当咱们在做相干保护时,比方一体机的保护或者是CDB级别的保护,咱们把所有PDB的保护窗口协调在同一个时间段,其实该问题同样较艰难。

July 28, 2022 · 1 min · jiezi

关于oracle:深度解析实例恢复

通过v$datafile.last_time和v$datafile.last_change#判断是否须要实例复原,当数据库失常敞开时,会在last_change#和last_time记录最初的change#与time,实例复原是依据CKPT-Q的程序进行复原的,CKPT-Q的程序是和REDO的程序统一的。 在数据库服务器异样断电重启后,数据库会进行实例复原,那么实例复原的过程中Oracle做了什么操作呢? 首先说下实例复原的定义: Instance recovery is the process of applying records in the online redo log to data files to reconstruct changes made after the most recent checkpoint. Instance recovery occurs automatically when an administrator attempts to open a database that was previously shut down inconsistently. Oracle Database performs instance recovery automatically in the following situations: The database opens for the first time after the failure of a single-instance database or all instances of an Oracle RAC database. This form of instance recovery is also called crash recovery. Oracle Database recovers the online redo threads of the terminated instances together. ...

July 19, 2022 · 2 min · jiezi

关于oracle:oracle集群概念详解

集群术语须知服务硬件:指提供计算服务的硬件,比方 PC 机、PC 服务器。服务实体:服务实体通常指服务软体和服务硬体。节点(NODE):运行 Heartbeat 过程的一个独立主机称为节点,节点是 HA 的外围组成部分,每个节点上运行着操作系统和Heartbeat 软件服务。资源(RESOURCE):资源是一个节点能够管制的实体,当节点产生故障时,这些资源可能被其余节点接管。如: 磁盘分区、文件系统、IP 地址、应用程序服务、共享存储。事件(EVENT):事件也就是集群中可能产生的事件,例如节点系统故障、网络连通故障、网卡故障和应用程序故障等。这些事件都会导致节点的资源产生转移,HA 的测试也是基于这些事件进行的。什么是集群集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点(node)。集群提供了以下要害的个性。 可扩展性。集群的性能不限于繁多的服务实体,新的服务实体能够动静的退出到集群,从而加强集群的性能。高可用性。集群通过服务实体冗余使客户端免于轻易遭逢到“out of service”正告。当一台节点服务器产生故障的时候,这台服务器上所运行的应用程序将在另一节点服务器上被主动接管。打消单点故障对于加强数据可用性、可达性和可靠性是十分重要的。负载平衡。负载平衡能把工作比拟平均的散布到集群环境下的计算和网络资源,以便进步数据吞吐量。谬误复原。如果集群中的某一台服务器因为故障或者保护须要而无奈应用,资源和应用程序将转移到可用的集群节点上。这种因为某个节点中的资源不能工作,另一个可用节点中的资源可能通明的接管并持续实现工作的过程叫做谬误复原。分布式与集群的分割与区别如下: 分布式是指将不同的业务散布在不同的中央。而集群指的是将几台服务器集中在一起,实现同一业务。分布式的每一个节点,都能够做集群,而集群并不一定就是分布式的。而分布式,从广义上了解,也与集群差不多,然而它的组织比拟涣散,不像集群,有肯定组织性,一台服务器宕了,其余的服务器能够顶上来。分布式的每一个节点,都实现不同的业务,一个节点宕了,这个业务就不可拜访了。集群次要分成三大类: HA:高可用集群(High Availability Cluster)。LBC:负载平衡集群/负载平衡零碎(Load Balance Cluster)HPC:科学计算集群(High Performance Computing Cluster)/高性能计算(High Performance Computing)集群。为什么搭建数据库集群随着经济的高速倒退,企业规模的迅猛扩张,企业用户的数量、数据量的爆炸式增长,对数据库提出了严厉的考验。对于所有的数据库而言,除了记录正确的处理结果之外,还面临着以下几方面的挑战。 如何进步处理速度,实现数据库的平衡负载。如何保障数据库的可用性、数据安全性、以及如何实现数据集群可扩性。怎么综合解决这些问题成为泛滥企业关注的焦点。在数据库上,组建集群也是同样的情理,次要有以下几个起因: 随同着企业的成长,业务量进步,数据库的访问量和数据量快速增长,其解决能力和计算速度也相应增大,使得繁多的设施根本无法承当。在以上状况下,若扔掉现有设施,做大量的硬件降级,势必造成现有资源的节约,而且下一次业务量晋升时,又将面临再一次硬件降级的高额投入。于是,人们心愿通过几个中小型服务器组建集群,实现数据库的负载平衡及继续扩大;在须要更高数据库处理速度时,只有简略的减少数据库服务器就能够失去扩大。数据库作为信息系统的外围,起着十分重要的作用,繁多设施根本无法保证系统的下继续运行,若产生系统故障,将重大影响零碎的失常运行,甚至带来微小的经济损失。于是,人们心愿通过组建数据库集群,实现数据库的高可用,当某节点产生故障时,零碎会自动检测并转移故障节点的利用,保障数据库的继续工作。企业的数据库保留着企业的重要信息,一些外围数据甚至关系着企业的命根子,繁多设施根本无法保障数据库的安全性,一旦产生失落,很难再找回来。于是,人们心愿通过组建数据库集群,实现数据集的冗余,通过备份数据来保障安全性。数据库集群的分类数据库集群技术是将多台服务器联结起来组成集群来实现综合性能优于单个大型服务器的技术,这种技术岂但能满足利用的须要,而且大幅度的节约了投资老本。数据库集群技术分属两类体系:基于数据库引擎的集群技术和基于数据库网关(中间件)的集群技术。在数据库集群产品方面,其中次要包含基于数据库引擎的集群技术的 Oracle RAC、Microsoft MSCS、IBM DB2UDB、Sybase ASE,以及基于数据库网关(中间件)的集群技术的 ICX-UDS 等产品。 一般来讲,数据库集群软件偏重的方向和试图解决的问题划分为三大类: 负载平衡集群(LOAD BALANCE CLUSTER,LBC)侧重于数据库的横向扩大,晋升数据库的性能。高可用性集群(HIGH AVAILABILITY CLUSTER,HAC)偏重保障数据库利用继续一直。大部分的数据库集群偏重与此。高安全性集群(HIGH SECURITY CLUSTER,HSC)侧重于容灾。只有 ORACLE RAC 能实现以上三方面 可扩大的分布式数据库架构ORACLE RAC其架构的最大特点是共享存储架构(SHARED-STORAGE),整个 RAC 集群是建设在一个共享的存储设备之上的,节点之间采纳高速网络互联。OracleRAC 提供了十分好的高可用个性,比方负载平衡和利用通明切块(TAF),其最大的劣势在于对利用齐全通明,利用无需批改便可切换到RAC 集群。然而RAC 的可扩大能力无限,首先因为整个集群都依赖于底层的共享存储,所以共享存储的 I/O 能力和可用性决定了整个集群的能够提供的能力,对于 I/O 密集型的利用,这样的机制决定后续扩容只能是 Scale up(向上扩大)类型,对于硬件老本、开发人员的要求、保护老本都绝对比拟高。Oracle显然也意识到了这个问题,在 Oracle 的 MAA(Maximum Availability Architecture)架构中,采纳 ASM 来整合多个存储设备的能力,使得 RAC 底层的共享存储设备具备线性扩大的能力,整个集群不再依赖于大型存储的解决能力和可用性。 RAC 的另外一个问题是,随着节点数的一直减少,节点间通信的老本也会随之减少,当到某个限度时,减少节点可能不会再带来性能上的进步,甚至可能造成性能降落。这个问题的次要起因是 Oracle RAC 对利用通明,利用能够连贯集群中的任意节点进行解决,当不同节点上的利用争用资源时,RAC 节点间的通信开销会重大影响集群的解决能力。所以对于应用 ORACLE RAC 有以下两个倡议: ...

July 13, 2022 · 1 min · jiezi

关于oracle:自学oracle你需要了解的所有知识大放出一

1.Oracle体系结构     说到Oracle,Oracle是什么呢?Oracle DataBase是一款关系型数据库管理系统,同类的产品还有mySql,sqlServer等,接触过Mysql,SQL Server的人可能下意思就认为不就一个关系型数据库么?其实不然,很多时候咱们会把那个承载咱们外围数据的零碎抽象地成为数据库服务器,但从严格意义上来讲Oracle DataBase是由两个局部组成:      实例:实例是数据库启动时初始化的一组过程和内存构造 。实例是随同着数据库的启动而存在的,它的存在是为了高效拜访和解决数据库中的文件,以及保障故障时数据零失落。      数据库:数据库则指的是用户存储数据的一些物理文件。     正是如此,才会有启动和敞开实例、加载卸载数据库这些术语。从实例和数据库的概念上来看,咱们能晓得,实例临时的,它不过是一组逻辑划分的内存构造和过程构造,它会随着数据库的敞开而隐没,而数据库它其实就是一堆物理文件(管制文件,数据文件,日志文件等等),它是永恒存在的(除非磁盘损坏)。数据库和实例通常是一对一的,这种构造咱们称为单实例体系结构;当然还有一些简单的分布式的构造,一个数据库能够对多个实例,像Oracle的RAC。     如果下面那些让你对Oracle有了一点通俗的认知,那么请看下图:  \如你所见,以两头空白的为线,上面粉嫩嫩的局部便是Oracle实例局部,上面的便是数据库局部,那接下来咱们便一一进行分析。 2.Oracle物理存储构造顾名思义,物理存储构造就是一些能看得见,理论存在的货色,大白话就是一群文件组成了Oracle的物理存储构造。如图  \黄黄的局部代表着Oracle的外围组成,别离是数据文件、管制文件以及重做日志文件。除此之外,物理存储构造还包含着一些其余文件,例如参数文件、密码文件以及归档日志文件等等。上面将次要介绍这些文件。 数据文件(Data files)\数据文件是指存储数据库中数据的文件,这些“xxxx.dbf”存储着零碎数据、数据字典数据、索引数据以及用户存储的数据,所以这部分也是数据库最外围的局部。数据文件大小是灵便的,能够通过设置让它主动扩大,防止了数据量过大然而数据文件空间无限这种情况;数据文件是专属于一个数据库的,也专属于一个表空间的,然而一个表空间却能够领有多个数据文件。如果用户读取的数据不在缓冲区内,便会从数据文件中将绝对应的数据放到缓冲区中,再进行读取。这部分内容会在之后详细分析。管制文件(Control files)\管制文件是一个很小的二进制文件,这些“xxx.CTL”中寄存的数据库的”物理构造信息”,这些物理构造信息包含:数据库的名字、数据文件和联机日志文件的名字及地位.、创立数据库时的工夫戳。数据库在启动的时候须要访问控制文件,从中读取数据文件、日志文件的信息;随着Oracle的运行,数据库将不断更新管制文件;绝对应的一旦管制文件损坏,数据库便会产生运行故障。所以为了更好的爱护数据库,咱们能够镜像管制文件,特地是在数据库构造发生变化时,要对其进行备份,放弃管制文件的一致性。重做日志文件(Redo Log files)\重做日志文件用于记录数据库所有批改信息 的文件,小名叫做日志文件,这些“.log”文件既能够保障数据库的平安,又能够实现数据库的备份和复原。为了避免数据出现意外失落,oracle也容许镜像日志文件,一个日志与其镜像进去的文件形成一个日志文件组,然而镜像文件数量不能超过5个。正所谓所有的鸡蛋不要放在一个篮子里,同一组的文件最好保留在不同的磁盘中,避免物理损坏造成不必要的麻烦。参数文件(Parameter file)\参数文件记录了Oracle数据库的根本参数信息,次要包含数据库名、管制文件所在门路等。参数文件包含文本参数文件(PFILE)和服务器参数文件(SPFILE),前者为init.ora,后者为spfile.ora或spfile.ora的二进制文件。在数据库启动的时候就会读取参数文件,而后依据参数文件中的参数来调配SGA并启动一系列的后盾过程。归档日志文件(Archived Log files)\归档日志文件用来对写满的日志文件进行保留复制。其目标是为了长期保留日志以便于复原。3.Oracle逻辑存储构造在oracle数据库中,对数据库操作会波及逻辑存储构造,它是从逻辑角度剖析数据库的形成,形容的是数据库外部数据的组织与治理形式,与操作系统没有关系。\如图,能够显著的看出数据库逻辑构造次要包含表空间、段、区和数据块,所有的构造都是一对多的关系,一个数据库能够领有多个表空间,一个表空间领有多个段等等。   表空间表空间是Oracle最大的逻辑存储构造,与物理上的数据文件绝对应,然而一个表空间能够领有多个数据文件,这里就不一一赘述了。段 数据段:用来存储表中所有数据;在Oracle中,每当用户创立一个表时,零碎将主动在默认表空间里调配一个与表名称雷同的数据段,不便存储该表的所有数据。索引段:用来存储表中索引的所有数据;在Oracle中,每当用户创立索引时,零碎将主动在默认表空间创立一个与索引名称雷同的索引段,不便存储该索引的所有数据。长期段: 用于存储表排序或汇总时产生的长期数据;每当用户:长期表空间进行Order by 进行排列或汇总时,零碎在该用户的长期表空间主动创立一个长期段,在操作完结时主动打消。LOB段:LOB用来存储表中大型数据对象,例如CLOB与BLOB回退段:用于存储用户数据被批改之前的地位和值;当与要对用户的数据进行回退操作时,就要应用回退段。段是一组盘区,它是一个独立的逻辑存储构造,用于存储具备独立存储构造对象的全副数据。段个别是数据库终端用户解决最小的存储单位,当段的数据区已满,Oracle为其调配另一个数据区,段的数据区在磁盘上可能是不间断的。依据段所存储的特色,可将其分为5种类型:区区是Oracle存储调配的最小单位,它是由一个或多个数据块组成的。一个或多个区组成一个段,也就是说段的大小都是由区的个数来决定。当一个段的空间应用完之后,Oracle会主动为该字段调配成一个新的区。 块块是用来治理存储空间的最根本的单位,也是最小的逻辑存储单位。块的大小由初始化参数db_block_size来决定,不同的Oracle版本的大小是不同的,然而数据库一旦创立,其大小便不可更改。尽管每个数据块能够存储不同类型的数据,然而每个数据块都具备一个雷同的构造,如图:\   1.块头\蕴含了该数据块个别的属性信息,如数据块的物理地址、所属段类型等\2.表目录\如果数据块中存储的数据时某个表的数据,则这里寄存该表的信息\3.行目录\用来存储数据块中无效的行信息\4.空余空间\指数据块还没有应用的存储空间\5.行空间\表或者索引的数据存储在行空间中,所以行空间是数据块中曾经应用的存储空间。 所以从形容就可以看进去,一个数据块的容量其实就是行空间与空余空间的容量总和。 4.Oracle实例内存构造与绝对应的后盾过程如图所示,Oracle实例构造分为左右两局部,一个叫做SGA,称作零碎全局区;一个叫做PGA,称作程序全局区。SGA是零碎调配的一组共享的内存构造,用来实现对数据库数据的治理和操作;PGA是用户会话专有的内存区域,每个服务过程、后盾过程都有一个PGA。其实从上图能够看出,实例和数据库原本是八竿子打不到一起的两个货色,然而正好两头进去一个媒婆:实例的后盾过程,也就是图中示例局部椭圆形一块一块的那个将两者沟通到了一起。上面先对SGA进行剖析形容,其中也会波及到绝对应的过程也将进行剖析:\如图:   数据库缓冲区缓存(database buffer cache)-database buffer cache又叫buffer cache,它用来存储从数据文件中读取到的数据块的镜像。在这块区域Oracle将进行执行sql的工作,所以当更新数据时,用户会话先会扫描缓冲区,不会去间接在磁盘上操作,这样就会缩小磁盘的IO,从而大幅度晋升零碎的性能。\举个例子\select user_id,date from customer where user——id>10;\\当oracle在执行这个SQL语句的时候,首先由对应的用户过程发送给服务器,监听收到申请后,便创立一个绝对应的服务器过程,而后该过程便会先扫描缓冲区是否存在user_id>10 的数据块,如果存在,相干信息便会传到PGA中解决,最初显示给用户;如果没有命中,该过程便会将磁盘上对应的数据块复制到缓冲区中,再执行残余的操作。\然而有些人会想,如果始终查缓存中不存在的数据块,那磁盘上的数据块不全都要复制到缓冲区了么,那不是更快?其实当你把数据块复制到缓冲区中,无形中减少了缓冲区的负荷,而缓冲区的存在意义便是进步零碎的性能,所以便会用LRU这个算法治理着缓冲区内存空间,使其在维持在正当的区间内领有最高的性能。\在执行一些DML语句的状况下,例如update一个XXX,缓冲区也是如上操作,先扫描缓冲区,缓存命中,便间接更新;缓存没命中,便把磁盘绝对应的数据块复制到缓冲区进行更新。这时候问题就来了,更新完缓冲区数据,磁盘数据不是没变么?\这个时候就轮到关键人物出场了:DBWn。 DBWnDBWn又称数据库写过程,他负责的就是将更新完的缓冲区数据写入磁盘中。也就是数据库中的数据文件中。然而这个过程是公认的懒过程,它不是每当缓冲区写入数据的时候便会主动的将其写入磁盘中当上面这些状况产生时,这个懒过程将会执行写的工作: 没有能够写入的缓存空间脏缓存达到限度(会导致搜寻工夫过长)1/4满最晚三秒钟:最晚三秒会执行一次写入遇到检查点:遇到这个checkpoint便会执行写程序。表空间热备份的时候表空间离线、只读状态执行Drop操作的时候\从以上这些机会更能明确的看出,DBWn不是随时随地的执行,并且跟commit操作没任何关系。其实这种懒过程更是能体现缓冲区存在的意义,缩小磁盘IO对系统的压力,所以“懒”还是有“懒”的益处的。\如果在DBWn在未执行的时候,大量的脏数据还在缓冲区并没有写入磁盘的时候,忽然天降横祸,打雷断电了,数据就丢了?这时候就要引出重做日志和其绝对应的后盾过程来解决这个问题。日志缓冲区(Redo log buffer)当咱们在执行一些DML操作时,产生的变更向量会写到重做日志文件中去,一旦下面提到的状况产生,例如打雷啊、断电啊使零碎忽然宕掉,database buffer cache中的脏数据还没等到DBWn将它写入磁盘的时候;当零碎重新启动,这时候就会有一个实例复原的过程,而重做日志中的那些变更向量便会发挥作用,使数据库放弃与宕机前的一瞬间的数据统一;罕用的一些备份复原操作原理和这个一样:提取备份集—>利用重做日志文件中的变更记录。\日志文件用于记录对数据库的更改,所以为了缩小磁盘IO,缩小用户等待时间,数据库的批改操作信息要先写到日志缓冲区中,当日志缓冲区达到肯定的限度时,会被日志写入过程LGWR写入磁盘中。绝对database buffer cache来说,这个日志缓冲区对数据库的性能影响较小。 LGWR commit写入日志缓冲区占用率1/3DBWn要写入脏缓冲区前LGWR又称作日志写入器。 顾名思义,日志写入器就是将日志缓冲区的脏数据写进磁盘中,绝对于DBWn这种“懒”过程,LGWR可是绝对“勤快”的多数据库缓冲区缓存和日志缓冲区都是为了进步性能,防止频繁IO而存在的。日志缓冲区相比数据库缓冲区缓存要小的多,并且不能进行主动治理,对于日志缓冲区的批改须要重启实例,数据库缓冲区缓存可进行主动治理。作用在数据库缓冲区缓存上的DBWn过程,为了防止频繁的磁盘IO导致系统性能降落,会尽可能少地执行写入,且DBWn的写入和commit操作没有任何关系;   而作用在日志缓冲区上的LGWR过程,则会十分踊跃地进行写入,个别状况下,它简直是实时地将重做日志记录转储到磁盘中去。LGWR是Oracle体系结构中最大的瓶颈之一。DML的速度不可能超过LGWR将变更向量写入磁盘的速度。 共享池共享池是最简单的SGA构造,它有许多子结构,咱们来看看常见的几个共享池组件: 库缓存(library cache):Oracle引入库缓存的目标是共享SQL和PL/SQL代码。服务器过程执行SQL和PL/SQL时,首先会进入库缓存查找是否有雷同的SQL,如果有,就不再进行后续的编译解决,间接应用曾经编译的SQL和执行打算。Oracle通过比拟两条SQL语句的注释来确定两条SQL是否雷同,所以如果想共享SQL语句,必须应用绑定变量的形式。如:select from emp where sal > 100和select from emp where sal > 101是不同的,而应用绑定变量时,即便v_sal的值不同,Oracle认为select * from emp where sal > &v_sal也是雷同的。Oracle应用LRU队列和算法来治理库缓存,最近应用过的SQL会放在队首,长时间没有应用的SQL放在队尾,当库缓存须要内存空间而又没有闲暇的内存空间时,队尾内存中的SQL会被革除,放入最新的SQL,并且队首会指向次段内存。Oracle没有提供间接批改库缓存大小的办法,只能通过批改共享池的大小来间接批改库高速缓存的大小。 ...

July 11, 2022 · 1 min · jiezi

关于oracle:从Oracle日志解析学习数据库内核原理

前言不论现阶段美国和中国相持到何种水平,不论桀傲不驯拉里.埃里森如何不看好中国,Oracle 仍是数据库中的一枝独秀。然而,他山之石可以攻玉,多个国产数据库在关键技术攻关方面的整体程度也已达到国内先进。 国内越来越多的 Oracle 数据库开始下线,迁徙到开源或者国产数据上,o2k 反对实时增量的将 Oracle 数据库增量变动抽取进去,助力国产化数据库无缝接管 Oracle。 笔者作为数据库内核的负责人参加实现了 o2k 来解析 Oracle 日志,并于 2022 年 2 月 15 号把它凋谢进去给社区收费应用,期间经验了各种迷茫,取得了泛滥大佬的领导,最终总算是交出了一份还算不错的试卷。 作为一个 DBA 兼开发人员,在整个 o2k 的实现过程中,对于 Oracle 数据库的数据库实践和工程能力学习了很多,也进一步对数据库原理有了进一步理解。 借助 Oracle 的设计理念和实现,咱们也看看是否能对新一代的数据库从业者有肯定的帮忙和借鉴作用。 国内软件因为美国的打压,数据库作为根底软件赢来了一个难得的蓬勃发展期。 曾几何时,数据库从业人员只是公司 IT 团队->运维团队里的一个小小部门,而今一个能领导开发正确应用数据库,抉择数据库来适配业务来适应业务的数据架构师供不应求。 如果能把握着数据库原理,甚至能被动革新数据库适配相干利用场景的人才年薪至多百万。 作为计算机皇冠上的其中一粒明珠,数据库上承业务在线离线之责,下接硬件内核之妙,看到越来越多的人才退出数据库及数据库内核队伍,不胜快慰! 本系列文章中咱们将由浅入深以 Oracle 日志解析遇到的重重阻塞为例,来介绍在数据库中常见,而又要害的概念,理解数据库设计思路及工程实现中须要留神的事项。 本文以浅为主,咱们先简略介绍一下数据库的背景和 Oracle 日志解析的基础知识 前置常识理解数据库日志相似于银行账户零碎一样,张三存入 100 块钱会'先'被记录为'张三减少 100'的流水账,而后再把张三的账户从 1000 块批改为 1100 块。数据库为了保障原子性和长久化,也会'先'在 redo 日志中记录一笔或者多笔 redo record,而后再批改数据库理论的行记录留神,这里的“批改账户/批改行记录”都是在“写流水账/写日志”之后实现的。也就是说 redo 先于“数据写入”,这也就是驰名的数据库 write-ahead logging (WAL) 。Oracle 写数据库日志采纳的是物理日志形式,记录的是外部数据块的变动;MySQL 在 Server 层的 binlog 是逻辑日志,记录的是逻辑行数据的变动。所以对 Oracle 的日志解析不仅须要了解日志自身 filespace、redo record,change vector 的变动,还须要了解 Oracle 外部数据存储的格局。 ...

July 8, 2022 · 15 min · jiezi

关于oracle:查询表空间使用率以及部分基础命令

一、查看表所占空间大小 --1、查看用户表、索引、分区表占用空间 select segment_name, sum(bytes)/1024/1024 as Mbytes from user_segments group by segment_name order by Mbytes desc;--2、表占用空间: select segment_name, sum(bytes)/1024/1024 as Mbytes from user_segments where segment_type='TABLE' group by segment_name order by Mbytes desc;--3、索引占用空间: select segment_name ,sum(bytes)/1024/1024 as Mbytes from user_segments where segment_type ='INDEX' group by segment_name order by Mbytes desc;--4、分区表TABLE PARTITION占用空间: select segment_name,sum(bytes)/1024/1024 as Mbytes from user_segments where segment_type='TABLE PARTITION' group by segment_name order by Mbytes desc;1、查问各个表空间使用率SELECT a.tablespace_name "表空间名", total/1024/1024 "表空间大小单位M", free/1024/1024 "表空间残余大小单位M", (total - free)/1024/1024 "表空间应用大小单位M", Round((total - free) / total, 4) * 100 "使用率 [[%]]"FROM (SELECT tablespace_name,Sum(bytes) free FROM DBA_FREE_SPACE GROUP BY tablespace_name) a, (SELECT tablespace_name, Sum(bytes) total FROM DBA_DATA_FILES GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name;2、删除对应多的表数据 ...

June 22, 2022 · 1 min · jiezi

关于oracle:Oracle-正式启动-Leyden-项目在-Java-平台引入静态映像以解决运行缓慢等问题

近日,Oracle Java 平台组首席架构师 Mark Reinhold 在社交媒体发文正式发表启动 “Leyden”我的项目。据悉,该我的项目已取得批准,将通过在 Java 平台上引入“动态映像”来缓解启动和性能迟缓的问题,旨在减速 Java 业务的创立。 据理解,“Leyden”我的项目打算最早于 2020 年 5 月份左右提出,至今曾经被探讨了 2 年多。 过后,Mark Reinhold 在一份 Java 邮件列表中发表了一篇对于他提议和领导的工作的帖子,他示意“这项工作被称为“Leyden”我的项目,将通过在 Java 平台和 Java 开发工具包(JDK)中引入“动态映像”的概念来解决这些痛点。 Leyden 我的项目引入“动态映像”“Leyden”我的项目里引入的所谓的“动态映像”,是一款独立于应用程序的程序,它派生自一个运行该应用程序的应用程序,而非其余应用程序。 动态映像绝对于它能够加载的类来说是一个“关闭的世界”:在运行时,不能从映像内部加载类,也不能动态创建类。关闭世界的束缚严格限度了 Java 的天然动态性,特地是在运行时反射和加载类的性能方面,许多现有的 Java 框架和库都依赖这些性能。 以上两个束缚不仅能够缩小图像的大小及其启动工夫,同时这些束缚还“容许进行踊跃的提前编译(Ahead-of-time compilation),从而缩短图像达到峰值性能的工夫,提前编译是将高级编程语言(如 C 或 C++)编译老本机机器代码,以便生成的二进制文件能够本机执行的行为。 Leyden 我的项目将减速 Java 的优化工作据介绍,Leyden 是一个基于过来我的项目根底上新建设的我的项目,包含 GNU 编译器 for Java 和 GraalVM 的本机映像性能。GraalVM 是一种高性能运行时,针对各种语言(如 Java 和 JVM 语言、JavaScript、Ruby、Python 等)进行了性能优化,并针对多语言或多语言应用程序实现了互操作性。 因为 Leyden 我的项目的灵感来自 GraalVM,这两个我的项目有着独特的组成部分,它们可能会(也可能不会)进入支流 Java 标准。然而,因为目前不足进一步的信息,一些观察家认为这两个我的项目是交错在一起的。 早在 2020 年 Leyden 我的项目刚提出的时候,Longmeado Omdia 分析师 Bradley Shimmin 就评估称:“Leyden 我的项目仿佛应该成为 GraalVM 我的项目的一部分,我置信作者心愿这样做,因为它实现了 GraalVM 反对的雷同指标,除了这里,他们提议创立一个针对单个应用程序的极其精简的运行时环境。”。 ...

May 26, 2022 · 1 min · jiezi

关于oracle:Oracle分组取最大值

需要该SQL是一个子SQL,须要查问出某个人所有过往履历中职务最高的 SELECT a."EMP_ID",a."CADRE_LEVEL" FROM (SELECT ROW_NUMBER() OVER(PARTITION BY EMP_ID ORDER BY CADRE_LEVEL DESC) rn, P_RESUME.* FROM P_RESUME) a where a.rn=1

May 11, 2022 · 1 min · jiezi

关于oracle:无需编程基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful-API接口

无需编程,基于甲骨文oracle数据库零代码生成CRUD增删改查RESTful API接口回顾通过之前一篇文章 无需编程,基于PostgreSQL零代码生成CRUD增删改查RESTful API接口 的介绍,采纳形象工厂设计模式,曾经反对了大象数据库PostgreSQL。之前通过字符串拼接生成DDL SQL语句,比拟繁琐。本文开始,引入了FreeMarker模版引擎,通过配置模版实现创立和批改物理表构造SQL语句,简化了大量代码,进步了效率,并且通过配置oracle数据库SQL模版,基于oracle数据库,零代码实现crud增删改查。 FreeMarker简介FreeMarker是一款模板引擎: 即一种基于模板和要扭转的数据,并用来生成输入文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员能够嵌入他们所开发产品的组件。模板编写为FreeMarker Template Language (FTL)。它是简略的,专用的语言, 不是像PHP那样成熟的编程语言。 那就意味着要筹备数据在实在编程语言中来显示,比方数据库查问和业务运算,之后模板显示曾经筹备好的数据。在模板中,你能够专一于如何展示数据,而在模板之外能够专一于要展现什么数据。 UI界面通过产品对象为例,无需编程,基于Oracle数据库,通过配置零代码实现CRUD增删改查RESTful API接口和治理UI。 创立产品 编辑产品数据 产品数据列表 通过Oracle SQL Developer查问Oracle数据 定义元数据对象模型元数据表ca_meta_table元数据表ca_meta_table,用于记录表的根本信息。 TableEntity对象TableEntity为“元数据表”对象,和ca_meta_table字段对应 public class TableEntity { private Long id; private String name; private String caption; private String description; private Timestamp createdDate; private Timestamp lastModifiedDate; private String pluralName; private String tableName; private EngineEnum engine; private Boolean createPhysicalTable; private Boolean reverse; private Boolean systemable; private Boolean readOnly; private List<ColumnEntity> columnEntityList; private List<IndexEntity> indexEntityList;}元数据列ca_meta_column元数据列ca_meta_column,用于记录表字段信息,比方类型,长度,默认值等。 ...

April 8, 2022 · 4 min · jiezi

关于oracle:Oracle-Clob-类型检索比较

明天做了几个Clob类型数据的检索比拟,后果如下: Like 形式检索 set timing on set lin 150 pages 999 set autotrace traceonly select * from lob_tbl where upper(c) LIKE '%2022-04-01 02:05:31.709329%'; 経過: 00:00:02.24 実行計画 ---------------------------------------------------------- Plan hash value: 1723626472 ----------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ----------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 4017 | 3 (0)| 00:00:01 | |* 1 | TABLE ACCESS FULL| LOB_TBL | 1 | 4017 | 3 (0)| 00:00:01 | ----------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter(UPPER("C") LIKE '%2022-04-01 02:05:31.709329%') Note ----- - dynamic sampling used for this statement (level=2) 統計 ---------------------------------------------------------- 10 recursive calls 335256 db block gets 128501 consistent gets 28998 physical reads 124 redo size 2368 bytes sent via SQL*Net to client 1819 bytes received via SQL*Net from client 7 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed dbms_lob.instr 形式检索 ...

April 8, 2022 · 3 min · jiezi

关于oracle:再论ORACLE上云通用技术方案

今天下午与ORACLE大咖探讨了ORACLE上云的通用技术计划,感觉播种很大,跟大家分享一下。对于ORACLE上云,之前写过一篇文章从云端许可的角度进行了探讨,明天咱们在不思考ORACLE云端许可,反复一遍,是不思考ORACLE云端许可的前提下,提出了3个通用的解决方案,现别离论述如下:一、基于虚拟机的双活主备模式将Oracle部署在虚拟机上,挂载高速块存储,作为主实例,同时再部署一套雷同的虚拟机和块存储,作为备实例,两者之间通过ORACLE同步软件同步数据,如下图所示: 这外面要思考虚拟化带来较高的性能损耗,能够通过加大内存和CPU数量,采纳SSD超高速盘来补救虚拟化所带来的性能损耗。当主服务器不可用时,备份服务器能够迅速切换到主实例的模式运行,这里可能会存在业务中断的状况。 二、基于共享云硬盘的高可用RAC模式如果要确保高可用,须要采纳ORACLE RAC模式,此时能够采纳两个实例挂载共享云硬盘的形式,同时思考到云硬盘可能存在的不可用的状况,就要再起一个单实例的备用实例,如下图所示: 这里的共享硬盘是构建RAC的核心部件。近期咱们会基于天翼云来验证此计划的性能和稳定性,届时咱们会提供测试报告给大家分享。三、基于IB SAN的高性能RAC模式这种架构采纳2台冗余的IB网络设备和3台物理机构建IB SAN存储网络,以此取得比传统的FC SAN架构具备更高的性能,更低价格的劣势,如下图所示: 具体阐明如下:1、传统的FC SAN支流带宽为4和8Gb/s,特点是性能稳固,采纳IB网络带宽最高能达到100Gb/S,远高于FC SAN网络的带宽,其提早小于5s。2、共享存储采纳3台物理机,挂载SSD超高速盘,采纳高性能SRP(SCSI RDMA protocol)(IB SAN的一种协定)协定,把SCSI协定的命令和数据通过RDMA的形式跑到IB这种高速网络上,从而构建更高性能的SAN存储网络。图中ORACLE实例能够是虚拟机也能够是物理机,zData是一家采纳SRP技术的IB SAN共享存储系统产品,这家产品也反对iscsi的IP网络,不想再画图,就间接借用了厂家的架构图。

April 2, 2022 · 1 min · jiezi

关于oracle:甲骨文开始审核-Java-许可问题500-强企业连夜卸载-Oracle-JDK

近日,有外媒报道称,甲骨文(Oracle)已开始将 Java 纳入其软件许可审核中,旨在“抓出”那些处于不合规边缘的企业客户,以此来推动企业付费。据理解,这是业内为晋升付费率比拟罕用的策略。 据报道,2019 年 4 月甲骨文首次为其商业 Java 平台 Standard Edition(Java SE)引入了两种新的许可模式,并开始对以前收费的 Java 收取许可费。这就要求用户得先购买其商业 Java SE 产品的年度订阅,能力取得补丁和更新。 2021 年 9 月,甲骨文公布了 Java 17 之后,便又开始提供仅针对该迭代的三年的季度收费更新许可证,而不是像 Java 7、8 和 11 这样的晚期版本。 到目前为止,甲骨文曾经通过其销售团队采取了一种“软办法”来审核其 Java 许可问题。但今年年初以来,越来越多的软件开发工具包一直被纳入甲骨文的官网审核中,因而也引发了许多企业用户的担心。 往年早些时候,软件资产治理公司 Anglepoint 就示意,他们曾经发现了来自甲骨文的官网 Java 审核。 Palisade Compliance 的创始人兼 CEO Craig Guarente 也示意,他的团队也曾经开始看到 Oracle License management services(LMS)专门要求提供Java 信息的函件,但一些客户还没有筹备好理解他们的许可合规性。 Craig Guarente 走漏称:“业内有不少困惑,大家都有一个误会:应用旧版本的 Java 不须要许可证。事实上,即便你应用旧版本,如果你从甲骨文网站下载补丁和更新,那么你仍旧须要许可证来反对。而一些企业客户都在放心他们这是在‘开大支票’”。 除了下面的进度,报道称当初 Oracle 还在数据库等其余畛域应用审核来拜访无关 Java 应用状况的信息。比方那些声称领有 5000 个数据库许可证的公司可能会受到甲骨文 Java 销售代表的敲门声 —— “咱们据说你这边用了 5000 个 CPU:但咱们看不到 Java 许可证。你能够在一周外在不同畛域提供 Oracle 信息”。 ...

March 30, 2022 · 1 min · jiezi

关于oracle:基于Oracle的用户行为数据分析

一、剖析背景随着互联网时代下电商行业的一直倒退,电商市场日趋饱和,各电商平台的竞争进入了白热化阶段,针对用户行为的数据分析由此成为平台经营的重中之重。本文基于淘宝用户行为数据集,进行隐式反馈问题的钻研,从用户行为中获取用户需要,剖析用户情感,旨在用数据驱动产品优化。 二、数据起源本文应用的数据来源于阿里云天池淘宝用户行为数据集 该数据集蕴含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包含点击、购买、加购、喜爱)。数据集的组织模式和MovieLens-20M相似,即数据集的每一行示意一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和工夫戳组成,并以逗号分隔。对于数据集中每一列的详细描述如下: 列名称阐明用户ID整数类型,序列化后的用户ID商品ID整数类型,序列化后的商品ID商品类目ID整数类型,序列化后的商品所属类目ID行为类型字符串,枚举类型,包含('pv', 'buy', 'cart', 'fav')工夫戳行为产生的工夫戳其中,4中行为类型别离代表: 行为类型阐明pv商品详情页pv,等价于点击buy商品购买cart将商品退出购物车fav珍藏商品数据集蕴含近百万名用户(987994),波及超416万件商品(4162024),近万商品类别(9439),以及超1亿条用户行为(100150807)。 注:此局部内容援用自数据集介绍信息 三、剖析指标本文目标是通过对淘宝用户行为数据进行剖析,发现用户的生产偏好,从而更好的领导商家进行获客和盈利,实现精细化经营。剖析思路如下: 四、数据荡涤1. 数据导入 将下载的.csv格式文件通过PL/SQL导入到数据库中,察看可得源数据File Data短少列名,在此为数据增加字段名称,并与提前创立好的表格USER_BEHAVIOR相匹配。 此处应留神将表格的工夫戳TIME_STAMP类型设置为varchar,该数据是指从1970年01月01日00时00秒到用户行为产生那一秒的总秒数。在数据导入后,为不便接下来的剖析,利用SQL语句进行解决,别离转换成工夫格局的日期与准确时分秒,并存储在CREATE_DATE、CREATE_TIME两个栏位中。此时查问表中数据,展现如下图: 2. 反复值解决 在数据导入阶段,曾经疏忽掉了反复的数据,因而并不存在反复值。 3. 缺失值解决 利用SQL语句查问表中各字段值为空的数据,执行后结果显示为0条,因而不存在缺失值。 4. 异样值解决 依据数据集阐明,该表中数据均应处于2017年11月25日至2017年12月3日之间,利用SQL语句查问表中CREATE_DATE字段值在该范畴之外的数据,执行后结果显示为257110条,将这些异样数据删除。 5. 数据整合 通过以上几步的数据处理,失去最终用于剖析的数据集,利用SQL语句进行初步的统计,可知最新的数据集有26061808条数据,蕴含257134名用户在9天工夫里的4种行为类型(点击,加购物车,珍藏,购买),其中共波及2467928件商品与8713种商品类型。 五、用户剖析1. 活跃度剖析 别离从日期和工夫两个方向,获取PV、UV指标进行活跃度剖析。利用SQL语句,筛选得出所需的PV、UV值,并利用echarts将数据以图表模式展示。 (1) 日期 思考到日期的周期性,将数据每7天分为1个周期,以便比照剖析。 这9天中,12月2日与3日的PV和UV值相比于前7天,有显著的大幅度上涨。思考到这两日为周末,用户的空闲工夫较比工作日更多,应用人数会有肯定的减少。进一步剖析发现,同为周末的11月25日与26日,虽比照同一周期内工作日的PV、UV有轻微上涨,但仍远不迭12月2日与3日。因而认为12月2-3日的上涨可能与过后的营销流动无关,如店铺双十二的预热流动和商品预售。 (2) 工夫 思考到工夫的周期性,将数据依照24h制进行筛选,以便比照剖析。先利用SQL语句将工夫格式化,取得用户行为产生工夫的准确小时值,再依据小时进行PV、UV值的计算。 PV的平均值为1085908.67,UV的平均值为116351.88,在图片中以红色程度虚线进行标注。为不便进一步剖析,依据数据别离计算出各时间段较前一小时的环比增长速度如下图。 ① 察看PV、UV值的柱形图,发现9点当前的PV和UV均在各自的平均值以上,可知绝大多数用户的睡眠工夫完结在早9点之前,并在此之后开始应用APP。由此倡议,签到等工夫方面有规定的上午流动,应尽量布局在9点当前完结,从而取得更多的参加用户。 ② 察看PV、UV值的柱形图,从10点到18点,UV值大抵处于一个较高的安稳阶段,阐明大部分用户在此时间段内均有APP应用行为。但依据程度绝对较低的PV值可得,在该时间段内,用户受工作、学习影响,人均商品浏览量不高。通过观察该时间段内PV、UV环比的稳定幅度也能得出,在工作与学习时间段内,APP用户数量放弃在较平缓状态,但PV值所能反映出的人均商品浏览量会随着午休的开始与完结等产生较大的稳定。 ③ 察看PV、UV值的柱形图,从19点到22点是用户的应用高峰期,PV与UV值都处于24h内的较高水平,可知,绝大多数用户的休闲娱乐工夫在19点至22点。由此倡议,APP内的次要流动应尽量布局在此时间段内,从而取得更多的参加用户。 ④ 察看PV、UV值的柱形图,23点的PV、UV值呈现显著的降落,阐明较多用户抉择在23点前进入劳动状态。察看该时间段内PV、UV环比增长速率值,发现在22点最先呈现PV、UV环比的负增长状态,并从23点开始更为显著的降落,在凌晨1点达到环比负增长速率的峰值,阐明大部分用户抉择在凌晨1点前进入劳动状态。这样的负增长继续到凌晨4点,此时的PV、UV值也升高至最低点。 2. 用户行为剖析 利用SQL语句,创立用户行为视图,依据用户id,别离统计其在数据集提供的9天之内的4种用户行为数量(点击、珍藏、加购物车、购买),创立好的视图构造如下图所示: 统计用户4种行为的总数并制作漏斗图,发现从点击到购买的转化率只有2.24%,散失重大。为此进行用户行为的路径分析,确定用户从点击到购买/散失的流程数据。依据数据集提供参数,得出以下4种用户购买门路: ① pv -> buy ② pv -> fav -> buy③ pv -> cart -> buy④ pv -> fav,cart -> buy ...

March 21, 2022 · 1 min · jiezi

关于oracle:数据传输-如何使用-DTLE-将-Oracle-数据同步到-MySQL

作者:刘安 爱可生测试团队成员,次要负责 DTLE 开源我的项目相干测试工作,善于 Python 自动化测试开发。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 前言:过年前 DTLE 公布了 4.22.01.0 版本,该版本最重要的个性是反对 Oracle-MySQL 增量数据同步。明天我就来给大家介绍一下这个性能。 一、现状1. 目前只反对增量同步a. 能够依据 SCN 节点开启增量复制b. 从工作启动工夫开启增量复制2. 类型映射a. 已反对类型OracleMySQL限度BINARY_DOUBLEfloatmysql 不反对Inf/-Inf/Nan数据,用NULL来存储CHAR(n), CHARACTER(n)CHAR(n), CHARACTER(n) DATEdatetime DECIMAL(p,s), DEC(p,s)DECIMAL(p,s), DEC(p,s) DOUBLE PRECISIONDOUBLE PRECISION FLOAT(p)DOUBLE INTEGER, INTINT极值问题 (https://github.com/actiontech...)INTERVAL DAY(p) TO SECOND(s)VARCHAR(30) INTERVAL YEAR(p) TO MONTHVARCHAR(30) NCHAR VARYING(n)NCHAR VARYING(n) NCHAR(n)NCHAR(n)/NVARCHAR(n) NUMBER(p,0), NUMBER(p)TINYINT/SMALLINT/INT/BIGINT/DECIMAL(p) NUMBER(p,s)DECIMAL(p,s) NUMBER, NUMBER(*)DOUBLE NUMERIC(p,s)NUMERIC(p,s) NVARCHAR2(n)NVARCHAR(n) RAW(n)VARBINARY(n) REALDOUBLE ROWIDCHAR(100) SMALLINTDECIMAL(38) TIMESTAMP(p)datetime VARCHAR2(n)VARCHAR(n) VARCHAR(n)VARCHAR(n) b. 待反对类型OracleMySQL以后不反对起因BINARY_FLOATfloatMySQL不反对Inf/-Inf/Nan数据, MySQL float类型无奈准确匹配,导致更新失败BLOBBLOB以后实现逻辑,无奈从redoSQL获取足够的值CLOBCLOB以后实现逻辑,无奈从redoSQL获取足够的值LONGLONGTEXT只反对insertLONG RAWLONGBLOB只反对insertNCLOBTEXT无奈从redoSQL获取足够的值TIMESTAMP(p) WITH TIME ZONEdatetime时区问题未解决c. 不反对类型OracleMySQL不反对起因BFILEVARCHAR(255)logminer不反对UROWID(n)VARCHAR(n)logminer读取的数据不足以结构新SQLXMLTYPEVARCHAR(30)logminer不反对3. DML反对度a. DML类型DML类型Oracle SQLMySQL SQLINSERTINSERT INTO ACTION_DB.CHAR_255_COLUMNS VALUES (0, NULL)replace into ACTION_DB.CHAR_255_COLUMNS (COL1, COL2`) values ('0', NULL)UPDATEUPDATE ACTION_DB.CHAR_255_COLUMNS SET COL2='abcdefghijklmnopqrstuvwxyz' WHERE COL1=0update ACTION_DB.CHAR_255_COLUMNS set COL1='0', COL2='abcdefghijklmnopqrstuvwxyz' where ((COL1 = '0') and (COL2 is NULL)) limit 1DELETEDELETE FROM ACTION_DB.CHARACTER_255_COLUMNS WHERE COL1=0delete from ACTION_DB.CHAR_255_COLUMNS where ((COL1 = '0') and (COL2 = 'abcdefghijklmnopqrstuvwxyz')) limit 1b. DML函数反对度函数名是否反对其余CURRENT_TIMESTAMP是 DATE是 EMPTY_BLOB是函数反对解析为NULLEMPTY_CLOB是函数反对解析为NULLHEXTORAW是 LOCALTIMESTAMP是 RAWTOHEX是 RAWTOHEX(CHR())是 SYSTIMESTAMP是 TO_DATE是 TO_DSINTERVAL是 TO_TIMESTAMP是 TO_YMINTERVAL是 UNISTR是 4. DDL反对度DDLTargetOptionCREATE表 TABLEDEFAULT CREATEALTER表 TABLE减少字段 删除字段 重命名字段 (以后仅反对MySQL 8.0语法) 变更字段类型DROP表 TABLEDEFAULT DROP二、环境筹备1. Oracle数据库开启归档日志shell> su oracleshell> mkdir /u01/app/oracle/oradata/archive_logshell> sqlplus sys/oracle as sysdbaSQL> alter system set log_archive_dest_1='location=/u01/app/oracle/oradata/archive_log' scope=spfile;SQL> alter system set db_recovery_file_dest_size = 10G;SQL> shutdown immediate;SQL> startup mount;SQL> alter database add logfile group 3 '/u01/app/oracle/fast_recovery_area/XE/onlinelog/redo01.log' size 500m;SQL> alter database add logfile group 4 '/u01/app/oracle/fast_recovery_area/XE/onlinelog/redo02.log' size 500m;SQL> alter database add logfile group 5 '/u01/app/oracle/fast_recovery_area/XE/onlinelog/redo03.log' size 500m;SQL> alter database archivelog;SQL> alter database add supplemental log data (all) columns;SQL> alter database open;SQL> archive log list;# Archive Mode示意已开启归档模式,Archive destination示意归档日志贮存门路2. 装置 LogMiner 工具(Oracle 装置时默认装置)可查看零碎中是否存在运行 LogMiner 所须要的 dbms_logmnr 、dbms_logmnr_d 包,如果没有装置 LogMiner 工具须要的包,须要运行上面两个命令: ...

March 7, 2022 · 4 min · jiezi

关于oracle:Oracle数据到MaxCompute乱码问题详解

简介:集成Oracle数据到MaxCompute,乱码问题剖析; 为什么,在oracle数据不乱码,集成到MaxCompute就乱码了? 问题在哪里? 1.1 乱码景象DataWorks的数据离线集成(DataX)集成Oracle数据到MaxCompute的数据有乱码,然而看源库不是乱码,这是什么起因? 景象:【Oracle;工具:plsql-dev】 【MaxCompute;工具:DataWorks】 select OP_USER from test.mdtsb where uuid='161A45E75BC88040E053441074848040'; 1.2 问题剖析应用两个 oracle 函数: 【DUMP; CONVERT; 】 http://docs.oracle.com/databa... http://docs.oracle.com/databa... 为了防止转码正确是因为刚好乱码的列的实在字符集与操作系统字符集雷同而导致显示失常,抉择了应用 linux 环境,客户端字符集设置为 UTF8,应用 SQLplus 进行查问剖析问题。 1.客户端环境:SQL> select userenv('language') from dual; USERENV('LANGUAGE') SIMPLIFIED CHINESE_CHINA.AL32UTF8 2.应用 dump 函数把文本对应的编码输入进去:SQL> select dump(OP_USER,1016) from test.mdtsb where uuid='161A45E75BC88040E053441074848040' ; DUMP(OP_USER,1016) Typ=1 Len=6CharacterSet=AL32UTF8: c0,ee,be,b0,ea,bb 这个函数输入的信息有三个 长度是 6 字节字符集是 AL32UTF8字符编码是 c0,ee,be,b0,ea,bb通过这些信息,咱们猜想原来的字符集可能是 GBK 或者 GB18030、GB2312 这几个字符集的编码。因为三个汉字,如果是 UTF8 的话他们的编码大部分都是一个汉字对应三字节。而 GBK字符集对应的编码是双字节。 3.查看c0,ee,be,b0,ea,bb 对应的 GBK 字符http://www.qqxiuzi.cn/zh/hanz... c0,ee ...

December 23, 2021 · 3 min · jiezi

关于oracle:Oracle客户端-PLSQL-DEVELOPER-安装使用

作者:threedayman 起源:恒生LIGHT云社区 背景相比于命令行,客户端领有更加丰盛的可视化界面信息。同时为了运行sql大文件更加不便,抉择装置客户端。 下载安装PL/SQL DEVELOPER 下载地址 https://www.allroundautomations.com/registered-plsqldev/ 抉择适合的版本进行装置。 下载Instantclient 下载地址 https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 下载安装包 后进行各自的解压装置。 环境配置instantclient的network下的admin目录下 创立tnsnames.ora文件,填入如下 信息,其中的 name、ip、dbname依据理论状况进行批改。 name =(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ip)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = dbname ) ))环境变量设置 【此电脑右键】→【属性】→【高级零碎设置】→【环境变量】→【新建零碎变量】 变量名:NLS_LANG 变量值:AMERICAN_AMERICA.ZHS16GBK 变量名:TNS_ADMIN 变量值:D:\instantclient_21_3\network\admin 关上PL/SQL DEVELOPER,显示登录界面,抉择【勾销】。 抉择【配置】→【首选项】→【连贯】 依据具体的Instantclient 装置目录配置 Oracle主目录、OCI库。 配置完后点击利用、确定,退出客户端,并且重启电脑让环境变量失效。 连贯应用实现上述配置后关上 PL/SQL DEVELOPER 呈现以下界面,输出用户名、明码、抉择对应的数据库,点击确认按钮 登录后的界面如下图

December 17, 2021 · 1 min · jiezi

关于oracle:Tapdata-Cloud-版本上新新增ClickHouseADB-MySQL等5个数据源支持

Tapdata Cloudcloud.tapdata.net Tapdata Cloud 是国内首家异构数据库实时同步云平台,目前反对Oracle、MySQL、PG、SQL Server、MongoDB、ES 、达梦、Kafka、GP、MQ、ClickHouse、Hazelcast Cloud、ADB MySQL、ADB PostgreSQL、KunDB之间的数据同步,行将反对 DB2、Sybase ASE、Redis、GBase、GaussDB 等,并对用户永恒收费。 完满反对SQL->NOSQL,拖拽式的“零”代码配置操作、可视化工作运行监控,弱小的数据处理能力,Tapdata Cloud 让您轻松实现跨零碎跨类型的数据同步和替换,开释数据筹备阶段的精力。 近日,Tapdata Cloud 公布1.0.8 版本,新增5个数据源反对,并进行了多处细节优化。 一直优化,提供更佳体验对于用户应用的各个环节,咱们始终在致力提供更佳体验 Tapdata Cloud 反对多种部署环境,包含:Linux,Windows,以及Docker。Tapdata agent,是Tapdata Cloud数据同步服务的执行实例,负责从TCM获取工作信息,通过流式技术从源零碎获取数据、解决转换数据并发送到指标零碎,并在工作执行过程中监测并上报工作状态至TCM。 Tapdata Cloud采纳了多种网络安全措施,确保用户数据和信息安全。 单向连贯:同步实例节点单向连贯管控端运行服务。Tapdata agent实例节点对外不被动裸露网络信息,只会连贯 TCM治理端服务,获取工作信息、上报状态信息。 HTTPS 协定:用户部署的Tapdata agent实例节点和 TCM 通信链路采纳 HTTPS 协定,避免盗取并篡改信息。 可信环境:自建模式下,所有数据流转均产生在受用户治理的服务器和网络环境,数据不流出透露。 在 Tapdata Cloud 1.0.8 版本中,咱们对 Windows下Agent部署形式优化,同时优化了云版Agent包,打包时去掉临时不须要的数据库驱动jar包 。 理解更多?开启实时同步,解锁数据新玩法! 2分钟装置,低代码工作台轻松上手 Tapdata Cloud 100% 收费 (蕴含数据同步,数据校验,工作监控,技术支持) 让数据随时可用 当初注册,收费应用 PC端登录 cloud.tapdata.net 体验更佳 往期举荐Tapdata 在线研讨会:DaaS vs 大数据平台,是竞争还是共处? Tapdata Cloud 版本上新 | 反对告诉自配置,反对GP、MQ数据源,界面更敌对! Tapdata Cloud 版本上新!率先反对数据校验、类型映射等6大新性能 ...

December 7, 2021 · 1 min · jiezi

关于oracle:Oracle创建表空间和用户

1.如果在PL/SQL 等工具里关上的话,间接批改上面的代码中[斜体加粗局部]执行 2.确保门路存在,比方【D:\oracle\oradata\Oracle9i\】也就是你要保留文件的门路存在 /分为四步 / /第1步:创立长期表空间 / create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /第2步:创立数据表空间 / create tablespace user_data logging datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /第3步:创立用户并指定表空间 username 为用户名,本人编写,password 为明码,本人设置 java www fhadmin org / create user username identified by password default tablespace user_data temporary tablespace user_temp; /第4步:给用户授予权限 username 为用户名,本人编写/ grant connect,resource,dba to username; 好买网 IT技术交易平台 ...

October 22, 2021 · 1 min · jiezi

关于oracle:oracledmp文件的导入导出

dmp文件的导入导出数据泵文件是一个高效的数据导入导出形式。 用exp,imp导入导出导出exp username/password@{ip}:{port}/schema tables="TABLEA" file="/xxx/TABLEA.dmp"导入imp username/password@{ip}:{port}/schema file="/xxx/TABLEA.dmp"Import: Release 11.2.0.4.0 - Production on Tue Oct 19 10:03:39 2021Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsExport file created by EXPORT:V11.02.00 via conventional pathWarning: the objects were exported by `XXX`, not by youimport done in ZHS16GBK character set and AL16UTF16 NCHAR character setIMP-00031: Must specify FULL=Y or provide FROMUSER/TOUSER or TABLES argumentsIMP-00000: Import terminated unsuccessfully报错提醒文件是由XXX导出的不是我。所以要改下owner。 ...

October 19, 2021 · 1 min · jiezi

关于oracle:自定义OAM错误页面

背景OAM在登录出错时,会跳到OAM谬误页面,如图 该页面是OAM的规范谬误页面,十分的不敌对,当用户面对这么一个页面时,基本不晓得如何操作。上面介绍如何自定义该页面 实现下载oam-server.ear登录OAM后盾,在目录$MIDDLEWARE_HOME/Oracle_IAM1/oam/server/apps目录下找到oam-server.ear,将其下载到本地 MIDDLEWARE_HOME是中间件目录,比方/data/fmwhome/Oracle/Middleware/Oracle_IAM1/oam/server/apps批改页面用解压软件(如7-zip等)将oam-server.ear解压到目录下,如果没有解压软件间接用jar命令也能够解压 jar -xvf oam-server.ear解压后,会有一个ngsso-web.war文件,以同样的办法将该文件解压进去,在门路ngsso-web/pages目录下,该目录蕴含了OAM所有规范的页面,以jsp形式提供,其中页面defaultservererror.jsp就是那个谬误页面,所以只需批改该页面即可。页面源码如下 <%@ page language="java" contentType="text/html" %><%@ page isErrorPage="true" import="java.io.*,oracle.security.am.engines.sso.ServerMsg" %><%@page import="oracle.security.am.common.utilities.constant.GenericConstants" %><%@page import="java.util.*, java.text.MessageFormat, oracle.security.am.engines.sso.ServerMsg"%><%@page import="oracle.security.am.common.utilities.css.XSSUtil" %><%@ include file="locale-ctx.jsp" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%!public void jspInit(){ oracle.security.am.pbl.transport.http.proxy.ServletCatalog.registerServlet("/pages/defaultservererror.jsp", this);}%><%// if proxy loading, return immediatelyif ("true".equals(request.getParameter("proxyloading"))) return; //Set the Expires and Cache Control Headers response.setHeader("Cache-Control", "no-cache, no-store"); response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "0"); //Added for Combating ClickJacking XSSUtil.addHeader(response, ""); response.setContentType("text/html; charset=UTF-8"); final String appName = request.getContextPath(); //initializing the messageBundle first java.util.Locale myLocale = request.getLocale(); String defaultResourceBundle = "oracle.security.am.engines.sso.ServerMsg"; ResourceBundle msgBundle = ResourceBundle.getBundle(defaultResourceBundle, myLocale); final String defaultErrorCode = "OAM-7"; String simpleMessage = msgBundle.getString(defaultErrorCode); // if redirection due to error happened Object errCode = request.getAttribute(GenericConstants.ERROR_CODE); if(errCode != null) { try { simpleMessage = msgBundle.getString(errCode.toString()); } catch(Exception e) { //ignore. simpleMessage will be set to the default } } %><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=language%>" lang="<%=language%>" dir="<%=textDirection%>"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title><%=msgBundle.getString("SSO")%></title> <link rel='stylesheet' href='<%=request.getContextPath()%>/pages/css/login_page<%=cssPrefix%>.css'/> <!--...省略局部代码--> </div></body></html>能够将html局部代码批改如下 ...

October 14, 2021 · 1 min · jiezi

关于oracle:oracle在left-join时两表关联的字段为null时失效问题

oracle在left join时两表关联的字段为null时生效问题问题形容TESTA subjectscore语文90数学30英语9 100TESTB subjectscore语文3数学79英语99 120如果用left join会失落掉TESTB的空值对应的120这个值 SELECT a.*, b.* FROM TESTA aLEFT JOIN TESTB b ON a.subject = b.SUBJECT;SUBJECTSCORESUBJECTSCORE语文90语文3数学30数学79英语9英语99 100 解决方案在left join前要将空数据赋值, with a as (SELECT nvl(subject, '-')subject, score FROM TESTA ),b as (SELECT nvl(subject, '-')subject, score FROM TESTB )SELECT a.*, b.* FROM aLEFT JOIN b ON a.subject = b.SUBJECT;SUBJECTSCORESUBJECTSCORE语文90语文3数学30数学79英语9英语99-100-120

October 14, 2021 · 1 min · jiezi

关于oracle:Oracle-检查-DATE-列-RANGE-分区表已有分区的最大日期时间

Oracle 查看 DATE 列 RANGE 分区已有分区的最大日期工夫-- 办法1:SYS.TABPART$ 计算工夫日期WITH THIS_PART AS (SELECT TABLE_OWNER, TABLE_NAME, PARTITION_NAME FROM DBA_TAB_PARTITIONS WHERE (TABLE_OWNER, TABLE_NAME, PARTITION_POSITION) IN (SELECT B.TABLE_OWNER, B.TABLE_NAME, MAX(B.PARTITION_POSITION) - 1 POSITION FROM DBA_TAB_PARTITIONS B JOIN DBA_USERS DU ON B.TABLE_OWNER = DU.USERNAME AND DU.ACCOUNT_STATUS = 'OPEN' WHERE B.TABLE_OWNER NOT IN ('SYS', 'SYSTEM', 'DBSNMP', 'MGMT_VIEW', 'SYSMAN', 'SH') GROUP BY B.TABLE_OWNER, B.TABLE_NAME)),ALL_PART AS (SELECT U.NAME USERNAME, O.NAME TABLENAME, O.SUBNAME PARTNAME, TO_NUMBER(SUBSTR(RAWTOHEX(CAST(BHIBOUNDVAL AS RAW(8))), 3, 2), 'XX') - 100 Y1, TO_NUMBER(SUBSTR(RAWTOHEX(CAST(BHIBOUNDVAL AS RAW(8))), 5, 2), 'XX') - 100 Y2, TO_NUMBER(SUBSTR(RAWTOHEX(CAST(BHIBOUNDVAL AS RAW(8))), 7, 2), 'XX') M, TO_NUMBER(SUBSTR(RAWTOHEX(CAST(BHIBOUNDVAL AS RAW(8))), 9, 2), 'XX') D, TO_NUMBER(SUBSTR(RAWTOHEX(CAST(BHIBOUNDVAL AS RAW(8))), 11, 2), 'XX') - 1 HH, TO_NUMBER(SUBSTR(RAWTOHEX(CAST(BHIBOUNDVAL AS RAW(8))), 13, 2), 'XX') - 1 MI, TO_NUMBER(SUBSTR(RAWTOHEX(CAST(BHIBOUNDVAL AS RAW(8))), 15, 2), 'XX') - 1 SS FROM SYS.TABPART$ TP, SYS.OBJ$ O, SYS.USER$ U WHERE TP.OBJ# = O.OBJ# AND O.OWNER# = U.USER# AND U.NAME NOT IN ('SYS', 'SYSTEM', 'DBSNMP', 'MGMT_VIEW', 'SYSMAN', 'SH')),TMP AS (SELECT T2.USERNAME, T2.TABLENAME, T2.PARTNAME, TO_DATE(TRIM(TO_CHAR(T2.Y1 * 100 + T2.Y2, '9999') || '-' || TO_CHAR(T2.M, 'FM09') || '-' || TO_CHAR(T2.D, 'FM09') || ' ' || TO_CHAR(T2.HH, 'FM09') || ':' || TO_CHAR(T2.MI, 'FM09') || ':' || TO_CHAR(T2.SS, 'FM09')), 'YYYY-MM-DD HH24:MI:SS') MAX_RANGE FROM THIS_PART T1 JOIN ALL_PART T2 ON T1.TABLE_OWNER = T2.USERNAME AND T1.TABLE_NAME = T2.TABLENAME AND T1.PARTITION_NAME = T2.PARTNAME)SELECT * FROM TMP WHERE MAX_RANGE <= SYSDATE + 365 ORDER BY USERNAME, TABLENAME;-- 办法2:取值long字段转换后截取字符串,依赖日期写全了 如2021-09-16 00:00:00,或2021/09/16 00:00:00WITH XML AS (SELECT DBMS_XMLGEN.GETXMLTYPE('SELECT TABLE_OWNER, TABLE_NAME, PARTITION_NAME, HIGH_VALUE FROM DBA_TAB_PARTITIONS WHERE (TABLE_OWNER, TABLE_NAME, PARTITION_POSITION) IN (SELECT B.TABLE_OWNER, B.TABLE_NAME, MAX(B.PARTITION_POSITION) - 1 POSITION FROM DBA_TAB_PARTITIONS B WHERE TABLE_OWNER NOT IN (''SYS'', ''SYSTEM'', ''DBSNMP'', ''MGMT_VIEW'', ''SYSMAN'',''SH'') AND TABLE_OWNER IN (SELECT USERNAME FROM DBA_USERS WHERE ACCOUNT_STATUS=''OPEN'') GROUP BY B.TABLE_OWNER, B.TABLE_NAME) ORDER BY 1,2') AS X FROM DUAL),MAXPART AS (SELECT EXTRACTVALUE(RWS.OBJECT_VALUE, '/ROW/TABLE_OWNER') TABLE_OWNER, EXTRACTVALUE(RWS.OBJECT_VALUE, '/ROW/TABLE_NAME') TABLE_NAME, EXTRACTVALUE(RWS.OBJECT_VALUE, '/ROW/PARTITION_NAME') PARTITION, EXTRACTVALUE(RWS.OBJECT_VALUE, '/ROW/HIGH_VALUE') HIGH_TEXT FROM XML X, TABLE(XMLSEQUENCE(EXTRACT(X.X, '/ROWSET/ROW'))) RWS ORDER BY EXTRACTVALUE(RWS.OBJECT_VALUE, '/ROW/TABLE_NAME')),DT AS (SELECT TABLE_OWNER, TABLE_NAME, PARTITION, TO_DATE(SUBSTR(M.HIGH_TEXT, INSTR(M.HIGH_TEXT, '20', -3), 19), 'YYYY-MM-DD HH24:MI:SS') RANGE_DT FROM MAXPART M)SELECT * FROM DT WHERE DT.RANGE_DT <= SYSDATE + 365;

September 15, 2021 · 2 min · jiezi

关于oracle:Oracle-11g-空库修改字符集AL32UTF8-ZHS16GBK

Oracle 11g 空库批改字符集:AL32UTF8 --> ZHS16GBK-- 空库批改字符集:AL32UTF8 --> ZHS16GBKSHOW PARAMETER JOB_QUEUE_PROCESSES;SHOW PARAMETER AQ_TM_PROCESSES;SHUTDOWN IMMEDIATE;STARTUP MOUNT;ALTER SYSTEM ENABLE RESTRICTED SESSION;ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;ALTER SYSTEM SET AQ_TM_PROCESSES=0;ALTER DATABASE OPEN;ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;ALTER SYSTEM SET NLS_LANGUAGE='AMERICAN' SCOPE=SPFILE;ALTER SYSTEM SET NLS_TERRITORY='AMERICA' SCOPE=SPFILE;SHUTDOWN IMMEDIATE;STARTUP;SELECT USERENV('LANGUAGE') FROM DUAL;ALTER SYSTEM SET JOB_QUEUE_PROCESSES=1000;ALTER SYSTEM SET AQ_TM_PROCESSES=1;

September 14, 2021 · 1 min · jiezi

关于oracle:Linux-添加-crontab-定时清理-Oracle-长时间-INACTIVE-session

Linux 增加 crontab 定时清理 Oracle 长时间 INACTIVE sessionif [ ! -d "${HOME}/cront/" ];thenmkdir ${HOME}/crontelseecho "Do nothing"fi# ${HOME}/cront/ks.sqlecho "set trimspool onspool ${HOME}/cront/kills.sh replaceset pagesize 0set heading offset linesize 32767SELECT 'kill -9 ' || P.SPID FROM V\$PROCESS P WHERE P.ADDR IN (SELECT B.PADDR FROM V\$SESSION B WHERE B.TYPE = 'USER' AND B.STATUS = 'INACTIVE' AND B.LAST_CALL_ET > 3600);exit;spool off" > ${HOME}/cront/ks.sql# ${HOME}/cront/debug.sqlecho "oradebug wakeup 2;exit;" > ${HOME}/cront/debug.sql# ${HOME}/cront/ks.shecho '#!/bin/bash' > ${HOME}/cront/ks.shecho '' > ${HOME}/cront/cron_kill.logecho '' > ${HOME}/cront/kill.shecho '' > ${HOME}/cront/kills.shecho "source ${HOME}/.bash_profilesqlplus / as sysdba @${HOME}/cront/ks.sqlgrep \"kill\" ${HOME}/cront/kills.sh > ${HOME}/cront/kill.shecho -e >> ${HOME}/cront/cron_kill.logecho \"################# Started 'kill -9' commend at \`date +'%F %T %A'\` ##################\" > ${HOME}/cront/cron_kill.logecho -e >> ${HOME}/cront/cron_kill.log# Kill session${HOME}/cront/kill.sh >> ${HOME}/cront/cron_kill.log# oradebugecho \"# oradebug , No Information Return\" >> ${HOME}/cront/cron_kill.logsqlplus / as sysdba @${HOME}/cront/debug.sql# Infoecho -e >> ${HOME}/cront/cron_kill.logecho \"Warning: \`cat ${HOME}/cront/kill.sh | wc -l\` processes Killed. \" >> ${HOME}/cront/cron_kill.logecho -e >> ${HOME}/cront/cron_kill.log echo \"################ Stoped at \`date +'%F %T'\` ################\" >> ${HOME}/cront/cron_kill.log" >> ${HOME}/cront/ks.sh# Grant execute permissionchmod +x ${HOME}/cront/*# Add Crontd(crontab -l | grep -v "ks.sh") | crontab(crontab -l ; echo "*/30 * * * * /bin/bash ${HOME}/cront/ks.sh") | crontab

September 14, 2021 · 1 min · jiezi

关于oracle:循环删除大表数据delete-指定日期指定条件前数据

循环删除大表数据(delete 指定日期、指定条件前数据)DECLARE HOWMANY_10MINS NUMBER; -- 指定工夫节点,删除该工夫之前过滤数据。 -- 请肯定留神 LOOP 中 DELETE 条件过滤,否则将全副删除!!! SPECIFY_TIME DATE := TO_DATE('2021/07/30 23:59:59','yyyy/MM/dd hh24:mi:ss'); BEGIN_TIME DATE; END_TIME DATE;BEGIN SELECT (SPECIFY_TIME - TRUNC(MIN(T.COLLECTTIME), 'DD')) * 24 * 6 HOWMANY_10MINS INTO HOWMANY_10MINS FROM IMES_SAC1_MD.DEVICE_COLLECT_DATA T; FOR X IN 0 .. HOWMANY_10MINS LOOP BEGIN_TIME := SPECIFY_TIME - (X + 1) / 24 / 6; END_TIME := SPECIFY_TIME - X / 24 / 6; -- delete 操作,请批改删除表信息,及 where 过滤条件。 DELETE FROM IMES_SAC1_MD.DEVICE_COLLECT_DATA T WHERE T.COLLECTTIME BETWEEN BEGIN_TIME AND END_TIME; /* INSERT INTO TT VALUES (X, BEGIN_TIME, END_TIME, SYSDATE);*/ COMMIT; END LOOP;END;/

September 14, 2021 · 1 min · jiezi

关于oracle:Oracle总结

Oracle总结1、Oracle罕用sql命令1、查看建表语句select dbms_metadata.get_ddl('TABLE','COMMUNITY') from dual; COMMUNITY为表名必须大写 2.创立表create table TEST( id VARCHAR2(30), name VARCHAR2(30), sex NUMBER(1), birthday TIMESTAMP(6))3.insert三种插入语法: insert into 表名 values(值1,值2,......);insert into 表名(列1,列2,......)values(值1,值2,......);insert into 表2 select * from 表1;能够用于批量插入 insert into test (id, name, sex)select t.id,t.name,'0' from table_name_b t group by id;4.deleteDELETE FROM 表名称 WHERE 列名称 = 值5.updateUPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值update test set name='lucy' where name='tom'//多个列至更新UPDATE 表名称 SET 列名称1 = 新值1,列名称2 = 新值2, 列名称3 = 新值3 WHERE 列名称 = 某值6.select--查问指定列SELECT 列名称 FROM 表名称 --查问所有列SELECT * FROM 表名称select * from test7.drop删除表名 ...

September 10, 2021 · 2 min · jiezi

关于oracle:Oracle21C-单机安装

一、阐明本次装置将应用Oracle通用安装程序(OUI)装置Oracle数据库软件以及数据库1.1 Linux 下Oracle操作系统要求Oracle Linux 8.1 with the Unbreakable Enterprise Kernel 6: 5.4.17-2011.0.7.el8uek.x86_64 or laterOracle Linux 8 with the Red Hat Compatible kernel: 4.18.0-80.el8.x86_64 or laterOracle Linux 7.4 with the Unbreakable Enterprise Kernel 4: 4.1.12-124.19.2.el7uek.x86_64 or laterOracle Linux 7.4 with the Unbreakable Enterprise Kernel 5: 4.14.35-1818.1.6.el7uek.x86_64 or laterOracle Linux 7.5 with the Red Hat Compatible kernel: 3.10.0-862.11.6.el7.x86_64 or laterRed Hat Enterprise Linux 8: 4.18.0-80.el8.x86_64 or laterRed Hat Enterprise Linux 7.5: 3.10.0-862.11.6.el7.x86_64 or laterSUSE Linux Enterprise Server 12 SP3: 4.4.162-94.72-default or laterSUSE Linux Enterprise Server 15: 4.12.14-23-default or later ...

September 3, 2021 · 2 min · jiezi

关于oracle:oracle中sql语句的问题

1.Oracle中将查问出的多条记录的某个字段拼接成一个字符串的办法11g外面用listagg:(19c也可用)select listagg(name,',') within (order by id) from table10g外面用wm_concat:select wm_concat(name) from tablewm_concat是undocument的listagg是11g document的

September 1, 2021 · 1 min · jiezi

关于oracle:Oracle-order-by-处理NULL值

问题点:缺省解决 Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最初,DESC降序则排在最前 解决方案:应用nulls first 或者nulls last 语法Nulls first和nulls last是Oracle Order by反对的语法如果Order by 中指定了表达式Nulls first则示意null值的记录将排在最前(不论是asc 还是 desc)如果Order by 中指定了表达式Nulls last则示意null值的记录将排在最初 (不论是asc 还是 desc) --将nulls始终放在最初select * from user where age > 18 order by birthday desc nulls last; --将nulls始终放在最前select * from user where age > 18 order by birthday nulls first

September 1, 2021 · 1 min · jiezi

关于oracle:记一次oracle-HAIP引发的数据库问题

一、客户背景前不久客户找到我跟我说他们新施行的两套oracle 12CRAC数据库补丁不能胜利打上让我帮忙解决一下返回客户现场,客户零碎为IBM AIX7.2,数据库为oracle12.2.0.1补丁是2021年4月份的补丁,采纳了双心跳,客户曾经将一节点GI补丁装置,二节点装不上,我尝试应用opatch auto二节点能够失常装置该补丁过后并没有留神集群的状态,第二天客户又找到我说集群状态不失常。 二、问题解决剖析过程1、登录数据库服务器查看集群状态发现只有一个节点ASM磁盘是在线状态 2、通过屡次尝试敞开一边另一边ASM能够失常启动,只有一边能启动的状况两节点ASM实例无奈同时启动,排查ASM日志发现ASM最初报错为 No connectivity to other instances in the cluster during startup. Hence, LMON is terminating the instance. Please check the LMON trace file for details. Also, please check the network logs of this instance along with clusterwide network health for problems and then re-start this instance. 3、查看LMOIN日志发现网络超时景象和LMON过程终止了ASM实例 No reconfig messages from other instances in the cluster during startup. Hence, LMON is terminating the instance. Please check the network logs of this instance as well as the network health of the cluster for problems ...

August 16, 2021 · 1 min · jiezi

关于oracle:设置定时清理Oracle长时间-INACTIVE-session-脚本

设置定时清理Oracle长时间 INACTIVE session 脚本复制间接执行,或者编辑到文件执行#### 设置定时清理Oracle长时间 INACTIVE session 脚本if [ ! -d "/home/oracle/cront/" ];thenmkdir /home/oracle/crontelseecho "Do nothing"fi# /home/oracle/cront/ks.sqlecho "set trimspool onspool /home/oracle/cront/kills.sh replaceset pagesize 0set heading offset linesize 32767SELECT 'kill -9 ' || P.SPID FROM V\$PROCESS P WHERE P.ADDR IN (SELECT B.PADDR FROM V\$SESSION B WHERE B.TYPE = 'USER' AND B.STATUS = 'INACTIVE' AND B.LAST_CALL_ET > 3600);exit;spool off" > /home/oracle/cront/ks.sql# /home/oracle/cront/debug.sqlecho "oradebug wakeup 2;exit;" > /home/oracle/cront/debug.sql# /home/oracle/cront/ks.shecho '#!/bin/bash' > /home/oracle/cront/ks.shecho "source /home/oracle/.bash_profilesqlplus / as sysdba @/home/oracle/cront/ks.sqlgrep \"kill\" /home/oracle/cront/kills.sh > /home/oracle/cront/kill.shecho -e >> /home/oracle/cront/cron_kill.logecho \"################# Started 'kill -9' commend at \`date +'%F %T %A'\` ##################\" > /home/oracle/cront/cron_kill.logecho -e >> /home/oracle/cront/cron_kill.log# Kill session/home/oracle/cront/kill.sh >> /home/oracle/cront/cron_kill.log# oradebugecho \"# oradebug , No Information Return\" >> /home/oracle/cront/cron_kill.logsqlplus / as sysdba @/home/oracle/cront/debug.sql# Infoecho -e >> /home/oracle/cront/cron_kill.logecho \"Warning: \`cat /home/oracle/cront/kill.sh | wc -l\` processes Killed. \" >> /home/oracle/cront/cron_kill.logecho -e >> /home/oracle/cront/cron_kill.log echo \"################ Stoped at \`date +'%F %T'\` ################\" >> /home/oracle/cront/cron_kill.log" >> /home/oracle/cront/ks.sh# Grant execute permissionchmod +x /home/oracle/cront/*# Add Crontd(crontab -l | grep -v "ks.sh") | crontab(crontab -l ; echo "*/30 * * * * /bin/bash /home/oracle/cront/ks.sh") | crontab

August 9, 2021 · 1 min · jiezi

关于oracle:关于oracle-case-when的坑

oracle case when 如果第一个条件达成 前面条件就不走了 间接返回THEN前面的后果如 市局终审在最初面 如果正序判断 那就会返回街道初审的01 取不到最初的市局 所以要业务上要理清逻辑 依照倒序判断 把市局终审放第一个

July 29, 2021 · 1 min · jiezi

关于oracle:Oracle-导入导出工具的基本使用

exp/imp的应用办法次要有三种形式(齐全、用户、表),须要dba权限EXP 齐全 [oracle@ystdb11g ~]$ exp system@ystdb file=/backups/full_exp_20200313.dmp log=/backups/full_exp_20200313.log full=yEXP 用户 [oracle@ystdb11g ~]$ exp test@ystdb file=/backups/test_exp_20200313.dmp log=/backups/test_exp_20200313.log owner=testExport: Release 11.2.0.4.0 - Production on Thu Mar 12 23:07:45 2020Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.Password:Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsExport done in AL32UTF8 character set and AL16UTF16 NCHAR character setAbout to export specified users .... exporting pre-schema procedural objects and actions. exporting foreign function library names for user TEST. exporting PUBLIC type synonyms. exporting private type synonyms. exporting object type definitions for user TESTAbout to export TEST's objects .... exporting database links. exporting sequence numbers. exporting cluster definitions. about to export TEST's tables via Conventional Path .... . exporting table TTB01 5000 rows exported. . exporting table TTB02 6000 rows exported. . exporting table TTB03 7000 rows exported. . exporting table TTB04 10000 rows exported. . exporting table TTB05 15000 rows exported. exporting synonyms. exporting views. exporting stored procedures. exporting operators. exporting referential integrity constraints. exporting triggers. exporting indextypes. exporting bitmap, functional and extensible indexes. exporting posttables actions. exporting materialized views. exporting snapshot logs. exporting job queues. exporting refresh groups and children. exporting dimensions. exporting post-schema procedural objects and actions. exporting statisticsExport terminated successfully without warnings.EXP 表 ...

July 28, 2021 · 4 min · jiezi

关于oracle:ORA12737Instant-Client-Lightunsupported-server-character-set

问题 Navicat Premium软件连贯oracle时报错 ORA-12737:Instant Client Light:unsupported server character set %s 起因 Navicat Premium软件 不反对的服务器字符集%s 解决 :到官网上下载新版的 instantclient文件 用于替换旧版的官网地址 https://www.oracle.com/databa...上面是图片操作流程:1 官网下载文件2 把文件解压进去放在 Navicat Premium软件的文件夹中3 Navicat Premium中抉择新版的Ioc 4 重启Navicat Premium软件!! 测试连贯

July 28, 2021 · 1 min · jiezi

关于oracle:Oracle-统计信息

-- 按分区收集统计信息exec dbms_stats.gather_table_stats('&USERNAME','&PARTITION_TABLE','&PART_NAME',estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt=>'FOR ALL COLUMNS SIZE 1',cascade=>TRUE,GRANULARITY =>'PARTITION',NO_INVALIDATE=>false,degree=>4);-- 指定表收集统计信息EXEC DBMS_STATS.GATHER_TABLE_STATS('&USERNAME','&TABLE_NAME',estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt=>'FOR ALL COLUMNS SIZE 1',NO_INVALIDATE=>false,cascade=>TRUE,degree=>4);EXEC DBMS_STATS.GATHER_TABLE_STATS('IMES_X_DG','FOX_MODULE_DATA',estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt=>'FOR ALL COLUMNS SIZE 1',NO_INVALIDATE=>false,cascade=>TRUE,degree=>1);-- auto形式EXEC DBMS_STATS.GATHER_TABLE_STATS('GALILEO','WIP_PN_INPUT_TRACKING',estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt=>'for columns WO_NO size auto',NO_INVALIDATE=>false,cascade=>TRUE,degree=>2);EXEC DBMS_STATS.GATHER_TABLE_STATS('VERA','WIP_WO_PICK_LIST',estimate_percent =>DBMS_STATS.AUTO_SAMPLE_SIZE,method_opt=>'for columns WO_NO size auto',NO_INVALIDATE=>false,cascade=>TRUE,degree=>2);-- 指定索引收集统计信息exec dbms_stats.gather_index_stats(ownname =>'&USERNAME',indname=>'&INDEX_NAME',estimate_percent => dbms_stats.AUTO_SAMPLE_SIZE,NO_INVALIDATE=>false,degree =>4);-- 依照Schema收集统计信息EXEC DBMS_STATS.GATHER_SCHEMA_STATS('&SCHEMA_NAME',ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE,METHOD_OPT=>'FOR ALL COLUMNS SIZE 1',NO_INVALIDATE=>FALSE,DEGREE=>4,CASCADE=>TRUE);-- 按DB收集统计信息EXEC DBMS_STATS.gather_database_stats(ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE,METHOD_OPT=>'FOR ALL COLUMNS SIZE 1',NO_INVALIDATE=>FALSE,DEGREE=>4,CASCADE=>TRUE);-- 直方图Oracle 通过指定 dbms_stats 的 method_opt 参数,来创立直方图。在 method_opt 子句中有三个相干选项,即 skewonly、repeat 和 auto。“skewonly” 选项,它的时间性很强,因为它查看每个索引中每列值的散布。如果 dbms_stats 发现一个索引中具备不均匀分布的列,它将为该索引创立直方图,以帮忙基于老本的 SQL 优化器决定是应用索引还是全表扫描拜访begindbms_stats. gather_table_stats(wnname => '',tabname => '',estimate_percent => dbms_stats.auto_sample_size,method_opt => 'for all columns size skewonly',cascade => true,degree => 4);end;/--查看直方图SELECT COLUMN_NAME, NUM_DISTINCT,NUM_BUCKETS,LAST_ANALYZED, HISTOGRAM FROM DBA_TAB_COL_STATISTICS WHERE TABLE_NAME = '&TABLE_NAME';select a.column_name, b.num_rows, a.num_distinct Cardinality, round(a.num_distinct / b.num_rows * 100, 2) selectivity, a.histogram, a.num_buckets from dba_tab_col_statistics a, dba_tables b where a.owner = b.owner and a.table_name = b.table_name and a.owner = '&USERNAME' and a.table_name = '&TABLE_NAME';/*NUM_ROWS 示意总行数;CARDINALITY 示意基数;SELECTIVITY示意选择性 选择性在10%以上都比拟高了;HISTOGRAM示意直方图的类型;FREQUECNCY频率直方图、当列中Distinct_keys 较少(小于254),如果不手工指定直方图桶数(BUCKET),Oracle就会主动的创立频率直方图,并且桶数(BUCKET)等于Distinct_Keys;HEIGHT BALANCED 高度均衡直方图 当列中Distinct_keys大于254,如果不手工指定直方图桶数(BUCKET),Oracle就会主动的创立高度均衡直方图;NONE示意未收集直方图;NUM_BUCKETS 示意桶数;*/oracle 个别查问数据行数在5%以下心愿走索引--直方图的一些名词NDV : number distinct of values ,比方一个列蕴含10,200,300,则NDV就是3n: 代表直方图的桶,默认是254p: 代表外部变量百分比阈值, (1–(1/n))* 100. For example, if n = 254(11g及以下版本限度,12c调整为2048), then p is 99.6-- 官网形容https://docs.oracle.com/en/database/oracle/oracle-database/12.2/tgsql/histograms.html#GUID-EED37588-DEB3-4426-92D1-76A1B73888B4--删除列上的直方图信息BEGINdbms_stats.delete_column_stats(ownname=>'&USERNAME', tabname=>'&TABLE_NAME', colname=>'&COLUMN_NAME', col_stat_type=>'HISTOGRAM');END;/EXECUTE dbms_stats.delete_column_stats(ownname => 'GALILEO',tabname => 'WIP_PN_INPUT_TRACKING',colname => 'PN_CODE',col_stat_type => 'HISTOGRAM');--手动指定prod_id间接图的桶数为1BEGINdbms_stats.set_table_prefs('&USERNAME','&TABLE_NAME','METHOD_OPT','FOR ALL COLUMNS SIZE AUTO, FOR COLUMNS SIZE 1 PROD_ID');END;/-- 查看分区统计信息col TB_NAME for a30;col HIGH_VALUE for a300;set lines 250;select TABLE_OWNER||'.'||TABLE_NAME as TB_NAME,PARTITION_NAME,LAST_ANALYZED,HIGH_VALUE from DBA_TAB_PARTITIONS where TABLE_NAME like '&PARTITION_TABLE_NAME';-- 查看一般表统计信息-- dba_tab_statisticscol full_name for a35;col PARTITION_NAME for a15;select owner||'.'||TABLE_NAME full_name,PARTITION_NAME,NUM_ROWS,LAST_ANALYZED,STALE_STATS from dba_tab_statistics where table_name = upper('&TABLE_NAME');-- dba_tables 统计信息col full_name for a35;col TABLESPACE_NAME for a15;col DEGREE for a10;select owner||'.'||TABLE_NAME full_name,TABLESPACE_NAME,DEGREE,PARTITIONED,NUM_ROWS,BLOCKS,LAST_ANALYZED from dba_tables where table_name = upper('&TABLE_NAME');-- 查看索引统计信息col full_name for a35;col TABLESPACE_NAME for a15;col TABLE_NAME for a20;col DEGREE for a10;select owner||'.'||INDEX_NAME full_name,TABLE_NAME,TABLESPACE_NAME,DEGREE,PARTITIONED,NUM_ROWS,LAST_ANALYZED from dba_indexes where index_name = upper('&INDEX_NAME');

July 17, 2021 · 2 min · jiezi

关于oracle:Oracle-自动任务

-- 查看主动收集工作状态SELECT CLIENT_NAME,STATUS FROM DBA_AUTOTASK_CLIENT;SELECT CLIENT_NAME, STATUS FROM DBA_AUTOTASK_CLIENT WHERE CLIENT_NAME = 'auto optimizer stats collection';-- 敞开信息主动收集auto optimizer stats collectionBEGIN DBMS_AUTO_TASK_ADMIN.DISABLE(CLIENT_NAME => 'auto optimizer stats collection', OPERATION => NULL, WINDOW_NAME => NULL);END;/-- 敞开SQL优化器SQL Tuning Advisor(STA)BEGIN DBMS_AUTO_TASK_ADMIN.DISABLE(CLIENT_NAME => 'sql tuning advisor', OPERATION => NULL, WINDOW_NAME => NULL);END;/-- 敞开主动空间诊断auto space advisorBEGIN DBMS_AUTO_TASK_ADMIN.DISABLE(CLIENT_NAME => 'auto space advisor', OPERATION => NULL, WINDOW_NAME => NULL);END;/-- 启动主动收集工作auto optimizer stats collectionBEGIN DBMS_AUTO_TASK_ADMIN.ENABLE(CLIENT_NAME => 'auto optimizer stats collection', OPERATION => NULL, WINDOW_NAME => NULL);END;/-- 启动SQL优化器SQL Tuning Advisor(STA)BEGIN DBMS_AUTO_TASK_ADMIN.ENABLE(CLIENT_NAME => 'sql tuning advisor', OPERATION => NULL, WINDOW_NAME => NULL);END;/-- 启动主动空间诊断auto space advisorBEGIN DBMS_AUTO_TASK_ADMIN.ENABLE(CLIENT_NAME => 'auto space advisor', OPERATION => NULL, WINDOW_NAME => NULL);END;/-- 查看主动收集工作所属工夫窗口组蕴含的子工夫窗口 EXECUTE DBMS_AUTO_TASK_ADMIN.enABLE;select * from dba_scheduler_wingroup_members where window_group_name='ORA$AT_WGRP_OS';-- 查看收集统计信息明细SET LINES 350;COL WINDOW_NAME FOR A20;COL DURATION FOR A15;COL REPEAT_INTERVAL FOR A70;COL NEXT_START_DATE FOR A25;COL LAST_START_DATE FOR A25;SELECT W.WINDOW_NAME, W.REPEAT_INTERVAL, W.DURATION, W.NEXT_START_DATE, W.LAST_START_DATE, W.ENABLED FROM DBA_AUTOTASK_WINDOW_CLIENTS C, DBA_SCHEDULER_WINDOWS W WHERE C.WINDOW_NAME = W.WINDOW_NAME AND C.OPTIMIZER_STATS = 'ENABLED';COL JOB_NAME FOR A30COL ACTUAL_START_DATE FOR A40 COL RUN_DURATION FOR A30 SET LINES 180 PAGES 100 -- 10G SELECT OWNER, JOB_NAME, STATUS, ACTUAL_START_DATE, RUN_DURATION FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME = 'GATHER_STATS_JOB' ORDER BY 4; -- 11GSELECT OWNER, JOB_NAME, STATUS, ACTUAL_START_DATE, RUN_DURATION FROM DBA_SCHEDULER_JOB_RUN_DETAILS WHERE JOB_NAME LIKE 'ORA$AT_OS_OPT_S%' ORDER BY 4;-- 敞开周六BEGINDBMS_SCHEDULER.DISABLE(NAME=>'"SYS"."SATURDAY_WINDOW"',FORCE=>TRUE);END;-- 批改早上4点收集BEGINDBMS_SCHEDULER.SET_ATTRIBUTE(NAME=>'"SYS"."SATURDAY_WINDOW"',ATTRIBUTE=>'REPEAT_INTERVAL',VALUE=>'freq=daily;byday=SAT;byhour=8;byminute=0; bysecond=0');END;/-- 批改窗口启动工夫EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('MONDAY_WINDOW','repeat_interval','freq=daily;byday=MON;byhour=22;byminute=0;bysecond=0');EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('TUESDAY_WINDOW','repeat_interval','freq=daily;byday=TUE;byhour=22;byminute=0;bysecond=0');EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('WEDNESDAY_WINDOW','repeat_interval','freq=daily;byday=WED;byhour=22;byminute=0;bysecond=0');EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('THURSDAY_WINDOW','repeat_interval','freq=daily;byday=THU;byhour=22;byminute=0;bysecond=0');EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('FRIDAY_WINDOW','repeat_interval','freq=daily;byday=FRI;byhour=22;byminute=0;bysecond=0');EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SATURDAY_WINDOW','repeat_interval','freq=daily;byday=SAT;byhour=22;byminute=0;bysecond=0');EXEC DBMS_SCHEDULER.SET_ATTRIBUTE('SUNDAY_WINDOW','repeat_interval','freq=daily;byday=SUN;byhour=6;byminute=0;bysecond=0');-- 调整持续时间(2h)BEGINDBMS_SCHEDULER.DISABLE(NAME => 'SATURDAY_WINDOW');DBMS_SCHEDULER.SET_ATTRIBUTE(NAME => 'SATURDAY_WINDOW',ATTRIBUTE => 'DURATION',VALUE => NUMTODSINTERVAL(8, 'hour'));DBMS_SCHEDULER.ENABLE(NAME => 'SATURDAY_WINDOW');END;/-- 查看启用工作明细COL WINDOW_NAME FOR A20;COL DURATION FOR A15;COL REPEAT_INTERVAL FOR A70;SELECT W.WINDOW_NAME, W.REPEAT_INTERVAL, W.DURATION, W.ENABLED FROM DBA_AUTOTASK_WINDOW_CLIENTS C, DBA_SCHEDULER_WINDOWS W WHERE C.WINDOW_NAME = W.WINDOW_NAME;-- 查看执行记录COL WINDOW_NAME FOR a18;COL DURATION FOR a15;COL JOB_DURATION FOR a15;COL REPEAT_INTERVAL FOR A60;SELECT CH.WINDOW_NAME, W.REPEAT_INTERVAL, W.DURATION JOB_DURATION, TO_CHAR(CH.WINDOW_START_TIME, 'yyyy-mm-dd hh24:mi:ss') EXEC_START_TIME, TO_CHAR(CH.WINDOW_END_TIME, 'yyyy-mm-dd hh24:mi:ss') EXEC_END_TIME, CH.JOBS_CREATED, CH.JOBS_COMPLETED FROM DBA_AUTOTASK_CLIENT_HISTORY CH, DBA_SCHEDULER_WINDOWS W WHERE CH.CLIENT_NAME LIKE '%stats%' AND CH.WINDOW_NAME = W.WINDOW_NAME AND W.ENABLED = 'TRUE' AND WINDOW_START_TIME >= SYSDATE - 7 ORDER BY WINDOW_START_TIME DESC;-- 查看正在执行的主动收集工作SELECT CLIENT_NAME, JOB_NAME, JOB_SCHEDULER_STATUS FROM DBA_AUTOTASK_CLIENT_JOB WHERE CLIENT_NAME = 'auto optimizer stats collection';-- 终止正在运行的主动收集工作exec DBMS_SCHEDULER.DISABLE(NAME => 'FRIDAY_WINDOW');exec dbms_scheduler.stop_job(ORA$AT_OS_OPT_SY_161);exec dbms_scheduler.stop_job(ORA$AT_OS_OPT_SY_161,force);begin DBMS_AUTO_TASK_ADMIN.DISABLE( client_name => 'auto optimizer stats collection', operation => NULL, window_name => NULL );end;/

July 17, 2021 · 2 min · jiezi

关于oracle:Oracle批量生成2PCPENDING-处理SQL分布式锁

着眼立刻解决问题,只生成解决命令,commit;必须执行相干起因自行搜寻查找 set lines 150 pagesize 1000; col PURGE_CMD for a150; select 'execute DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('''||LOCAL_TRAN_ID||''');'||chr(10)||'commit;' as PURGE_CMD from DBA_2PC_PENDING where STATE in ('collecting', 'committed', 'forced rollback', 'forced commit') union all select 'rollback force '''||LOCAL_TRAN_ID||''';'||chr(10)||'commit;' as PURGE_CMD from DBA_2PC_PENDING where STATE = 'prepared';

July 17, 2021 · 1 min · jiezi

关于oracle:批量生成序列重置SQL

产品迭代,同用一个库,或者迁徙后仅清理数据,导致序列几十亿,可能会有一些影响,因而重置,如果生产沿用一些货色,审慎操作。 -- 执行命令生成后果SELECT 'alter sequence ' || SEQUENCE_OWNER || '.' || SEQUENCE_NAME ||' increment by ' || (SQ.MIN_VALUE - SQ.LAST_NUMBER + 500) || ';'||chr(10)|| 'select ' || SEQUENCE_OWNER || '.' || SEQUENCE_NAME ||'.nextval from dual;' ||chr(10)|| 'alter sequence ' || SEQUENCE_OWNER || '.' || SEQUENCE_NAME ||' increment by ' || SQ.INCREMENT_BY || ';' cmd FROM DBA_SEQUENCES SQ WHERE SEQUENCE_OWNER = '&USERNAME' AND SQ.LAST_NUMBER > 10000;-- 替换变量USERNAME为你数据库用户

July 17, 2021 · 1 min · jiezi

关于oracle:转发硬货Oracle数据库出现问题时这十个脚本帮你快速定位原因

“喂,李总您好!” “小张,快点看看ERP数据库,利用又打不开了!” “好的,马上。” 小张从彩色背包拿出电脑,连上手机热点就开始查看,刚连上数据库,电话铃声又响起来了..... 这样的场景对于Oracle DBA来说太相熟了,只有利用一出问题,不管何时,不管何地,总是第一个接到电话,重大状况下会是一轮电话轰炸。 老手和专家之间遇到此类问题,首先是心态,老手遇到问题心里慌,不知从何下手,胆大大意,专家因为经验丰富,往往从容沉着、指挥若定、抽丝剥茧、胆大心细,然而教训这货色就跟吃过的盐、走过的桥一样,必须亲自多做、多学能力取得。而另外一个十分重要的就是诊断思路和辅助脚本,本文讲述各种场景下的通用解决思路,分享用到的一些脚本,帮忙大家疾速定位问题并解决,缩小业务的中断事件,早日成为专家,升职加薪,迎娶... >>>>查看操作系统负载 登上数据库服务器后,第一个就是通过系统命令确认下CPU、内存、I/O是否异样,每个零碎的命令不一样,常见的有top、topas、vmstat、iostat。 >>>>查看期待事件 第二步就是连到数据库查看流动的期待事件,这是监控、巡检、诊断数据库最根本的伎俩,通常81%的问题都能够通过期待事件初步定为起因,它是数据库运行状况最间接的体现,如下脚本是查看每个期待事件的个数、期待时长,并排除了一些常见的IDLE期待事件。 --墨天轮 wait_eventcol event for a45SELECT inst_id,EVENT, SUM(DECODE(WAIT_TIME, 0, 0, 1)) "Prev", SUM(DECODE(WAIT_TIME, 0, 1, 0)) "Curr", COUNT(*) "Tot" , sum(SECONDS_IN_WAIT) SECONDS_IN_WAITFROM GV$SESSION_WAITWHERE event NOTIN ('smon timer','pmon timer','rdbms ipc message','SQL*Net message from client','gcs remote message') AND event NOT LIKE '%idle%' AND event NOT LIKE '%Idle%' AND event NOT LIKE '%Streams AQ%'GROUP BY inst_id,EVENTORDER BY 1,5 desc;这里就须要把握一些常见异样期待事件的起因,并造成条件反射,比方library cache lock、read by other session、row cache lock、buffer busy waits、latch:shared pool、gc buffer busy、cursor: pin S on X、direct path read、log file sync、enq: TX - index contention、PX Deq Credit: send blkd、latch free、enq: TX - row lock contention等等,如果异样期待事件的个数和等待时间很长,那么排查起因的入口就在这里。 ...

July 17, 2021 · 3 min · jiezi

关于oracle:Oracle-查看阻塞锁信息

做监控用的SQL局部,整顿到一列输入次要内容,不喜爱就本人拆开用,或增加其余须要应用的列信息。 解析:1、只输入有阻塞者跟被阻塞者,并且阻塞工夫>=60s局部;2、chr(10)换行输入,sqlplus命令行中可见成果,PLSQL Dev外面没啥用;3、思考执行效率,不查找SQL_TEXT,只抓SQL_ID,Prev_SQL_ID,基于此辅助定位程序问题点;4、最初生成查找锁住数据的语句。SELECT 'Blocker_SID: ' || A.SID || ', ' || A_S.SCHEMANAME || ', From: ' || A_S.MACHINE || ', ' || A_S.PROGRAM || ', Cur_SQL: ' || A_S.SQL_ID || ',Prev_SQL: ' || A_S.PREV_SQL_ID || ', Status:' || A_S.STATUS || ', Lock_Time: ' || A.CTIME || 's.' || CHR(10) || ' -> Locked_SID: ' || B.SID || ', Blocked_SQL: ' || B_S.SQL_ID || ' , Locked_ON: ' || OBJ.OWNER || '.' || OBJ.OBJECT_NAME || ', Lock_Mode: ' || DECODE(A.LMODE, 0, '0,none', 1, '1,NULL', 2, '2,row-S(SS)', 3, '3,row-X(SX)', 4, '4,share(S)', 5, '5,S/Row-X(SSX)', 6, '6,exclusive(X)') || CHR(10) || ' -> Locked_data_query_SQL: ' || (DECODE(OBJ.OBJECT_TYPE, 'TABLE', 'SELECT * FROM ' || OBJ.OWNER || '.' || OBJ.OBJECT_NAME || ' WHERE ROWID = ''' || DBMS_ROWID.ROWID_CREATE(1, OBJ.DATA_OBJECT_ID, B_S.ROW_WAIT_FILE#, B_S.ROW_WAIT_BLOCK#, B_S.ROW_WAIT_ROW#) || ''';', NULL)) AS BLOCK_DETAIL FROM GV$LOCK A, GV$LOCK B, GV$SESSION A_S, GV$SESSION B_S, DBA_OBJECTS OBJ WHERE A.ID1 = B.ID1 AND A.ID2 = B.ID2 AND A.CTIME >= 60 AND A.BLOCK > 0 AND B.REQUEST > 0 AND A.SID = A_S.SID AND A.INST_ID = A_S.INST_ID AND B.SID = B_S.SID AND B.INST_ID = B_S.INST_ID AND B_S.ROW_WAIT_OBJ# = OBJ.OBJECT_ID(+) ORDER BY A.INST_ID, A.SID;附基于SQL_ID查找SQL_TEXT语句: ...

July 17, 2021 · 1 min · jiezi

关于oracle:批量修改sequence-cache

-- 批量批改sequence cacheSELECT 'alter sequence ' || SEQUENCE_OWNER || '.' || SEQUENCE_NAME || ' cache 1000;' INC_SEQ_CMD FROM DBA_SEQUENCES WHERE LAST_NUMBER > 100000 AND CACHE_SIZE < 200 AND SEQUENCE_OWNER IN (SELECT USERNAME FROM DBA_USERS WHERE ACCOUNT_STATUS = 'OPEN' AND USERNAME NOT IN ('SYS', 'SYSTEM', 'ZABBIX', 'DBSNMP', 'MGMT_VIEW', 'SYSMAN')) AND EXISTS (SELECT 1 FROM V$DATABASE WHERE OPEN_MODE = 'READ WRITE' AND DATABASE_ROLE = 'PRIMARY');

July 17, 2021 · 1 min · jiezi

关于oracle:识别表空间非扩展使用率并自动生成添加数据文件脚本

规定能够依据以下规定调整为适宜本人应用的脚本。 辨认表空间(非扩大)使用率>=90%,且残余可用空间<=100000M;辨认数据文件名中\或/之前局部,作为数据文件门路(辨别Windows及Linux);辨认了后缀名,然而增加应用应用了'.dbf',标准;辨认表空间对应数据文件序号的最大号,并以"数据文件门路"+"表空间名字"+"已有数据文件名字数值最大号+1"+".dbf"命名增加新文件;按公司要求,新加数据文件1g递增扩大到24g;WITH SUB_FILE AS (SELECT DISTINCT TABLESPACE_NAME AS TBS_NAME, FILE_NAME, REGEXP_SUBSTR(FILE_NAME, '^.*[\\|\/]') AS PREFIX, -- 获取最初1个'.'及当前字符作为后缀名SUFFIX SUBSTR(FILE_NAME, INSTR(FILE_NAME, '.', -1)) AS SUFFIX, -- 辨认最初一个'.'(没有则从最初一位开始)后面3位为数字的局部,没有则指定默认值'01',有则截取数值局部作为数据文件编号FN NVL(REGEXP_SUBSTR(FILE_NAME, '[0-9]+', DECODE(INSTR(FILE_NAME, '.', -1), 0, LENGTH(FILE_NAME) - 3, INSTR(FILE_NAME, '.', -1)) - 3, 1), 01) AS FN FROM (SELECT TABLESPACE_NAME, -- FILE_NAME 如果没有'.'标识的后缀,查问时增加00.dbf作为文件名,否则原样输入 DECODE(INSTR(FILE_NAME, '.', -1), 0, FILE_NAME || '00.dbf', FILE_NAME) AS FILE_NAME FROM DBA_DATA_FILES DDF WHERE TABLESPACE_NAME IN -- 过滤掉大文件表空间,它只能有一个数据文件 (SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE BIGFILE = 'NO')))SELECT 'ALTER TABLESPACE ' || SFL.TBS_NAME || ' ADD DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' SIZE 1M AUTOEXTEND ON;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 1G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 2G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 3G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 4G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 5G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 6G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 7G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 8G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 9G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 10G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 11G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 12G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 13G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 14G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 15G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 16G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 17G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 18G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 19G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 20G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 21G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 22G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 23G;' || CHR(10) || 'ALTER DATABASE DATAFILE ''' || SFL.PREFIX || SFL.TBS_NAME || (TO_CHAR(SFL.FN + 1, 'FM9900')) || '.dbf'' RESIZE 24G;' AS COMMEND FROM SUB_FILE SFL WHERE (SFL.TBS_NAME, SFL.FN) IN (SELECT SF1.TBS_NAME, MAX(SF1.FN) FROM SUB_FILE SF1 GROUP BY SF1.TBS_NAME) AND SFL.TBS_NAME IN (SELECT D.TABLESPACE_NAME FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) SPACE FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) D, (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024), 2) FREE_SPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+) AND ROUND((1 - NVL(F.FREE_SPACE, 0) / D.SPACE) * 100, 2) >= 90 AND F.FREE_SPACE <= 100000);

July 6, 2021 · 4 min · jiezi

关于oracle:赵强老师使用Oracle的跟踪文件

一、什么是跟踪文件?跟踪文件中蕴含了大量而具体的诊断和调试信息。通过对跟踪文件的解读和剖析,咱们能够定位问题、剖析问题和解决问题。从跟踪文件的产生的起源来看,跟踪文件又能够分为两类:一类是数据库的操作人员无意生成的;另一类则是因为呈现了异样谬误,由数据库主动生成的。对于后一类,只对Oracle外部的技术支持人员是有用的,但对于咱们,则多半看不懂。前一类,则是咱们常常用到的,帮忙咱们剖析、调整和优化利用性能,解决并解决问题。 那么在哪里能够找到跟踪文件呢?通过查问数据字典v$diag_info能够确定跟踪文件的存储门路,如下所示。 select * from v$diag_info; 进入目录/u01/app/oracle/diag/rdbms/orcl/orcl/trace能够看到以trc为后缀的跟踪文件,如下图所示。 二、跟踪文件的命名规定一个跟踪文件的名字个别由以下几局部组成: ORACLE_SID固定字符服务器的过程ID号文件后缀名 .trc各局部之间以下划线连贯。例如:orcl_mmon_12210.trc,其中:“orcl" 是本环境下数据库的SID,"12210"为产生该跟踪文件会话所应用的服务器过程ID号。如何晓得我的ORACLE_SID和会话所应用的服务器过程ID呢? 三、如何确定跟踪文件?为了演示的不便,咱们给一个普通用户scott授予dba的角色。 1、应用治理登录,并授予scott授予dba的角色[oracle@oracle12c ~]$ sqlplus / as sysdbaSQL> grant dba to scott;Grant succeeded.SQL> 2、确定Oracle SID,如下所示。这里的SID就是:orclSQL> select instance_name from V$instance;INSTANCE_NAME----------------orclSQL> 3、切换到scott用户,并确定会话IDSQL> conn scott/tigerConnected.SQL> select sid from v$mystat where rownum=1; SID---------- 70SQL> 4、依据会话ID,确定会话的地址信息SQL> select paddr from v$session where sid=70;PADDR----------------000000006DAB6588SQL> 5、依据会话的地址信息,确定操作系统的过程号SQL> select spid from v$process where addr='000000006DAB6588';SPID------------------------54685SQL> 进入目录/u01/app/oracle/diag/rdbms/orcl/orcl/trace会发现,此时并不存在蕴含54685的跟踪文件,起因是要应用跟踪文件须要手动开启会话的跟踪。 6、开启会话的跟踪SQL> alter session set sql_trace=true;Session altered.SQL> 7、执行一条简略的SQL语句,并查看/u01/app/oracle/diag/rdbms/orcl/orcl/trace目录,这时候就能够看到生成的跟踪文件。[oracle@oracle12c trace]$ pwd/u01/app/oracle/diag/rdbms/orcl/orcl/trace[oracle@oracle12c trace]$ ls *54685.trcorcl_ora_54685.trc[oracle@oracle12c trace]$ 四、应用跟踪文件诊断SQL依据跟踪对于诊断SQL语句是十分有用的,上面通过一个简略的示例来阐明。 ...

June 28, 2021 · 1 min · jiezi

关于oracle:oracle恢复误删除数据

1.关上Flash存储的权限ALTER TABLE tableName ENABLE row movement ;2.把表还原到指定工夫点flashback table tableName to timestamp to_timestamp(''2011-02-28 10:40:00'',''yyyy-mm-dd hh24:mi:ss'');前面的参数为要还原的工夫点tableName:要复原的表名称

June 18, 2021 · 1 min · jiezi

关于oracle:关于架构师角色能力和挑战

简介: 成为一名架构师可能是很多开发者的技术谋求之一。那么如何了解架构?架构师是一个什么样的角色,须要具备什么样的能力?在架构师的路线上,会面临哪些挑战?本文作者道延分享他对架构以及架构师的思考和相干实际,心愿对同学们有所启发。 作者 | 道延起源 | 阿里技术公众号 我叫道延, 2014 年退出阿里,在阿里通信工作了近两年。2016 年年底退出业务平台团队,过后 Leader 找我的第一件事就是要解决大促的问题,第二件事就是解决平安生产的问题。 我带着这个命题进入业务平台,开始了前面的故事。本文和大家分享一下对于这件事和这件事背地的一些想法,以及我对架构师的一些思考。 一 我对技术架构的了解顶层设计 国家每 5 年有五年计划,这其实就是在国家整个层面的一个十分清晰的顶层架构设计,这里面对国民经济重大建设项目和生产力进行宏观的架构设计,实质上也是一种架构设计。在这外面,要做什么事要定义的十分分明,要达到什么样的后果也要定义的十分分明。 双 11 的保障也是须要设计的。双 11 自身是一个业务的流动事件,因为规模比拟大,所以须要很多的技术来撑持这个货色。技术外面咱们可能要思考低成本、高效率、高稳固,并且还要引入一些更多的新技术来撑持,也要把这些货色整合好,架构设计好,让架构能够流畅地撑持业务。 物理架构 咱们有单元化架构,当然很多公司也有相似的架构。然而阿里的单元化架构与其余架构相比有一些实质的区别。 阿里目前单元化架构达到一个什么指标呢?通过部署异地单元将生产流量残缺运行在千里之外的独立机房,从而连续性的运行业务。这几句话外面蕴含了十分多的关键点,一个是异地,第二个是千里之外,第三个是独立,第四个是连续性。 单元化架构的总设计师是毕玄,因为咱们这块业务跟单元化的架构十分相干,所以要对它齐全把握和吃透能力往下走。 利用架构 目前中台外面做的比拟多的叫星环,星环想达到架构的实质目标是将单纯的代码共建模式,形象成横向和纵向的业务包模式,做到业务与业务隔离,业务与平台隔离。 这背地带来的问题是什么?咱们原来产生用共建的形式撑持了 50 多个 BU 的会员、商品、交易、营销、资金、领取、库存逆向等业务,其实每个外面都是遍地开花的 if else,这就导致代码的合并也难,开发也难,测试也难,上线也难,整个过程都很苦楚。所以在 2015 年做星环的架构时,就是让这些货色不那么苦楚,缓缓地解决这些问题。 二 架构师是一个什么样的角色对于架构师的角色,我来说说本人的想法。 形散而神不散 架构其实是每个业务线都有,有些技术同学自身也是架构师的角色。阿里很早以前是专门有架构师岗位,专门的去做架构,然而做着做着架构师就做没了。因为很不接地气,它没有解决具体、实在、理论的问题。但当初,阿里的架构师岗位逐步减少了,他们的价值在于形象这些技术问题,解决这些问题。所以第一点是形散神不散。优良的技术同学始终在用架构的意识,解决理论的技术和业务问题,这就跟一般的技术同学有实质的区别。他不光是解决这一个问题,他可能解决这一类问题,用架构的思维去解决问题。 前瞻性 为什么你能解决这个问题,并且能解决这一类问题?肯定是须要你看的多,想的多,这背地是大量的实际和常识的积攒,并且是站在过来的肩膀上。 阿里电商零碎很早就建设了,咱们这一代一代人在外面去做架构,都是站在前一代人的肩膀上。要去看前一代人为什么要这么设计,去想或跟他去聊,汲取他好的中央。当初可能遇到新的问题,通过其余的办法来解决一些新的问题,须要有实际和常识的积攒。 接触更多的人和事,用新办法解决新问题,这个很要害。不能只看代码看一个月,要找实在的业务方,你的上游、上游、合作伙伴。比如说做双 11,我是 2016年12月到业务平台,我花了整整三个月,跟每年双 11 的大队长、重要人去聊双 11。他们是怎么了解,怎么来思考的,他们认为什么中央有问题。我再找他们要一些倡议:我应该怎么去做。跟他们聊的过程中才晓得咱们须要做什么样的大促,要把握什么是关键点,这都是一些贵重的财产。 解决简单问题 好的架构师都在解决简单的问题。只有简单的问题,它才须要更多不一样的技术或更新的技术来彻底解决。高并发高可用是阿里电商面临的根本问题,然而架构师要有不一样的高并发和高稳定性的解决思路。 以后最紧急的问题,比如说用户体验、晋升效率、低成本等,这些问题其实是非常复杂的。很多同学都想解决这个问题,很多种办法都在解决,然而整体来说成果不是特地显著。因为它链路太长了,链路长代表影响的业务和影响的人更多,你必须得换一种新的思路来思考这个问题。同时用户分层,外部的技术人员增多,这就倒逼咱们去把简单的问题简化,所以我会把解决简单问题定义为架构师的一个典型角色。 三 架构师须要什么样的能力架构师须要什么样的能力?我参考了里面一些同学的分享,总结进去其实就是发现问题、剖析定义问题、解决问题。 发现问题 对部分和全局的问题须要有发现的眼光,更应该有发现未产生问题的能力,哪些须要治本,哪些须要治标,这是发现问题的根本判断力。当初零碎可能没什么大问题,但你要有发现的眼光,这些问题如果不解决,将来业务可能遇到更重大的问题。架构师看问题的眼光和他人不一样,不要只看见眼前这一个问题,还要看见这个问题背地是什么,这一类问题背地是什么,我怎么能用形象的办法解决一类问题。想好了当前,我就把以后的这个问题先解决掉,其余的问题用形象的形式去解决它。 定义和剖析问题 阿里不缺解决问题的同学,然而缺定义问题的同学。你怎么晓得这是个问题,并且把这个问题定义分明。须要将发现的问题进行形象和演绎,定义出问题的基本要素,同时定义出问题的短期和长期计划,推动技术整体的提高。 定义问题这个要求十分高。大家平时在解决业务技术问题的时候,也须要具备剖析和定义问题的能力,把一个问题定义分明了,能够真正推动业务往后退。 解决问题 解决问题须要施行门路和解决方案,协同团队和上下游,推动问题的解决。架构要解决的问题肯定不是一个部分问题,肯定是一个全局问题。架构师肯定会碰到各种各样的角色和链路,他要有这个能力去定义问题的解决方案和施行门路,同时要协同团队。他不能闷头做事,真的要低头,并且要有良好的沟通能力,跟所有的同学达成共识能力往后退。 第一点就是沟通能力十分要害。你怎么把这个问题说分明,切中问题的点,同时也能帮忙上下游带来理论的成果。第二点是架构师须要能救火,但不仅仅是救眼前的火,应该救将来的火,架构师救火能力要很强。 我来阿里之前在做一个 CRM 零碎。起初我要解决很多业务的问题,要把它形象进去,去做业务问题上面的根底平台。再起初发现根底平台的问题如果要解决得更彻底,还要做上面的中间件,这样层层深刻就会把整个链路买通看懂。 ...

June 7, 2021 · 1 min · jiezi

关于oracle:阿里云开源PolarDB数据库与社区共建云原生分布式数据库生态

简介:5月29日,阿里云开发者大会上,阿里巴巴发表开源云原生数据库能力,对外开放关系型数据库PolarDB for PostgreSQL 源代码,服务百万开发者,与社区开发者一起共建云原生分布式数据库生态。“咱们心愿将阿里云在云原生分布式数据库技术上积攒的丰盛教训,通过规范技术组件和零碎的形式凋谢进去,共建开源数据库生态。”阿里云智能数据库产品事业部负责人李飞飞示意。数据库是根底软件中的刚需,与芯片、操作系统并列为“寰球技术三大件”。开源模式广受数据库用户欢送,被认为是互联网场景的标配。 十余年间,阿里巴巴数据库实现了从商用、开源到自研的倒退门路,并以迅猛之势造成山河,市场份额稳居寰球前三,亚太第一,在国内遥遥领先。自2018年起,阿里云数据库间断三年进入Gartner数据库魔力象限,并在2020年进入Gartner寰球数据库领导者象限,成为在根底软件畛域首次进入领导者的中国企业,代表中国数据库真正走进世界一流。 2009年,阿里巴巴基于MySQL打造AliSQL分支,在外部替换了Oracle;2015年,阿里云推出云原生数据仓库AnalyticDB,反对PB级数据实时剖析;2017年,又公布云原生关系型数据库PolarDB,主打存储计算拆散,雷同性能下老本是商用数据库的1/10。 为满足云上用户多样化的需要,PolarDB针对不同的数据库协定开发了不同的兼容版本, 别离包含兼容MySQL, PostgreSQL和Oracle的版本,和每个版本的分布式状态。此次率先开源的是兼容PostgreSQL协定的PolarDB for PostgreSQL分布式版,包含数据库内核、相干插件、工具脚本、测试用例以及设计文档,实用于中大型企业外围业务场景。本次开源遵循Apache Version 2.0协定,以全共享并尊重原作者著作权的模式开源,代码能够批改和再公布。目前基于Paxos复制的高可用集群版已公布在Github上,后续将引入分布式事务、高可用和单机高性能等能力。 “咱们始终放弃与开源社区的亲密沟通。将来,阿里云也会建设本人的开源社区,以更快的响应速度来解决更多业务问题和需要。”李飞飞示意,阿里云将加大开源数据库社区投入,与合作伙伴、开发者独特打造生态,凋敝分布式数据库生态,推动技术改革。 源码凋谢地址:https://github.com/alibaba/PolarDB-for-PostgreSQL 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 4, 2021 · 1 min · jiezi

关于oracle:date-format-picture-ends-before-converting-entire-input-string

向oracle数据表中插入记录时报错:ORA-01858: date format picture ends before converting entire input string插入失败的sql语句:insert into user_baseinfo(id, end_date)values(1, to_date('2020-01-01 01:01:01.000', 'yyyy-MM-dd'));起因剖析:传入的日期格局和给定的格局不对应批改之后的sql,胜利插入表中insert into user_baseinfo(id, end_date)values(1, to_date('2020-01-01', 'yyyy-MM-dd'));

April 9, 2021 · 1 min · jiezi

关于prometheus:Prometheus监控Oracle数据库

背景本文简略介绍下,Prometheus如何通过exporters监控Oracle数据库,以及应该留神哪些指标。 oracledb_exporteroracledb_exporter是一个连贯到Oracle数据库并生成Prometheus metrics的应用程序, 设置展现下如何装置和设置oracledb_exporter,以应用Prometheus来监控Oracle数据库。oracledb_exporter部署在k8s集群中 在k8s应用Deployment部署oracledb_exporter,并增加注解,以实现Prometheus主动发现oracledb_exporter断点并收集指标 spec: template: metadata: annotations: prometheus.io/scrape: "true" prometheus.io/port: "9161" prometheus.io/path: "/metrics"oracledb_exporter须要Oracle的连贯信息能力拜访和生成指标,此参数作为环境变量传递到exporter。因为连贯信息蕴含用于拜访数据库的用户和明码,因而咱们将应用Kubernetes Secret来存储它。 要创立到Oracle数据库的连贯字符串的明码,能够应用以下命令: kubectl create secret generic oracledb-exporter-secret \ --from-literal=datasource='YOUR_CONNECTION_STRING'在deployment中,这样配置环境变量 env: - name: DATA_SOURCE_NAME valueFrom: secretKeyRef: name: oracledb-exporter-secret key: datasource要确保连贯信息是否正确: system/password@//database_url:1521/database_name.your.domain.com能够应用 sqlplus docker镜像进行检测 docker run --net='host' --rm --interactive guywithnose/sqlplus sqlplus system/password@//database_url:1521/database_name.my.domain.com上面增加一些自定义指标,包含慢查问(slow queries),谬误查问(bug queries)为了应用自定义指标: 在deployment中,咱们将增加另一个环境变量,该变量具备到新指标的文件的路由。从ConfigMap将此新文件挂载为volume残缺配置如下: apiVersion: apps/v1kind: Deploymentmetadata: name: oracledb-exporter namespace: database-namespacespec: selector: matchLabels: app: oracledb-exporter replicas: 1 template: metadata: labels: app: oracledb-exporter annotations: prometheus.io/scrape: "true" prometheus.io/port: "9161" prometheus.io/path: "/metrics" spec: containers: - name: oracledb-exporter ports: - containerPort: 9161 image: iamseth/oracledb_exporter env: - name: DATA_SOURCE_NAME valueFrom: secretKeyRef: name: oracledb-exporter-secret key: datasource - name: CUSTOM_METRICS value: /tmp/custom-metrics.toml volumeMounts: - name: custom-metrics mountPath: /tmp/custom-metrics.toml subPath: custom-metrics.toml volumes: - name: custom-metrics configMap: defaultMode: 420 name: custom-metrics ConfigMap: ...

April 1, 2021 · 3 min · jiezi

关于oracle:Oracle在执行导入dmp文件时报错6550

Oracle在执行导入dmp文件时报错6550在导入语句中增加 STATISTICS=NONE  解决问题 STATISTICS的值:阐明:指定导入时对于数据库统计信息如何解决 有如下选项: 缺省值:ALWAYS  总是导入数据库统计信息.NONE  不导入数据库统计信息.SAFE  当dmp中统计住处没有问题时导入数据库统计信息,如果有问题,则从新生成统计信息.RECALCULATE  总是从新生成统计信息.————————————————版权申明:本文为CSDN博主「醉书生ꦿ℘゜」的原创文章,遵循CC 4.0 BY-SA版权协定,转载请附上原文出处链接及本申明。原文链接:https://blog.csdn.net/zslsh44...

March 30, 2021 · 1 min · jiezi

关于oracle:Oracle基础之二oracle视图用户管理序列DML事务索引数据库设计三范式

一、视图1、视图(view),也称虚构表,不占用物理空间,这个也是绝对概念,因为视图自身的定义语句还是要存储在数据字典里的。视图只有逻辑定义。每次应用的时候,只是从新执行SQL。2、视图是从一个或多个理论表中取得的,这些表的数据寄存在数据库中。那些用于产生视图的表叫做该视图的基表,一个视图也能够从另一个视图中产生3、视图的定义存在数据库中,与此定义相干的数据并没有再存一份于数据库中。通过视图看到的数据寄存在基表中4、视图看上去十分像数据库的物理表,对他的操作同任何其余的表一样,当通过视图批改数据时,实际上是在扭转基表中的数据,相同地,基表数据的扭转也会主动反映在由基表产生的视图中,因为逻辑上的起因,有些Oracle视图能够批改对应的基表,有些则不能(仅仅能查问)1、创立视图,应用视图 --创立视图:如果普通用户第一次创立视图,提醒没有权限,要应用管理员去批改权限--grant create view to scott;--revoke create from scott;回收权限create view v_emp as select * from emp where deptno = 30;--视图的应用select * from v_emp;--向视图中增加数据insert into v_emp(empno,ename) values(1111,'zhangsan');select * from emp;--如果定义的视图是非只读视图的话,能够通过视图向表中插入数据,如果是只读视图,则不能够插入数据create view v_emp2 as select * from emp with read only;select * from v_emp2;--只读视图只提供查问的需要,无奈进行增删改操作insert into v_emp2(empno,ename) values(1234,'lisi');--删除视图drop view v_emp2;--当删除视图中的数据的时候,如果数据来源于多个基表,--则此时不能全副进行删除,只能删除一个表中的数据--求均匀薪水的等级最低的部门,他的部门名称是什么,咱们齐全应用子查问--(1)求均匀薪水select avg(sal) from emp group by deptno;--(2)求均匀薪水的等级select t.deptno,sg.grade gd from salgrade sg join (select deptno,avg(sal) vsal from emp group by deptno)ton t.vsal between sg.losal and sg.hisal--(3)求均匀薪水的等级最低的部门select min(t1.gd) from (select t.deptno,sg.grade gd from salgrade sg join (select deptno,avg(sal) vsal from emp group by deptno)ton t.vsal between sg.losal and sg.hisal)t1--(4)求均匀薪水的等级最低的部门名称select d.dname, d.deptno from dept d join (select t.deptno, sg.grade gd from salgrade sg join (select e.deptno, avg(e.sal) vsal from emp e group by e.deptno) t on t.vsal between sg.losal and sg.hisal) t on t.deptno = d.deptno where t.gd = (select min(t1.gd) from (select t.deptno, sg.grade gd from salgrade sg join (select deptno, avg(sal) vsal from emp group by deptno) t on t.vsal between sg.losal and sg.hisal) t1)--查看SQL语句能发现,sql中有很多的反复的sql子查问,能够通过视图将反复的语句给形象进去create view v_deptno_grade as select t.deptno,sg.grade gd from salgrade sg join (select deptno,avg(sal) vsal from emp group by deptno)ton t.vsal between sg.losal and sg.hisal;--应用视图替换select d.dname, d.deptno from dept d join v_deptno_grade t on t.deptno = d.deptno where t.gd = (select min(t1.gd) from v_deptno_grade t1)二、用户治理 ...

March 26, 2021 · 3 min · jiezi

关于oracle:Oracle基础之一Oracle-11安装与介绍

一、数据库介绍1、关系型数据库(1)Mysql(用的最多)(2)Oracle(最平安)(3)Sql server(.net)(4)Db2(金融、银行)2、非关系型数据库(1)Hbase(2)Redis(3)mongodb3、Oracle介绍1、数据库版本 (1)Oracle 8及8i:示意的Internet,向网络倒退,适度版本,只有一张vcd,8i是适度性产品(2)Oracle9i:是之前应用最宽泛的版本,8i的升级版,1CD(3)Oracle 10g:700M过渡性产品,其中g示意的是网格计算,以立体网格,以核心查找(4)Oracle 11g:完整性产品,最新版本2G(5)Oracle 12c:the world's first database designed for the cloud2、用户 (1)sys 超级管理员(2)system 一般管理员(3)scott 一般的用户3、示例-->数据库 (1)数据库实例名 对立应用orcl二、Oracle装置1、装置文档链接:https://pan.baidu.com/s/1OXZt... 提取码:6666 2、装置实现后会有如下服务 3.1 Oracle服务的作用装置oracle 11g R2中的办法胜利装置Orcle 11g后,共有7个服务,这七个服务的含意别离为: (1)Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)可能让存储根底设施(比方磁盘,阵列等)创立高保真的工夫点映像,即映射拷贝(shadow copy),它能够在多个卷或者单个卷上创立映射拷贝,同时捕捉影响到零碎的零碎性能。(非必须启动)(2)OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,须要启动这个服务。(非必须启动)(3)OracleJobSchedulerORCL:Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。(非必须启动)(4)OracleMTSRecoveryService:服务端管制,该服务容许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器。(非必须启动)(5)OracleOraDb11g_home1ClrAgent:Oracle数据库.NET扩大服务的一部分。(非必须启动)(6)OracleOraDb11g_home1TNSListener:监听器服务,服务只有在数据库须要近程拜访的时候才须要。(必须启动,上面会有具体解释)(7)OracleServiceORCL:数据库服务(数据实例),是Oracle外围服务,该服务是数据库启动的根底,只有该服务启动,Oracle数据库能力失常启动(必须启动)3.2开发的时候须要启动哪些服务对老手来说,要是只有Oracle自导的sql*plus的话,只有启动OracleServiceORCL即可,要是应用PL/SQL Developer等第三方工具的话,OracleOraDb11g_home1TNSListener服务也要开启,OracleDBConsoleorcl是进入基于web的EM必须开启的,其余服务很少用注:ORCL是数据库实例名,默认的数据库是ORCL,你能够创立其余的,即OrcleService+数据库名 3、卸载文档链接:https://pan.baidu.com/s/1OXZt... 提取码:6666 三、账号治理 四、SQL语言1、结构化查询语言(Structured Query Language)具备定义,查问,更新和管制等多种性能,是关系数据库的规范语言 2、sql分类2.1 DML:数据操纵语言 Data Manipulation Language:SELECT INSERT UPDATE DELETE 2.2 DDL:数据定义语言 Data definition languageCREATE ALTER DROP RENAME TRUNCATE 2.3 DCL:数据管制语言 Data Control LanguageGRANT REVOKE 2.4 Transaction:commit rollback savepoint ...

March 24, 2021 · 8 min · jiezi

关于oracle:Oracle-固定执行计划之SqlPatch二

明天在19c上又做了一次SqlPatch,发现上次写的在11gR2的办法总是报错,于是又看了19c的Online Documents。更新了一下SqlPatch的做成办法。 做成TEST用户和Table,Index。 SQL> grant connect,resource,unlimited tablespace to test3 identified by test3; 権限付与が胜利しました。 SQL> grant administer sql management object to test3; 権限付与が胜利しました。 SQL> conn test3/test3@localhost:1521/pdb 接続されました。 SQL> create table tab2(c1 number, c2 number, c3 varchar2(10)); 表が作成されました。 SQL> declare a number; begin a := 1; for i in 1 .. 50 loop for j in 1 .. 100 loop insert into tab2 values(a,j,'a'); commit; a := a+1; end loop; end loop; end; / PL/SQLプロシージャが失常に完了しました。 SQL> create index ind2_2 on tab2(c2); 索引が作成されました。2. 做成SQLPATCH。 ...

March 15, 2021 · 1 min · jiezi

关于oracle:Oracle等待事件之buffer-busy-waits

产生起因官网定义: This wait happens when a session wants to access a database block in the buffer cache but it cannot as the buffer is "busy". The two main cases where this can occur are: Another session is reading the block into the bufferAnother session holds the buffer in an incompatible mode to our request模仿期待创立测试表并插入数据: SQL> create table tb1 (id int ,name varchar2(10));Table created.SQL> insert into tb1 values (1,'scott');1 row created.SQL> insert into tb1 values (2,'tom');1 row created.SQL> commit;Commit complete.会话1批改数据: ...

February 10, 2021 · 3 min · jiezi

关于oracle:表连接方法

Oracle表连贯办法有四种: 排序合并连贯(Sort Merge Join)嵌套循环连贯(Nested Loops Join)哈希连贯(Hash Join)笛卡尔积(Cartesian Product)排序合并连贯(Sort Merge Join)排序合并连贯是将连贯的两个表应用连贯列排序后,对排序后的后果集进行合并后再失去匹配记录。如果连贯列下面有索引,能够防止排序,那么优化器就有可能会抉择排序合并连贯。能够用于=,>,>=,<,<=连贯条件,不适用于<>,like连贯条件。对应执行打算为SORT JOIN和MERGE JOIN 。 SQL> select e.employee_id,e.last_name,d.department_name from employees e,departments d where e.department_id=d.department_id;106 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 1343509718--------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 106 | 3286 | 6 (17)| 00:00:01 || 1 | MERGE JOIN | | 106 | 3286 | 6 (17)| 00:00:01 || 2 | TABLE ACCESS BY INDEX ROWID| DEPARTMENTS | 27 | 432 | 2 (0)| 00:00:01 || 3 | INDEX FULL SCAN | DEPT_ID_PK | 27 | | 1 (0)| 00:00:01 ||* 4 | SORT JOIN | | 107 | 1605 | 4 (25)| 00:00:01 || 5 | TABLE ACCESS FULL | EMPLOYEES | 107 | 1605 | 3 (0)| 00:00:01 |----------------------------------------------------------------------------------------------如果没有索引,则会抉择哈希连贯:SQL> create table emp as select * from employees;Table created.SQL> create table dept as select * from departments;Table created.SQL> select e.employee_id,d.department_name from emp e,dept d where e.department_id=d.department_id;106 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 615168685---------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 106 | 5936 | 6 (0)| 00:00:01 ||* 1 | HASH JOIN | | 106 | 5936 | 6 (0)| 00:00:01 || 2 | TABLE ACCESS FULL| DEPT | 27 | 810 | 3 (0)| 00:00:01 || 3 | TABLE ACCESS FULL| EMP | 107 | 2782 | 3 (0)| 00:00:01 |-----------------------------------------------------------------------------如果应用不等连贯条件,则会抉择嵌套循环连贯:SQL> select e.employee_id,d.department_name from employees e,departments d where e.department_id!=d.department_id;2756 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 2968905875----------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 2757 | 63411 | 41 (0)| 00:00:01 || 1 | NESTED LOOPS | | 2757 | 63411 | 41 (0)| 00:00:01 || 2 | TABLE ACCESS FULL| DEPARTMENTS | 27 | 432 | 3 (0)| 00:00:01 ||* 3 | TABLE ACCESS FULL| EMPLOYEES | 102 | 714 | 1 (0)| 00:00:01 |----------------------------------------------------------------------------------嵌套循环连贯(Nested Loops Join)嵌套循环连贯是Oracle将连贯的两个表依据后果集的大小,决定出驱动表和被驱动表。后果集小的作为驱动表,后果集大的作为被驱动表。对于驱动表的每一行,都要与被驱动表的所有行应用连贯条件进行匹配。实用于驱动表后果集很小,被驱动表在连贯列上有高效索引的表连贯。能够用于所有连贯条件。对应的执行打算为NESTED LOOPS。 ...

February 9, 2021 · 10 min · jiezi

关于oracle:分析函数

概念官网定义: Analytic functions compute an aggregate value based on a group of rows. They differ from aggregate functions in that they return multiple rows for each group. The group of rows is called a window and is defined by the analytic_clause. For each row, a sliding window of rows is defined. The window determines the range of rows used to perform the calculations for the current row. Window sizes can be based on either a physical number of rows or a logical interval such as time.Analytic functions are the last set of operations performed in a query except for the final ORDER BY clause. All joins and all WHERE, GROUP BY, and HAVINGclauses are completed before the analytic functions are processed. Therefore, analytic functions can appear only in the select list or ORDER BY clause. ...

February 8, 2021 · 15 min · jiezi

关于oracle:外键与死锁

要剖析外键无索引可能会导致死锁问题,须要先理解Oracle的几种表锁,参考官网文档: A table lock, also called a TM lock, is acquired by a transaction when a table is modified by an INSERT, UPDATE, DELETE, MERGE, SELECT with the FOR UPDATE clause, or LOCK TABLE statement. DML operations require table locks to reserve DML access to the table on behalf of a transaction and to prevent DDL operations that would conflict with the transaction. A table lock can be held in any of the following modes: ...

February 7, 2021 · 9 min · jiezi

关于oracle:Oracle-使用SqlProfile固定执行计划

明天给大家讲一下另外一种固定执行打算的办法:SqlProfile。 1.获得不加Hint的执行打算。 SQL> conn test/test接続されました。SQL> explain plan for select * from tab2 where c2=2;解析されました。SQL> select * from table (dbms_xplan.display(format=>'advanced'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------------------------Plan hash value: 2156729920--------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 50 | 450 | 5 (0)| 00:00:01 ||* 1 | TABLE ACCESS FULL| TAB2 | 50 | 450 | 5 (0)| 00:00:01 |--------------------------------------------------------------------------Query Block Name / Object Alias (identified by operation id):------------------------------------------------------------- 1 - SEL$1 / TAB2@SEL$1Outline Data------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "TAB2"@"SEL$1") OUTLINE_LEAF(@"SEL$1") ALL_ROWS DB_VERSION('11.2.0.4') OPTIMIZER_FEATURES_ENABLE('11.2.0.4') IGNORE_OPTIM_EMBEDDED_HINTS END_OUTLINE_DATA */Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("C2"=2)Column Projection Information (identified by operation id):----------------------------------------------------------- 1 - "TAB2"."C1"[NUMBER,22], "C2"[NUMBER,22], "TAB2"."C3"[VARCHAR2,10]37行が選択されました。2.获得加Hint的执行打算。 ...

February 5, 2021 · 2 min · jiezi

关于oracle:Oracle-使用SqlPatch固定执行计划

明天咱们来做一个应用SqlPatch固定执行打算的TEST. 1.做TEST用TABLE. create table tab2(c1 number, c2 number, c3 varchar2(10));declare a number;begin a := 1; for i in 1 .. 50 loop for j in 1 .. 100 loop insert into tab2 values(a,j,'a'); commit; a := a+1; end loop; end loop;end;/create index ind2_2 on tab2(c2);2.察看SQLPLAN SQL> conn test/testSQL> explain plan for select * from tab2 where c2=1;解析されました。SQL> select * from table (dbms_xplan.display(format=>'advanced'));PLAN_TABLE_OUTPUT------------------------------------------------------------------------------------------------------------------------Plan hash value: 2156729920--------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 50 | 450 | 5 (0)| 00:00:01 ||* 1 | TABLE ACCESS FULL| TAB2 | 50 | 450 | 5 (0)| 00:00:01 |--------------------------------------------------------------------------Query Block Name / Object Alias (identified by operation id):------------------------------------------------------------- 1 - SEL$1 / TAB2@SEL$1Outline Data------------- /*+ BEGIN_OUTLINE_DATA FULL(@"SEL$1" "TAB2"@"SEL$1") OUTLINE_LEAF(@"SEL$1") ALL_ROWS DB_VERSION('11.2.0.4') OPTIMIZER_FEATURES_ENABLE('11.2.0.4') IGNORE_OPTIM_EMBEDDED_HINTS END_OUTLINE_DATA */Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("C2"=1)Column Projection Information (identified by operation id):----------------------------------------------------------- 1 - "TAB2"."C1"[NUMBER,22], "C2"[NUMBER,22], "TAB2"."C3"[VARCHAR2,10]37行が選択されました。3.通过Hint做成应用Index Scan的SQLPLAN ...

February 4, 2021 · 3 min · jiezi

关于oracle:静默安装Oracle也没那么恐怖

几种必须静默装置的状况服务器为了缩小资源占用,没装置图形组件不能进入机房,只能近程SSH想炫(Z)耀(B),静默装置显得有技术含量磁盘分区要求如没有特地要求,装机时可按如下分区比拟好治理 /boot ext3 100M Swap swap 32G #个别和内存一样大 /u01 ext3 800G #Oracle装置目录和数据库数据文件寄存目录,大小要大于预估的全副数据量/opt ext3 5G /tmp ext3 2G / ext3 残余空间 装置步骤纲要没明确指出操作账号的步骤,请认真看命令后面是井号还是美元,井号就是用root做的,美元就是用oracle做的。装前查看创立组和用户批改内核参数批改用户限度敞开SELinux及防火墙创立装置目录设置环境变量执行runInstaller装置Oracle执行dbca建设数据库配置tnsnames.ora执行lsnrctl启动监听,PLSQL连贯装置前查看两个安装包 linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip Oracle版本是11.2.0.1.0 Linux版本Red Hat Enterprise Linux Server release 6.6 (Santiago) 物理内存查看: 至多4G,查看物理内存命令: # grep MemTotal /proc/meminfo虚拟内存查看: 物理内存4-8G,虚拟内存为2倍物理内存; 物理内存8-32G,虚拟内存为1.5倍物理内存; 物理内存>32G,虚拟内存等于物理内存; 查看虚拟内存命令: # grep SwapTotal /proc/meminfo依赖包查看 rpm -q \binutils \compat-libstdc++-33 \elfutils-libelf \elfutils-libelf-devel \elfutils-libelf-devel-static \expat \gcc \gcc-c++ \glibc \glibc-common \glibc-devel \glibc-headers \libaio \libaio-devel \libgcc \libstdc++ \libstdc++-devel \make \ksh \sysstat \numactl-devel \kernel-headers \libgomp \unixODBC \unixODBC-devel | grep "not installed"|awk '{print $2;}'输出上面几个包,阐明零碎没有 ...

February 1, 2021 · 6 min · jiezi

关于oracle:EditionBased-Redefinition

Oracle在11g引入了Edition-Based Redefinition(EBR),次要是为了解决在更新数据库对象,比方PL/SQL程序,视图等,如果该对象被锁住了,会导致更新必须期待,如果要使更新立刻实现,则须要进行利用的问题。实现形式就是通过创立版本,新的代码在子版本实现,通过指定版本来对新旧版本代码进行切换。 这个性能次要用在有大量PL/SQL程序的数据库,例如Oracle EBS数据库。 EBR通过版本化的形式可实现以下指标: 代码的扭转,包含PL/SQL,表定义等,装置在子(新)版本中数据的扭转只写到新的表或新的列,父(老)版本不会看到跨版本触发器将父(老)版本利用所做扭转反映到子(新)版本中,反之亦然EBR依赖于3类新的对象,即edition、editioning view和crossedition trigger。 若只扭转视图,同义词和PL/SQL对象,edition就够了若表构造和数据的扭转并是在后端实现,不波及终端用户,则只需edition和editioning view若表构造和数据的扭转是由终端用户发动,则三者都须要Edition版本化和非版本化对象Edition是非Schema对象,不属于任何用户,从11gR2开始,每个数据库都有一个默认版本,即ORA$BASE。 SQL> show edition EDITION------------------------------ORA$BASESQL> SELECT SYS_CONTEXT('userenv', 'current_edition_name') from dual;SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')--------------------------------------------------------------------------------ORA$BASESQL> select edition_name,parent_edition_name,usable from dba_editions;EDITION_NAME PARENT_EDITION_NAME USA------------------------------ ------------------------------ ---ORA$BASE YES可版本化对象不是所有的模式对象都是可版本化(editionable )的,可版本化的模式对象有: SYNONYMVIEWAll PL/SQL object types: FUNCTIONLIBRARYPACKAGE and PACKAGE BODYPROCEDURETRIGGERTYPE and TYPE BODY除此之外,其余对象,例如表,私有同义词,都是不反对版本化的。 如果可版本化对象的所有者是editions-enabled ,则该对象是editioned ,否则该对象是potentially editioned。 版本化对象规定A noneditioned object cannot depend on an editioned object. For example: A public synonym cannot refer to an editioned object.A function-based index cannot depend on an editioned function.A materialized view cannot depend on an editioned view.A table cannot have a column of a user-defined data type (collection or Abstract Data Type (ADT)) whose owner is editions-enabled.A noneditioned subprogram cannot have a static reference to a subprogram whose owner is editions-enabled.For the reason for this rule, see "Actualizing Referenced Objects". ...

January 29, 2021 · 8 min · jiezi

关于oracle:Oracle如何用内置脚本查堵塞

在诊断对于锁的问题的时候,要查到持有者,被梗塞者。往往是很麻烦,如果你没有积攒的脚本,靠手工查要查很多表,如v$lock,v$process p, v$session s, v$latchholder等。当初有个简略的办法,应用Oracle的内置脚本生成两个视图dba_waiters和dba_blockers来查梗塞。执行内置脚本要在SYS中执行,如下: C:Documents and Settingsguogang>sqlplus / as sysdba; SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 1月 24 08:26:42 2014Copyright (c) 1982, 2005, Oracle. All rights reserved.连贯到:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining optionsSQL> @?/rdbms/admin/catblock.sql视图已创立。 同义词已创立。 ......................... 试验: 模仿DML锁 session1: select * from test for update; session2: select * from test for update; session3: SQL> select * from dba_waiters; ...

January 27, 2021 · 1 min · jiezi

关于oracle:ORACLE19c新功能TXT格式listener-log自动Rotation

19c之前的版本,ORACLE数据库的TXT格局listener log不能被主动循环治理(Mos 1744876.1),给使用者造成了很大累赘。 19c开始,导入了一下两个参数: https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/oracle-net-listener-parameters-in-listener-ora.html#GUID-FF94A234-A29C-46AA-8770-4CA1BFB5C27C #### 7.5.3 LOG_FILE_NUM_listener_nameThe LOG_FILE_NUM_listener_name is a diagnostic parameter of the listener.ora file that specifies the number of log file segments.PurposeTo specify the number of log file segments. At any point of time there can be only n log file segments where n is LOG_FILE_NUM_listener_name. If the log grows beyond this number, then the older segments are deleted.DefaultNo default. If you don't specify a value, or set the value to zero, then the number of segments grows indefinitely.ValuesAny integer value.Example 7-9LOG_FILE_NUM_listener=3#### 7.5.4 LOG_FILE_SIZE_listener_nameThe LOG_FILE_SIZE_listener_name diagnostic parameter of thelistener.ora file specifies the size of each log file segment.PurposeTo specify the size of each log file segment. The size is in MB.Default300 MBValuesAny integer value.Example 7-10 ExampleLOG_FILE_SIZE_listener=10通过下面的参数,TXT格局的listener log和XML格局的listener log一样能够主动循环治理了。 ...

January 20, 2021 · 2 min · jiezi

关于oracle:ORACLE-SQL性能优化

oracle数据库性能优化1. 拜访Table的形式ORACLE 采纳两种拜访表中记录的形式: a.全表扫描 全表扫描就是程序地拜访表中每条记录. ORACLE采纳一次读入多个数据块(database block)的形式优化全表扫描. b. 通过ROWID拜访表 你能够采纳基于ROWID的拜访形式状况,进步拜访表的效率, , ROWID蕴含了表中记录的物理地位信息..ORACLE采纳索引(INDEX)实现了数据和存放数据的物理地位(ROWID)之间的分割. 通常索引提供了快速访问ROWID的办法,因而那些基于索引列的查问就能够失去性能上的进步. 2. 共享Sql语句为了不反复解析雷同的SQL语句,在第一次解析之后, ORACLE将SQL语句寄存在内存中.这块位于零碎全局区域SGA(system global area)的共享池(shared buffer pool)中的内存能够被所有的数据库用户共享. 因而,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快取得曾经被解析的语句以及最好的执行门路. ORACLE的这个性能大大地进步了SQL的执行性能并节俭了内存的应用. 惋惜的是ORACLE只对简略的表提供高速缓冲(cache buffering) ,这个性能并不适用于多表连贯查问. 数据库管理员必须在init.ora中为这个区域设置适合的参数,当这个内存区域越大,就能够保留更多的语句,当然被共享的可能性也就越大了. 当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找雷同的语句. 这里须要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须完全相同(包含空格,换行等). 共享的语句必须满足三个条件: A. 字符级的比拟: 以后被执行的语句和共享池中的语句必须完全相同. 例如: SELECT * FROM EMP; 和下列每一个都不同 SELECT * from EMP; Select * From Emp; SELECT * FROM EMP; 3. (*)抉择最有效率的表名程序(只在基于规定的优化器中无效)ORACLE的解析器依照从右到左的程序解决FROM子句中的表名,因而FROM子句中写在最初的表(根底表 driving table)将被最先解决. 在FROM子句中蕴含多个表的状况下,你必须抉择记录条数起码的表作为根底表.当ORACLE解决多个表时, 会使用排序及合并的形式连贯它们.首先,扫描第一个表(FROM子句中最初的那个表)并对记录进行排序,而后扫描第二个表(FROM子句中最初第二个表),最初将所有从第二个表中检索出的记录与第一个表中适合记录进行合并. 例如: 表 TAB1 16,384 条记录 表 TAB2 1 条记录 抉择TAB2作为根底表 (最好的办法) select count(*) from tab1,tab2 执行工夫0.96秒 抉择TAB1作为根底表 (不佳的办法) select count(*) from tab2,tab1 执行工夫26.09秒 如果有3个以上的表连贯查问, 那就须要抉择穿插表(intersection table)作为根底表, 穿插表是指那个被其余表所援用的表. 例如: ...

January 6, 2021 · 3 min · jiezi

关于oracle:Oracle-定时任务job实际应用

一、Oracle定时工作简介Oracle定时工作是在oracle零碎中一个十分重要的子系统,使用切当,能够大大提高咱们零碎运行和保护能力。oracle定时工作的性能,能够在指定的工夫点自行执行工作。 那么在理论工作中,什么样的场景会用到定时工作呢?上面是在理论工作中用到的实在业务场景举例 在生成环境中,有时候须要在表中记录一些业务日志,零碎运行工夫长了之后,表中日志会越来越多,导致系统性能降落,这时候就须要用到定时工作,定时去删除表中一些工夫年代比拟长远垃圾数据。在某些业务场景中,明细表的数据量特地大,而须要查问明细表一下汇总数据,就须要将明细表中的数据【某天的业务产生的金额、人数等】通过计算汇总到另外表中,这样在查问的时候就能优化查问效率。而以上操作须要在业务量比拟少的状况下进行【个别都在凌晨之后】,这是就须要用到定时工作。二、dbms_job波及到的知识点创立job脚本variable jobno number;dbms_job.submit(:jobno, —-job号 'your_procedure;', —-执行的存储过程, ';'不能省略 next_date, —-下次执行工夫 'interval' —-每次间隔时间,interval 以天为单位);下面是通过脚本创立,当然也能够通过plsql图形化工具来创立,具体创立过程如下 零碎会主动调配一个工作号jobno ,依据jobno 能够进行如下定时工作操作 删除job: dbms_job.remove(jobno);批改要执行的操作: job:dbms_job.what(jobno, what);批改下次执行工夫:dbms_job.next_date(jobno, next_date);批改间隔时间:dbms_job.interval(jobno, interval);启动job: dbms_job.run(jobno);进行job: dbms.broken(jobno, broken, nextdate); –broken为boolean值三、初始化相干参数job_queue_processesjob_queue_process示意oracle可能并发的job的数量,当job_queue_process值为0时示意全副进行oracle的job查看job_queue_processes参数show parameter job_queue_process;或者select * from v$parameter where name='job_queue_processes';批改job_queue_processes参数alter system set job_queue_processes = 10;四、理论创立一个定时工作(一分钟执行一次),实现定时一分钟往表中插入数据4.1 创立须要定时插入数据的指标表create table t_test (id varchar2(30), name varchar2(30) );4.2 创立定时执行的存储过程create or replace procedure proce_t isbegin insert into t_test (id, name) values ('1', to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')); commit;end proce_t;/4.3 创立定时一分钟定时工作jobvariable jobno number;begin dbms_job.submit(:jobno,'proce_t;', sysdate, 'sysdate+1/24/60'); commit;end;4.5 能够依据以下语句查问刚创立好的jobselect job, next_date, next_sec, failures, broken from user_jobs where job = '1424'查问后果如下 ...

December 30, 2020 · 2 min · jiezi

关于oracle:Oracle-常用运维命令整理

一、oracle建库与删库命令(1)oracle11g 建库(个别习惯配置gdbname与sid名一样,sys明码与system明码一样,以不便记忆) [oracledb@ ~]$ dbca -silent -createDatabase -templateName /u01/oracle/product/11.2.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc -gdbname GDBNAME -sid SIDNAME -characterSet AL32UTF8 -NATIONALCHARACTERSET UTF8 -sysPassword SYSPASSWORD -systemPassword SYSTEMPASSWORD -TOTALMEMORY 2048删库办法一: [oracledb@ ~]$ dbca -silent -deleteDatabase -sourceDB  SIDNAME -sysDBAUserName sys -sysDBAPassword SYSPASSWORD删除库办法二: #步骤1:配置回应文件:[oracledb@ ~]$ cat /u01/oracle/response/dbca.rspOPERATION_TYPE = "deleteDatabase"SOURCEDB = "SIDNAME"SYSDBAUSERNAME = "sys"SYSDBAPASSWORD = "SYSPASSWORD"#步骤2:执行回应文件删库:[oracledb@ ~]$ dbca -silent -responseFile /u01/oracle/response/dbca.rsp(2)oracle12c  建库 [oracledb@ ~]$ dbca -silent -createDatabase -templateName /u01/oracle/product/orahome/assistants/dbca/templates/General_Purpose.dbc  -gdbname GDBNAME -sid SIDNAME -characterSet AL32UTF8 -NATIONALCHARACTERSET UTF8 -sysPassword SYSPASSWORD -systemPassword SYSTEMPASSWORD -TOTALMEMORY 2048#删库命令同上,留神运行删库命令之后,须要手动删除遗留的目录(3)删除个别会主动删除以下门路或文件中的库信息 A:/u01/oracle/admin/SIDNAMEB:cat /etc/oratabC:/u01/oracle/oradata/SIDNAME以下门路须要手动清理 D:/u01/oracle/cfgtoollogs/dbca/SIDNAMEE:/u01/oracle/diag/rdbms/SIDNAMEF:/u01/oracle/product/11.2.0/dbhome_1/dbs/hc_SIDNAME.dat二、创立库对应的账号密码1、切换SID [oracledb@ ~]$ export ORACLE_SID=SIDNAME2、切换字符集 #查看oracle数据库的字符集SQL> select userenv('language') from dual;#查看oracle数据库的编码SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';[oracledb@ ~]$ set NLS_LANG=AMERICAN_AMERICA.AL32UTF8     #windows_os[oracledb@ ~]$ export NLS_LANG=AMERICAN_AMERICA.AL32UTF8  #linux_os3、创立库对应的用户信息 SQL> create temporary tablespace SIDNAME_temp tempfile '/u01/oracle/oradata/SIDNAME/SIDNAME_temp.dbf 'size 64m autoextend on next 64m maxsize unlimited extent management local;SQL> create tablespace SIDNAME_data logging datafile '/u01/oracle/oradata/SIDNAME/SIDNAME_data.dbf' size 64m autoextend on next 64m maxsize 2048m extent management local;SQL> create user USERNAME identified by USERPASSWORD default tablespace SIDNAME_data temporary tablespace SIDNAME_temp;SQL> grant connect,resource to USERNAME;SQL> grant create view to USERNAME;SQL> grant unlimited tablespace to USERNAME;SQL> grant create public synonym to USERNAME;SQL> grant drop public synonym to USERNAME;SQL> create or replace directory dir_dump  as '/u01/oracle/backup';SQL> grant read,write on directory dir_dump to USERNAME;SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;—依据实例环境批改processes与sessions参数值(须要重启oracle数据库) SQL> alter system set processes=1000 scope=spfile;  SQL> alter system set sessions=1105 scope=spfile; 知识点: oracle11g:sessions值的定义应该大于或者定于1.1processes+5,如果小于1.1processes+5,则oracle在启动时主动将该参数设置为1.1processes+5。这次要是思考到后盾过程发动的session和大概10%的递归session。oracle12c:1.1processes+22#查问以后oracle的并发连接数:SQL> select count(*) from v$session where status='ACTIVE';#查看不同用户的连接数:SQL> select username,count(username) from v$session where username is not null group by username;#查看所有用户:select * from all_users;#以后的连接数select count(*) from v$process;#数据库容许的最大连接数select value from v$parameter where name = 'processes';三、数据库的还原与备份命令查看expdp导出备份存储门路: sql> select * from dba_directories;1、针对整个库备份与还原操作 (1)、数据库的备份(留神有时SIDNAME与SCHEMASNAME不统一,要留神应用时辨别,个别配置一样的名称,不便记忆的同时,也不便运维。parallel参数依据服务器内存等配置状况增加正当的数值。)#备份:[oracledb@ ~]$  expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME dumpfile=SIDNAME`date +%Y%m%d`.dmp directory=dir_dump parallel=212(2)、还原状况1、原始库与指标库实例名不同(留神有些环境的数据表空间名不是SIDNAME_data,应用时留神核实) #格局:[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DUMPFILE=XXXX.dmp  DIRECTORY=dir_dump remap_schema=源SCHEMASNAME:指标SCHEMASNAME remap_tablespace=源_data:指标_data状况2:源库与指标库实例名雷同 #格局:[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DUMPFILE=XXXX.dmp  DIRECTORY=dir_dump EXCLUDE=STATISTICS 常识扩大:应用EXCLUDE=STATISTICS还原时排除统计,能够应用如下命令实现统计 #命令如下:SQL> exec dbms_stats.gather_schema_stats(ownname=>'SIDNAME',estimate_percent=>10,degree=>8,cascade=>true,granularity=>'ALL');2、针对单表备份与还原操作 (1)、备份单表格局:[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump tables=TABLENAME(2)、还原单表#格局:[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump TABLES=TABLENAME TABLE_EXISTS_ACTION=REPLACE扩大:table_exists_action参数阐明 应用imp进行数据导入时,若表曾经存在,要先drop掉表,再进行导入。而应用impdp实现数据库导入时,若表曾经存在,有四种的解决形式:参数(1) skip:默认操作参数(2) replace:先drop表,而后创立表,最初插入数据参数(3) append:在原来数据的根底上减少数据参数(4) truncate:先truncate,而后再插入数据(3)备份多张表#格局:[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump TABLES=源TABLENAME1,源TABLENAME2,.....(4)还原多张表#格局:[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump remap_table=源TABLENAME1:指标TABLENAME11 TABLE_EXISTS_ACTION=REPLACE[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME dumpfile=tablenameXXXX.dmp DIRECTORY=dir_dump remap_table=源TABLENAME2:指标TABLENAME22 TABLE_EXISTS_ACTION=REPLACE3、扩大常识 1)扩大1:状况1、高版本往低版本导出还原时,如12往11还原时,在12c执行导出时,增加低版本的版本号version=11.1.0.2.0 #格局:[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME dumpfile=XXX.dmp DIRECTORY=dir_dump version=11.1.0.2.0状况2、低版本往高版本还原时,高版本个别兼容低版本,目前集体运维工作中11往12还原没遇到什么问题。 2)扩大2:(1)、按指定大小备份,如每份5G大小(parallel是多线程解决,线程数要小于生成文件个数,线程要小于 cpu 线程数) #备份格局[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=expdpXXX.log filesize=5G parallel=16(2)、多个备份文件还原: #还原格局[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX_%U.dmp logfile=impdpXXX.log parallel=163)扩大3 导出过滤不导出某张表: #格局[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp  exclude=TABLE:"IN 'TABLENAME'" 4)扩大4 不同库还原时不扭转数据结构应用truncate参数: #格局[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp remap_schema=源SCHEMASNAME:指标SCHEMASNAME remap_tablespace=源_data:指标_data TABLE_EXISTS_ACTION=truncate5)扩大5 导出备份时保留表,革除表数据(query参数): #格局[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp logfile=expdpXXX.log  query=TABLENAME1:'" where 1=2"',TABLENAME2:'" where 1=2"',........6)扩大6 导出备份时保留表,革除表数据,同时过滤某两张表 #格局[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump dumpfile=XXX.dmp logfile=expdpXXX.log  query=TABLENAME1:'" where 1=2"',TABLENAME2:'" where 1=2"' exclude=TABLE:"IN 'TABLENAME1''TABLENAME2'"7)扩大7 仅统计数据库各表数据,但不导出,参数estimate_only=y #格局[oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME DIRECTORY=dir_dump estimate_only=y8)扩大8 导入单表到某长期表: #格局(波及统计与索引时增加参数EXCLUDE=STATISTICS EXCLUDE=INDEX)—sql实现从这张表复制到另一张长期表SQL> CREATE TABLE 指标TABLENAME  AS (SELECT * FROM 源TABLENAME);—清空表中的数据SQL> delete  from 指标TABLENAME;[oracledb@ ~]$ impdp USERNAME/USERPASSWORD@SIDNAME DIRECTORY=dir_dump DUMPFILE=tablenameXXX.dmp remap_table=源TABLENAME:指标TABLENAME TABLE_EXISTS_ACTION=REPLACE EXCLUDE=STATISTICS EXCLUDE=INDEX [oracledb@ ~]$ expdp USERNAME/USERPASSWORD@SIDNAME schemas=SCHEMASNAME ESTIMATE_ONLY=y NOLOGFILE=y FULL=y9)扩大9 个别sql脚本内容很长,应用PLSQL Developer工具执行时会始终卡住无响应时除应用PLSQL Developer工具的在命令窗口中执行外,也能够应用shell终端执行 #格局[oracle@localhost ~]$ export ORACLE_SID=SIDNAME[oracle@localhost ~]$ sqlplus  / as sysdbasql> conn USERNAME/USERPASSWORD@SIDNAMEsql> @/u01/oracle/backup/XXX.sql10)扩大10 如何正确终止expdp与impdp工作,操作步骤如下: 步骤1、查看视图dba_datapump_jobsselect job_name,state from dba_datapump_jobs;步骤2、正确进行expdp导出工作应用stop_jobexpdp USERNAME/USERPASSWORD@SIDNAME attach=SYS_EXPORT_SCHEMA_02步骤3、进行工作Export> stop_job=immediate Are you sure you wish to stop this job ([yes]/no): yes  步骤4、查看零碎中的备份job状态select owner_name,job_name ,state from dba_datapump_jobs;扩大:下列命令在交互模式下无效: HELP: 总结交互命令。KILL_JOB: 拆散和删除作业。PARALLEL: 更改以后作业的流动 worker 的数目。PARALLEL=.2START_JOB: 启动/复原以后作业。START_JOB=SKIP_CURRENT 在开始作业之前将跳过作业进行时执行的任意操作。STATUS :在默认值(0)将显示可用时的新状态的状况下,要监督的频率(以秒计)作业状态。STATUS[=interval]STOP_JOB: 程序敞开执行的作业并退出客户机。STOP_JOB=IMMEDIATE 将立刻敞开数据泵作业。11)扩大11 #查看DB中的NLS_CHARACTERSET的值SQL> select * from v$nls_parameters  where parameter='NLS_CHARACTERSET'; SQL> select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';12)扩大12 对于exp、imp、expdp、impdp (1)、exp和imp是客户端工具程序,它们既能够在客户端应用,也能够在服务端应用。(2)、expdp和impdp是服务端的工具程序,他们只能在oracle服务端应用,不能在客户端应用。(3)、imp只实用于exp导出的文件,不适用于expdp导出文件;impdp只实用于expdp导出的文件,而不适用于exp导出文件。(4)、对于10g以上的服务器,应用exp通常不能导出0行数据的空表,而此时必须应用expdp导出。13)扩大13 oracle用户明码有@符号时,expdp与sqlplus连贯形式及应用rar压缩备份的文件 @echo offrem ---- dmp backup directory, same as dump dirset backup_dir=e:apporaclebackuprem ---- today, day for dmp file remainingset day=%date:~0,4%%date:~5,2%%date:~8,2%set remain_day=7rem --- delete files before 7 daysforfiles /p "%backup_dir%" /d -%remain_day%  /c "cmd /c del /f @path"rem --- export oracle data to dmp fileexpdp 用户名/"xxx@yyy"@orcl directory=dir_dump dumpfile=用户名_%day%.dmp logfile=用户名_%day%.log schemas=用户名 parallel=4 compression=ALLrem --- sqlplus connsqlplus 用户名/"""xxx@yyy"""@orclrem ---- if compress the dumpfile and delete source dumpfile, unmark remset rar="C:Program Files (x86)WinRARWinRAR.exe"%rar% a -df %backup_dir%用户名_%day%.rar %backup_dir%用户名_%day%.dmp %backup_dir%用户名_%day%.log四、清理(还原时出错,清用户表空间)1、删除数据表空间: ...

December 4, 2020 · 1 min · jiezi

关于oracle:解决-ORA65096-invalid-common-user-or-role-name问题

在oracle执行:create user tff identified by tff 的时候报错了:ORA-65096: invalid common user or role name SQL> create user tff identified by tff;create user tff identified by tffERROR at line 1:ORA-65096: invalid common user or role name报错:ORA-65096: invalid common user or role name(专用用户名或角色名有效). 谬误起因:用户想在PDBORCL中创立tff用户,却未设置会话container到PDB,而在CDB中创立私有用户因无奈通过名称或角色验证出错. 解决办法:1、查看Oracle 12c的版本 SQL> select * from v$version;select sys_context ('USERENV', 'CON_NAME') from dual; 2、咱们能够通过ALTER SESSION SET CONTAINER 指定其余容器 SQL> alter pluggable database PDB19 open;4、查看容器 SQL>select con_id,dbid,NAME,OPEN_MODE from v$pdbs;5、切换容器到PDB196、查看以后应用容器 ...

December 1, 2020 · 1 min · jiezi

关于oracle:常用Oracle-SQL集锦

罕用dml和query开并行--开并行ALTER SESSION FORCE PARALLEL DML PARALLEL 16;ALTER SESSION FORCE PARALLEL QUERY PARALLEL 16;--关并行ALTER SESSION DISABLE PARALLEL DML ;ALTER SESSION DISABLE PARALLEL QUERY;索引开并行drop index IDX_SB_SBZT_LRRQ;create index IDX_SB_SBZT_LRRQ on SB_SBZT (LRRQ, CWLX_DM, SWJG_DM) tablespace TS_GS_SB_IDX pctfree 20 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ) parallel 6;alter index IDX_SB_SBZT_LRRQ noparallel;查看ASM-- 查看asm的各个disk group是否超过80%-- name:name of the disk group-- total_mb:total capacity of the disk group(in megabytes)-- free_mb:unused capacity of the disk group(in megabytes)select t.name,t.TOTAL_MB /1024, round(100 * (t.TOTAL_MB - t.FREE_MB) / t.TOTAL_MB, 2)||'%' from v$asm_diskgroup t;<!--more--> ...

October 16, 2020 · 4 min · jiezi

关于oracle:解决SQLPLUS无法使用上下箭头

1 问题形容SQLPLUS中应用高低箭头无奈获取历史命令,如下图所示: 按高低箭头会显示^[[A/^[[B。 2 解决方案须要装置rlwrap,能够的话能够用包管理器装置,笔者环境CentOS,这里从源码编译装置。 2.1 下载源码官网Github能够戳这里,目前最新的版本为0.43: 2.2 装置上传到服务器后,解压编译装置: tar -zxvf rlwrap-0.43.tar.gzcd rlwrap-0.43./configuremake make install笔者在./configure这步遇到以下谬误: 装置一个库解决: yum install readline-devel再次./configure就没有问题了: 2.3 测试应用rlwrap sqlplus代替原来的sqlplus登录: rlwrap sqlplus xxx/xxx as sysdba这样就能够应用高低箭头了。 因为笔者在root上进行测试,在oracle用户上进行测试可能会呈现权限问题,如图: 到对应目录下创立该文件: cd /home/oraclesudo touch .sqlplus_history创立了之后还是不能执行: 批改组权限即可: sudo chmod g+w .sqlplus_history 2.4 别名为了方便使用能够加上一个别名: alias sp='rlwrap sqlplus'这样下次就能够应用 sp xxx/xxx as sysdba登录了。

October 13, 2020 · 1 min · jiezi

关于oracle:oracle函数递归函数start-with

0、前言 咱们可能会碰到这种需要:一个表的字段为id,pid(父id);咱们须要通过id找到他的所有父节点。 在oracle中提供了start with的递归函数操作,能够达到上述的要求 <br/> <br/> 1、语法SELECT ... FROM 【表名】WHERE 【条件3】START WITH 【条件1】CONNECT BY PRIOR 【条件2】<br/> <br/> 2、应用2.1 向上查找(父=子)2.1.1 需要 找到empno为7369的所有领导。 <br/> 2.1.2 sql语句 表字段连贯关系:mgr为领导编号 select t.*,t.rowid from emp t start with t.empno = 7369 --从empno为7369的开始查找 connect by prior t.mgr = t.empno; --上一条数据(这里就是empno为7369)的mgr == 以后遍历这一条数据的empno(那么就会找到empno为7902的用户)<br/> 2.1.3 查问后果 <br/> <br/> 2.2 向下查找(子=父)2.2.1 需要 找到empno为7566的所有上司 <br/> 2.2.2 sql语句select t.*,t.rowid from emp t start with t.empno = 7566 connect by prior t.empno = t.mgr;<br/> ...

September 19, 2020 · 1 min · jiezi

关于oracle:oracle函数merge-into

0、前言 咱们在业务中可能碰到这种状况:如果用户在数据库中不存在,那么就进行插入;否则就进行批改。 按咱们平时的做法可能是在业务层先查问用户存不存在,如果存在,那么就更新。 那咱们上面讲一种在oracle数据库层面的条件判断--merge into。 <br/><br/> 1、语法MERGE INTO 表A USING 与表A产生关联字段值ON 进行和表A的关联 WHEN MATCHED THEN --如果匹配,做更新操作 update set.... WHEN NOT MATCHED THEN --如果不匹配,做增加操作 insert ....<br/><br/> 2、应用2.1 测试增加留神update金额insert后不必加表名 merge into emp10 eusing (select '1111' as empno, 'heihei' as ename from dual) son (e.empno = s.empno)when matched then update set ename = s.ename where empno = s.empnowhen not matched then insert (empno,ename) values(s.empno,s.ename); <br/><br/> 2.2 测试批改merge into emp10 eusing (select '1111' as empno, 'xixixi' as ename from dual) son (e.empno = s.empno)when matched then update set ename = s.ename where empno = s.empnowhen not matched then insert (empno,ename) values(s.empno,s.ename); ...

September 19, 2020 · 1 min · jiezi

关于oracle:oracle的userenv和nlslang详解

oracle的userenv和nls_lang详解1、userenv最常见的应用userenv函数返回以后会话(session)的相干信息。以下sql语句能够查问以后会话连贯的数据库字符集 select userenv('language') from dual;无关userenv('parameter')返回值的官网介绍如下 意思就是:返回的是以后会话应用的language和territory。characterset是数据库的字符集。 上面咱们就去验证这种状况 <!--more--> 2、windows上plsql应用userenv先看下数据库实在的语言、地区和字符集 再看下windows上NLS_LANG环境变量 最初看下plsql上userenv执行的后果 能够发现在windows上应用plsql的时候语言和地区应用的是plsql的环境变量NLS_LANG。 3、Linux上sqlplus应用userenv首先看一下NLS_LANG为空的状况下userenv的返回值 能够看到userenv('language')的返回值是AMERICAN_AMERICA.ZHS16GBK。这个值是怎么来的呢?从Oracle官网上看是取的默认值,如下图 如果Oracle通用安装程序没有指定NLS_LANG,则默认值是AMERICAN_AMERICA.US7ASCII如果language没有指定,则language的默认值是AMERICAN如果territory没有指定,则territory的默认值由language这个值派生而来。如果charset没有指定,则在创立session的时候charset的值是数据库的characterset。NLS_LANG的每一个component都是可选的,如果只想指定NLS_LANG的territory,那么须要这样指定:NLS_LANG=_JAPAN。此时territory的值是JAPAN具体参见:Choosing a Locale with the NLS_LANG Environment Variable 上面持续验证 能够看到指定NLS_LANG之后,userenv('language')从会话中获得的语言和地区产生了变动,然而字符集依然获得的是数据库的字符集。 4、问题:中文乱码在哪个环节产生的?由以上剖析可知,不论是什么样的客户端程序(不论是plsql还是sqlplus),在创立会话的时候字符都是取数据库自身的字符集。因而客户端程序和session的字符集不统一的时候会产生转码。如果转码的过程中呈现了字节损失,则存储的实在数据就是损失之后的数据。至于咱们看到的乱码是因为存储的数据会在查问的时候再次转码成客户端程序的字符集,因为数据缺失,因而就乱码了。 至于中文乱码的验证能够参见【字符集】论Oracle字符集“转码”过程 记得帮我点赞哦! 精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!! 朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。 我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。听我说,提高多,程序人生一把梭 如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。 职场亮哥文章列表:更多文章 自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

September 19, 2020 · 1 min · jiezi

关于oracle:Oracle字符集检查和修改

Oracle字符集检查和批改在部署重构版测试环境时,须要创立Oracle数据库,应用dbca创立数据库之后没有留神数据库自身的字符集,导致后续所有的数据库脚本执行后中文乱码。最初的解决办法是清掉全库数据,再批改字符集,重启数据库。 1、Oracle字符集概述零碎或者程序运行的环境就是一个咱们常见的locale。而设置数据库locale最简略的办法就是设置NLS_LANG这个环境参数。在linux中NLS_LANG是一个环境变量,在windows中NLS_LANG是写在注册表中的。NLS_LANG这个参数由三个组成部分,别离是语言(language), 区域(territory)和字符集(character set),格局如下: NLS_LANG = language_territory.charset咱们平时最常见的就是:AMERICAN_AMERICA.ZHS16GBK和SIMPLIFIED CHINESE_CHINA.ZHS16GBK NLS_LANG的作用官网是这样说的: It sets the language and territory used by the client application and the database server. It also sets the client's character set, which is the character set for data entered or displayed by a client program<!--more--> 意思就是说: NLS_LANG设置了客户端应用程序和数据库服务器应用的语言和区域。它还设置了客户端的字符集,这是客户端程序用于数据输出或者显示的字符集。也就是说如果客户端字符集和NLS_LANG中的charset不同,则会乱码。2、查看Oracle Server字符集查看Oracle Server字符集最罕用的办法有两种 ▶查问nls_database_parametersselect * from nls_database_parameters;▶应用userenv函数userenv函数返回以后会话(session)的相干信息。以下sql语句能够查问以后会话连贯的数据库字符集 select userenv('language') from dual;无关userenv('parameter')返回值的官网介绍如下 意思就是:返回的是以后会话应用的language和territory。characterset是数据库的字符集。 userenv函数的具体应用和以后会话字符集的取值详见以下链接 oracle的userenv和nls_lang详解 3、批改Oracle Server字符集一旦数据库创立后,数据库的字符集实践上讲是不能扭转的。因而,在设计和装置之初思考应用哪一种字符集非常重要。依据Oracle的官网阐明,字符集的转换是从子集到超集受反对,反之不行。如果两种字符集之间基本没有子集和超集的关系,那么字符集的转换是不受oracle反对的。对数据库server而言,谬误的批改字符集将会导致很多不可测的结果,可能会重大影响数据库的失常运行,所以在批改之前肯定要确认两种字符集是否存在子集和超集的关系。一般来说,除非万不得已,咱们不倡议批改oracle数据库server端的字符集。 以下是批改server端字符集的办法——不倡议应用 SQL> conn /as sysdba SQL> shutdown immediate; SQL> startup mount SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> alter database open; SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12712: new character set must be a superset of old character set 提醒咱们的字符集:新字符集必须为旧字符集的超集,这时咱们能够跳过超集的查看做更改: SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; SQL> select * from v$nls_parameters; 重启查看是否更改实现: SQL> shutdown immediate; SQL> startup SQL> select * from v$nls_parameters; 具体应用办法参见:oracle服务器和客户端字符集的查看和批改 ...

September 19, 2020 · 1 min · jiezi

关于oracle:sql语句中的作用

演示示例阐明:以下示例中,表a是员工表,有a,b,c,d四个员工,性别都是男性m。表b是工资表,有a,b,d四个员工,工资对应的是1000,2000,4000。而后别离演示带(+)符号的和不带(+)符号的,后果如下。 SQL> select * from a;NAME SEX-------------------- -----a mb mc md mSQL> select * from b;NAME MONEY-------------------- ----------a 1000b 2000d 4000SQL> select a.name,b.money from a,b where a.name=b.name(+);NAME MONEY-------------------- ----------a 1000b 2000d 4000cSQL> select a.name,b.money from a,b where a.name=b.name;NAME MONEY-------------------- ----------a 1000b 2000d 4000可见,带(+)号时,a表中的所有人都在,即便工资为空。不带(+)时,a表中的没有呈现工资为空的员工c。 <!--more--> 对(+)号的解释(+) 示意外连贯。条件关联时,个别只列出表中满足连贯条件的数据。如果条件的一边呈现(+),则另一边的表就是主表,主表中的所有记录都会呈现,即便附表中有的记录为空 (+)的扩大:SQL表连贯SQL表连贯分类内连贯,外连贯,穿插连贯,其中外连贯包含左连贯和右连贯。 SQL表连贯示例内连贯 SQL> select a.name,b.money from a,b where a.name=b.name;SQL> select a.name,b.money from a inner join b on a.name=b.name;左连贯 SQL> select a.name,b.money from a,b where a.name=b.name(+);SQL> select a.name,b.money from a left join b on a.name=b.name;右连贯 ...

September 18, 2020 · 1 min · jiezi

关于oracle:Oracle事务Transaction

参考资料: Transactions 对于Oracle事务的总结 什么是事务?事务(Transaction)是拜访并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务由事务开始(begin transaction)和事务完结(end transaction)之间执行的整体操作组成。 事务的属性-ACID原子性(Atomicity)-事务的原子性强调了一个事物是一个逻辑工作单元,是一个整体,是不可分割的。一个事务所蕴含的操作要么全副做,要不全副不做。一致性(Consistency)-一个事务执行一项数据库操作,事务使数据库从一种一致性的状态变换成另一种一致性状态。隔离性(Isolation)-在事务未提交前,它操作的数据,对其余用户不可见。持久性(Durability)-一旦事务胜利实现,该事务对数据库所施加的所有更新都是永恒的。 redo日志--提交的事务被永恒的记录到redo日志中。<!--more--> 数据库事务的开始和完结以第一个DML语句的执行作为开始 以上面的其中之一作为完结: commit或rollback语句DDL或DCL语句(主动提交)用户会话失常完结--commit零碎异样完毕--rollback并发与数据的读取当多个会话同时拜访(操作)雷同的数据时,将会呈现一些意想不到的后果。包含: 脏读 --dirty reads 一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚不可反复读 --non-repeatable reads 在数据库拜访中,一个事务范畴内两个雷同的查问却返回了不同数据。这是因为查问时零碎中其余事务批改的提交而引起的。幻读 --Phantom(空幻的) reads 事务1读取记录时事务2减少了记录并提交,事务1再次读取时能够看到事务2新增的记录。对事物1而言就如同呈现了幻觉一样。事务的隔离等级ANSI定义的事务的隔离等级: 事务隔离等级脏读不可反复读幻读Read uncommited(读未提交的)YYYRead commited(读提交的)NYYRepeatable readNNYSerializableNNNOracle定义的事务隔离等级: 事务隔离等级影响Read commitedOracle默认的隔离等级,对一条SQL,能够保证数据的一致性,对于一个事务,无奈做到repeatable read。Serializable只能看到事务开始时所有提交的扭转以及本身的扭转Read-only只能看到事务开始时所有提交的扭转,本身不容许DML操作事务的并发管制-锁Oracle的锁定机制 Oracle尽可能的缩小锁定的应用Oracle的读操作不会对表加锁,一些数据库会应用查问锁定(共享锁,排它锁)Oracle通过回滚机制,保障读不会受到阻塞Oracle没有锁管理器Oracle中锁作为数据块的一种属性存在Oracle和Sql Server锁的区别 Sql ServerOracle并发和读一致性不可兼得,必须就义一方可兼得因为锁实现形式,事务代价低廉没有真正的锁,事务没有资源代价提倡尽快提交主张依照业务需要确定事务边界事务的管制-savepoint通过在事务两头设置检查点,能够更加精密的管制事务,避免一部分错误操作导致整个事务从新运行。演示如下: SQL> create table t(id int);表已创立。SQL> insert into t values(1);已创立 1 行。SQL> savepoint s1;保留点已创立。SQL> select * from t; ID---------- 1SQL> update t set id=2;已更新 1 行。SQL> savepoint s2;保留点已创立。SQL> select * from t; ID---------- 2SQL> rollback to s1;回退已实现。SQL> select * from t; ID---------- 1一旦返回到保留点s1之后s2就失去了成果,因为曾经回到s1了,这时候s2还不存在。 ...

September 18, 2020 · 3 min · jiezi

关于oracle:模拟Oracle11g下用Flashback-Data-Archive进行恢复的若干场景

相干概念Flashback Data Archive是什么Flashback data archive是oracle 11g中引入的一个新个性。Flashback archive是一个新的数据库对象,用于存储一个或多表的历史数据。Flashback archive是一个逻辑对象,概念上相似于表空间。实际上flashback archive能够看作是存储一个或多个表的所有事务变动的逻辑空间。Oracle 11g 中 Flashback Data Archive 个性。将变动数据另外存储到创立的闪回归档区(Flashback Archive)中,以和 undo 区别开来,这样就能够为闪回归档区独自设置存储策略,使之能够闪回到指定工夫之前的旧数据而不影响 undo 策略。并且能够依据须要指定哪些数据库对象须要保留历史变动数据,而不是将数据库中所有对象的变动数据都保留下来,而只是记录了指定表的数据变动。所以,Flashback Data Archive 是针对对象的爱护,是 Flashback Database 的无力补充。 它和Flashbak的区别?在Oracle中的flashback 包含: flashback version query、flashback transaction query、flashback database、flashback table和flashback drop等个性。 在这些闪回技术当中,除了Flashback Database(依赖于闪回日志)之外,其余的闪回技术都是依赖于Undo撤销数据,都与数据库初始化参数UNDO_RETENTION密切相关。 它们是从撤销数据中读取信息来结构旧数据的。这样就有一个限度,就是undo中的信息不能被笼罩。而undo段是循环应用的,只有事务提交,之前的undo信息就可能被笼罩,尽管能够通过 undo_retention等参数来缩短undo的存活期,但这个参数会影响所有的事务,设置过大,可能导致undo tablespace疾速收缩。 换句话说:个别的数据库内undo_retention只设置了900秒,如果事务量太大,在产生误操作后undo内的事务被其余顶掉或超过900秒,那么就无奈通过flashbak进行复原。而Flashback Data Archive和undo无关,是独自创立一个闪回归档区,把表级的历史记录都存到归档区外面,能够随时查看表级对象的历史状况。 模仿用Flashback Data Archive复原环境筹备数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0是否开启归档:否是否为RAC:否 建设测试表插入测试数据建设一个测试表test_table_delete,插入数据如下图所示 查问time_stamp内的数据和执行打算select * from test_table_delete as of timestamp to_timestamp('2020-09-17 13:55:09','yyyy-mm-dd hh24:mi:ss');能够看到,此时的打算走的是test_table_delete这张表的全表扫描,先记着,前面有用。 创立一个用来存储闪回归档的表空间能够应用现有表空间,但Oracle倡议最好应用专用表空间对表空间的要求:(1)Flashback data archive只能在ASSM的tablespace上创立 (2)Flashback data archive要求必须应用主动undo治理,即undo_management参数为autocreate tablespace fa_data datafile '/opt/ora_data/fa_01.dbf' size 1G;查看咱们创立的fa_data表空间是否符合要求: ...

September 17, 2020 · 2 min · jiezi

关于oracle:oracle

Oracle简介Oracle Database,又名Oracle RDBMS,简称Oracle。是甲骨文公司推出的一款关系数据库管理系统。Oracle数据库系统是目前世界上风行的关系数据库管理系统,领有可移植性好、使用方便、性能强等长处,在各类大、中、小、微机环境中都实用。Oracle是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。Oracle数据库会创立一个表空间,再创立用户,用户去创立表。 二、根底查问表构造 2.1 selectOracle提供了一个虚表dual用来补全语法结构1:select*from dual;:select 1+1 from dual; 2.1.1别名查问应用as关键字,能够省略。别名中不能设置关键字或特殊符号,如果必须有则别名需加双引号:select ename 姓名,sal 工资 from emp; 2.2 去除反复数据2.2.1 单列去重应用distinct关键字:select distinct job from emp; 2.2.2 多列去重多列去重前:select job,deptno from emp;下面两列数据有反复去重后::select distinct job,deptno from emp;

September 16, 2020 · 1 min · jiezi

关于oracle:PLSQL-Developer连接本地Oracle-11g-64位数据库

登陆PL/SQL假设本地电脑中曾经装置了Oracle 11gR2数据库和PL/SQL developer。 如果没有装置能够在一下地址下载安装: Oracle 11gR2数据库:https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win64soft-094461.html PL/SQL developer(含注册机):https://pan.baidu.com/s/1kUfY8GB 明码: 1ky8 首先关上PL/SQL,会发现没有database能够抉择,咱们能够以非登录形式登陆PL/SQL(间接点cancel即可)。 开始设置:Tools->Preferences,进入后点击Oracle上面的connection,设置Oracle home和oci library。 因为我曾经设置过了,如下图: 图中门路可能不一样,具体的看你的Oracle Home目录,如果不晓得本人的Oracle Home目录的,能够去本人的环境变量中看一下。 点击Apply->OK,退出PL/SQL Developer,再次登录。 <!--more--> 尝试登陆数据库。呈现以下谬误: 显示初始化谬误:Make sure you have the 32 bits Oracle Client installed. 这个意思就是咱们没有装置32位的Oracle客户端。尽管装置的是64位的Oracle,然而咱们plsql不能辨认,只能辨认32的客户端。那么咱们就去下载安装32位的客户端。 装置32 bits Oracle Client首先确定下本人电脑上装的Oracle11g的具体版本: C:\Users\clg>sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期二 3月 22 10:40:19 2016Copyright (c) 1982, 2010, Oracle. All rights reserved.连贯到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options能够看到版本是11.2.0.1.0,那么就须要下载对应版本的客户端,不过应该是下载11.2的应该都能够。保险起见,咱们还是下载11.2.0.1.0版本的。 ...

September 15, 2020 · 1 min · jiezi

关于oracle:Oracle闪回flashback

参考资料:Using Oracle Flashback Technology Oracle 11g的新个性闪回操作 闪回查问 闪回查问闪回版本查问闪回事务查问闪回数据 闪回表闪回删除闪回数据闪回归档上面会别离介绍这些操作。在介绍这些操作之前先看下闪回个性是否开启。 <!--more--> 查看闪回个性是否启用参考资料: Configuring Your Database for Oracle Flashback Technology 关上或敞开oracle数据库的闪回性能步骤 确认数据库闪回个性曾经启用:v$database SQL> select flashback_on from v$database;FLASHBACK_ON------------------NO如果闪回个性没有启用,则须要先启用闪回。 关上闪回的步骤: SQL> shutdown immediate;SQL> startup mount;SQL> alter database flashback on;SQL> alter database open;关上之后可再次查看闪回个性是否关上。只有关上了闪回个性,就能够进行闪回操作。 闪回查问参考资料:Using Oracle Flashback Query (SELECT AS OF) 查问某一个历史工夫点的数据。 查问某个工夫点表中的数据——某个工夫点表中快照的数据。 SQL> create table t(x int , y int);表已创立。SQL> insert into t values(1,2);已创立 1 行。SQL> insert into t values(2,3);已创立 1 行。SQL>SQL> commit;提交实现。SQL> select * from t; X Y---------- ---------- 1 2 2 3SQL> set time on21:11:45 SQL> delete from t where x=1;已删除 1 行。21:12:11 SQL> commit;提交实现。21:12:18 SQL> select * from t; X Y---------- ---------- 2 321:12:21 SQL> select * from t as of timestamp to_timestamp('2016-03-21 21:11:45','yyyy-mm-dd hh24-mi-ss'); X Y---------- ---------- 1 2 2 3可见删除的数据曾经提交,然而还是能够闪回查问到之前工夫的数据。其中hh24示意能够用24小时制,否则只能小时不能超过12。至于为什么分钟用mi而不必mm,那是因为规定的格局就是mi,换成mm会显示和之前的月份mm抵触,换成其余的会显示日期格局无奈辨认。 ...

September 15, 2020 · 3 min · jiezi

关于oracle:Oracle自动存储管理ASM

参考资料: https://docs.oracle.com/cd/B19306_01/server.102/b14231/storeman.htm#ADMIN036 什么是ASM?ASM是Automatic Storage Management(主动存储管理)的缩写。ASM是一个集成的高性能的文件系统和卷管理器。Oracle将所有的存储分为disk groups,咱们只须要治理这些disk groups,而不必去管具体的数据文件。 In the SQL statements that you use for creating database structures such as tablespaces, control files, and redo and archive log files, you specify file location in terms of disk groups. ASM then creates and manages the associated underlying files(底层文件) for you. 为什么应用ASM?提供高效率的存储管理提供残缺的集群文件系统和卷治理能力ASM的长处: Mirroring and Striping(镜像化和条带化) 条带化是一种用于在多个磁盘驱动器之间扩散数据的技术。一个大的数据段被分为较小的单元,这些单元散布在可用设施之间。分隔数据的单元称为“数据单元大小”或“条带大小”,是指向每个磁盘写入这些条带的大小。能够同时读写的并行条带数量称为“条带宽度”。分条能够放慢从磁盘存储中获取数据的操作,这是因为它扩大了总I/O带宽的能力。这样就优化了性能和磁盘利用率,从而不再须要手动I/O 性能调优。 ASM镜像化选项: Mirroring OptionDescription2-way mirroringEach extent has 1 mirrored copy.3-way mirroringEach extent has 2 mirrored copies.UnprotectedASM provides no mirroring. Used when mirroring is provided by the disk subsystem itself.<!--more--> ...

September 11, 2020 · 1 min · jiezi

关于oracle:Oracle-Rman备份恢复和管理

参考资料: Oracle之Rman入门指南一步一步学RmanRman简介Rman-Recover manager复原管理工具。 Oracle集成了很多环境的一个数据库备份和复原的工具。 Rman能够做下列事件: 数据库热备份 全库备份和复原 数据库克隆(DG)增量备份和复原表空间备份和复原数据文件备份和复原归档备份和复原管制文件和参数文件备份和复原数据库冷备份备份集的治理 备份策略保留和删除备份数据......<!--more--> 冷备份和热备份区别: 对于oracle数据库只有物理备份和逻辑备份 物理备份:是将理论组成数据库的操作系统文件从一处拷贝到另一处的备份过程,通常是从磁盘到磁带逻辑备份:是利用SQL语言从数据库中抽取数据并存于二进制文件的过程。物理备份用于实现数据库的残缺复原,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且须要极大的内部存储设备,例如磁带库,具体包含冷备份和热备份。冷备份和热备份是物理备份(也称低级备份),它波及到组成数据库的文件,但不思考逻辑内容。 冷备份产生在数据库曾经失常敞开的状况下,当失常敞开时会提供给咱们一个残缺的数据库热备份是在数据库运行的状况下,采纳archivelog mode形式备份数据库的办法。热备份和冷备份能够参看:什么是冷备份和热备份,有什么区别? 应该备份哪些文件? Oracle数据文件管制文件归档日志在线日志参数文件密码文件Rman备份试验演示备份数据库 在数据库运行的时候进行Rman备份则是热备份,须要以后数据库处于归档模式 查看数据库是否是归档模式的命令: sqlplus / as sysdbaSQL> archive log list;如果处于archive mod下,则能够进行热备。应用quit退出sqlplus状态,进入复原管理器。 C:\Users\clg>rman target /复原管理器: Release 11.2.0.1.0 - Production on 星期一 3月 21 14:46:00 2016Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.连贯到指标数据库: ORCL (DBID=1433387646)备份数据库的命令:( 全备) RMAN> backup database;会备份数据文件和管制文件还有spfile。 备份表空间 能够备份某个特定的表空间 RMAN> backup tablespace users;备份文件 备份制订的文件,依据文件号备份。 RMAN> backup datafile 4;备份归档日志 ...

September 11, 2020 · 1 min · jiezi

关于oracle:Oracle重做日志和日志挖掘

重做日志-Redo log首先给出参考资料: 1、Oracle官网-Managing the Redo Log 为什么须要redo log内存中数据批改后,不用立刻更新到磁盘---效率由日志实现数据的爱护目标---效率其余副产品 数据恢复(备份集+归档日志)数据同步(DG,streams,goldengate)日志开掘什么是Redo log重做日志蕴含所有数据产生的历史扭转记录。 重做日志文件通常用于 复原日志开掘流数据库产生的每个改变 写入数据块缓冲之前,先写入redo log buffer --内存写入数据文件之前先写入日志文件 --数据文件当提交后,redo log buffer被刷入redo log files对于v$log视图v$log从管制文件中显示日志文件的信息。可参考官网材料[v$log](https://docs.oracle.com/datab... ColumnDatatypeDescriptionGROUP#NUMBERLog group numberTHREAD#NUMBERLog thread numberSEQUENCE#NUMBERLog sequence numberBYTESNUMBERSize of the log (in bytes)BLOCKSIZENUMBERBlock size of the logfile (512 or 4096)MEMBERSNUMBERNumber of members in the log groupARCHIVEDVARCHAR2(3)Archive status (YES) or (NO)STATUSVARCHAR2(16)UNUSED,CURRENT,ACTIVE,CLEARING,CLEARING_CURRENT,INACTIVEFIRST_CHANGE#NUMBERLowest system change number (SCN) in the logFIRST_TIMEDATETime of the first SCN in the logNEXT_CHANGE#NUMBERHighest change number (SCN) in the log. When STATUS=CURRENT, NEXT_CHANGE#is set to the highest possible SCN, 281474976710655.NEXT_TIMEDATETime of the highest SCN in the log. When STATUS=CURRENT, NEXT_TIME is set toNULL.CON_IDNUMBER0,1,n三种状况日志文件的六种状态UNUSED,CURRENT,ACTIVE,CLEARING,CLEARING_CURRENT,INACTIVE代表的意思别离如下所述: ...

September 9, 2020 · 2 min · jiezi

关于oracle:Oracle数据库备份和恢复

commit --lgwr 事务相干的操作,保障事务的平安checkpoint --dbwr 数据相干的操作,保证数据的平安实例的复原 crash recovery什么时候产生oracle实例复原 shutdown abort数据库异样down掉(机器死机,掉电)从Redo的什么地位开始复原?在某一点,在这一点之前的所有数据,Oracle都曾经胜利的写入到了磁盘上。 实例复原是一个主动的过程,不须要人工干预 实例复原产生在那个阶段? –sql>startup nomount(读取spfle) ,没有实例复原。 –sql>alter database mount (读取管制文件),没有实例复原。 –sql>alter database open (查看管制文件,数据文件头),产生实例复原。 如果间接startup命令,会通过启动装载关上三个步骤。SQL> shutdown abort;ORACLE 例程曾经敞开。SQL> startup;ORACLE 例程曾经启动。Total System Global Area 3307048960 bytesFixed Size 2180264 bytesVariable Size 1828719448 bytesDatabase Buffers 1459617792 bytesRedo Buffers 16531456 bytes数据库装载结束。数据库曾经关上。SQL> shutdown abort;ORACLE 例程曾经敞开。SQL> startup nomount;ORACLE 例程曾经启动。Total System Global Area 3307048960 bytesFixed Size 2180264 bytesVariable Size 1828719448 bytesDatabase Buffers 1459617792 bytesRedo Buffers 16531456 bytesSQL> alter database mount;数据库已更改。SQL> alter database open;数据库已更改。oracle在关上数据库时(alter database open),会查看每个文件头上的信息(SCN),并同管制文件中相应的信息(SCN)比拟,如果不统一就进行实例复原。实例复原的过程 ...

September 8, 2020 · 3 min · jiezi

关于oracle:Oracle-RAC与DG

RACRAC: real application clustersrac RAC: real application clustersrac 单节点数据库:数据文件和示例文件一一对应 实例损坏时数据库就损坏了RAC架构数据库:数据文件和多个实例对应 RAC最基本的初衷是实例级的容错,并不是基于数据的实例都是基于数据的。 dataguard是基于数据容错的。 Oracle数据库反对网格计算环境的核心技术 SAN网络存储(Storage Area Network):集中式治理的高速存储网络 RAC的目标 提供实例级别的冗余提供更多的系统资源减少更多的并行处理RAC的长处和毛病 长处 提供零碎冗余更多的系统资源业务宰割解决毛病 内存共享和资源竞争(cache fusion)底层技术简单,对DBA技术要求高什么时候须要应用RAC? 实例冗余——第一思考的目标解决能力和性能的晋升<!--more--> DGDataGuard,数据卫士,一种数据库级别的高可用性(HA)计划,用作数据容灾解决方案。对于联机事务处理(OLTP,数据量不太大)十分适合,对于联机剖析解决(OLAP,数据量太大),只能抉择要害数据创立DG,惯例数据,抉择其余形式备份。 容灾级别的DG: 本地,同城,异地,多种容灾,创立很多standby DataGuard的保护模式 最大保护模式 最平安的模式,这种模式主备库之间数据是同步的。即主库提交的同时,备库会做相应的复原。最大限度的保障了数据完整性。不容许数据的失落。 如果主备库之间网络,或者备库呈现问题会间接影响主库操作。导致主库宕机。因而个别不会抉择最大保护模式。 最大性能模式 这种模式保障主库性能最大化,主备库之间数据是异步传输的。即,主备日志归档当前才会传输到备用库,在备库上应用归档日志文件做复原操作。 最高可用性模式 这种模式和"最大爱护"基本上差不多。失常状况下,主备库之间是同步的。 当网络或者备库呈现问题时,不会影响到主库的宕机,主库会主动转换到"最大性能"模式,期待备库可用时,将归档传输到备库做复原。 能够把这种模式了解为"最大爱护"和"最大性能"两种模式的中间体。 如何抉择DG的保护模式 影响DG保护模式抉择的最大因素就是网络品质,如果网络品质比拟好,比方本地的局域网,则能够抉择最高可用模式。如果网络品质个别,则抉择最大性能模式。个别不会抉择最大保护模式,最大保护模式侵害了零碎的可用性。 DG中standby数据库的类型 物理standby数据库:physical standby databases 物理Standby与Primary数据库齐全截然不同,在物理数据库磁盘上具备主库雷同架构的块,通过REDO利用(属于块对块的利用)来保护物理Standby数据库。 逻辑standby数据库:logical standby databases 逻辑Standby也要通过Primary数据库(或其备份,或其复制库,如物理Standby)创立,因而在创立之初与物理Standby数据库相似。不过因为逻辑Standby通过SQL利用的形式利用REDO数据,因而逻辑Standby的物理文件构造,甚至数据的逻辑构造都能够与Primary不统一。 附: 对于Oracle11gR2 之 DataGuard_03 三种保护模式的摸索可见上面这篇blog 摸索Oracle11gR2 之 DataGuard_03 三种保护模式 记得帮我点赞哦! 精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!! 朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。 我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。听我说,提高多,程序人生一把梭 如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。 职场亮哥文章列表:更多文章 自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

September 5, 2020 · 1 min · jiezi

关于oracle:Oracle数据字典

数据字典的组成——两类视图 静态数据字典:形容数据库的信息 这些数据常常是静止的。动态数据字典:形容实例的信息 反映数据局运行的状态,反映数据库实例运行的信息,这些信息常常是变动的。users ALL_USERS--lists all users of the database visible to the current user. This view does not describe the users 形容不是用户本人,而是以后用户可见(也就是有权拜访)的数据库的所有的用户。DBA_USERS--describes all users of the database USER_USERS--describes the current user 数据字典视图 查问所有的数据字典视图 select * from dict;数据字典的基表 是保留数据的真正的表数据字典视图的数据来自于基表Oracle不对基表做反对和解释DBA罕用的一些数据字典视图——动态视图 user_tables 内容和ALL_TABLES相似。 https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2105.htm#REFRN20286 user_tab_partitions 内容和ALL_TAB_PARTITIONS相似 https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2098.htm#i1591118 <!--more--> 附: Oracle数据字典详解 记得帮我点赞哦! 精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!! 朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。 我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。听我说,提高多,程序人生一把梭 如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。 职场亮哥文章列表:更多文章 自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

September 4, 2020 · 1 min · jiezi

关于oracle:Oracle内存结构和后台进程

Oracle实例=内存+后盾过程 Oracle数据库=实例+物理存储构造 由上图可知Oracle实例(一个Instance)由内存构造和程序结构组成,内存构造次要是SGA,程序结构次要是后盾过程。 物理存储构造次要是数据库文件。 这次认真学习了Oracle实例的具体内容。 为什么Oracle数据库做的这么简单?内存 数据查问的速度更好的晋升数据处理的速度后盾过程 为了实现特定的工作的服务过程数据文件 数据的永久性保留也是数据库性能降落的次要起因实例之内存构造System global area(SGA)SGA区包含Oracle实例须要的一系列内存组件,用于存放数据信息和数据管制信息,这些内存信息被所有过程所共享。SGA的各个组成包含: 组成形容Database buffer cache数据库高速缓冲区,外面寄存着从磁盘读取到内存的数据块,这些数据块能够被所有的会话拜访,是全局共享的。buffer cache分为三个局部,别离是default pool,keep pool,recycle pool。default pool是失常状况下,数据块寄存的内存区域,default pool会依据一个过期算法(LRU,Least Recently Used,近期起码应用)将过期的脏数据(批改过的数据,没有批改的数据能够不写到磁盘上)写到磁盘上。keep pool这个区域用于将一些数据始终固定在内存中。recycle pool寄存一些不常常应用的数据块,防止这些数据块在default pool中占据空间。Shared pool共享池缓存着一些用户能够共用的信息:1、能够从新应用的SQL语句 2、寄存一些数据字典的信息,包含用户账户数据,表,索引,权限等等。 3、存储寄存在数据库中的可执行代码。Redo log buffer重做日志缓冲区,寄存着数据库操作产生的redo数据,Redo log buffer以循环的形式写入,当redo log曾经写到磁盘后,就能够被后续的日志数据笼罩。Large pool对数据的解决不实用LRU算法,比shared pool更搞笑的内存收取形式。并行执行时会应用large pool。Rman备份时启动并行备份形式时,应用large pool。Java pool这块内存区域用来寄存所有特定会话的JVM(Java Virtual Machine)中的java代码和数据。Streams pool外面寄存着流相干的信息,比方流队列,其中也会流复制中capture过程提供过程内存空间。Streams pool只为流复制提供内存空间,如果没有手工配置,也没有配置流复制,这个空间将设置为0。Result cache后果缓存,当表的拜访形式以读为主前提下,从一张大表中过滤出大量的记录作为后果集,把查问后果集放入result cache,后续雷同的查问语句能够间接从result cache里获取想要的后果,省去了CPU、I/O上的开销。这个SGA组件减速了频繁运行的查问语句的执行速度。<!--more--> Program global area(PGA)不同于SGA,PGA属于独占式内存区,它的数据和管制信息为某个会话所独有,当一个会话产生时,Oracle会为这个会话调配一个PGA内存区域。能够了解为操作系统在一个过程启动时,为他调配的内存空间,是一个操作系统含意上的内存区。 User global Area(UGA)UGA中保留和以后会话相干的信息,比方会话登录的信息,pl/sql的变量,绑定变量的值等等。UGA随着连贯形式不一样能够在SGA中也能够在PGA中。 Software code areasOracle寄存本身软件代码的一部分内存区,不容许其余会话拜访 后盾过程Oracle的过程 用户过程 user process 服务器过程 server process 实例后盾过程 background process windows查看Oracle有哪些后盾过程 ...

September 4, 2020 · 1 min · jiezi

关于oracle:复杂一点的SQL语句Oracle-DDL和DML

DDL:对表或者表的属性进行了扭转create:创立表创立用户创立视图创立表 create table student(id int,score int) ; student前面与括号之间能够有空格能够没有 创立用户 create user liuyifei identified by 4852396; drop:删除整个表、删除指定的用户、删除指定的存储空间 drop table table_name;drop user user_name;--删除空的表空间,然而不蕴含物理文件drop tablespace tablespace_name;--删除非空表空间,然而不蕴含物理文件drop tablespace tablespace_name including contents;--删除空表空间,蕴含物理文件drop tablespace tablespace_name including datafiles;--删除非空表空间,蕴含物理文件drop tablespace tablespace_name including contents and datafiles;--如果其余表空间中的表有外键等束缚关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTSdrop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;truncate删除表中的所有数据,然而表还是存在的。和drop的先后参见如下: SQL> create table st1(id int);表已创立。SQL> truncate table st1;表被截断。SQL> drop table st1;表已删除。SQL> create table st1(id int);表已创立。SQL> drop table st1;表已删除。SQL> truncate table st1;truncate table st1 *第 1 行呈现谬误:ORA-00942: 表或视图不存在<!--more--> ...

September 3, 2020 · 3 min · jiezi

关于oracle:从哈夫曼编码再出发原理和现实

title: 从哈夫曼编码再登程:原理和事实 tags: 哈夫曼编码投资categories: 总结感悟对于计算机科班出身的人来说,在大学阶段简直都学过信息论和算法这两门课,信息论都会讲到香农三大定理以及哈夫曼编码,算法课上会学习二叉树,甚至哈弗曼树。在介绍哈夫曼编码之前,先介绍一下什么是无效编码,以及香农第一定理的内容。 一个好的无效编码须要遵循两个根本准则: 易辨识有效性那么怎样才能做到无效编码呢?上面有一个问题: 用10根手指头,能表白多少个数字? <!--more--> 常见的答复有以下两种: 能表白10个数字,因为小孩子数数的时候就是掰着指头数的。能表白100个数字,因为咱们平时能用一只手就能做出10个形态,也就是能数10个数,将两只手组合起来,一个示意十位,一个示意个位,就能示意从0到99共100个数字第一个答复最直观,第二个答复其实就利用了编码的常识。 然而这仍然不是最无效的编码,如果咱们思考采纳二进制,而不是十进制进行编码,则能示意1024个不同的数字。 具体的做法是这样的,把10个手指并排在一起,从左到右顺次给手指编号,编码为0~9。每一个手指头都有伸出和收起两种状态。每一种状态对应于一位二进制,十个手指头就能示意10位二进制,也就是2的10次方,也就是1024种数字。 当然也有人感觉能够让每个手指具备伸开、半伸开、膨胀三个状态,示意3的10次方也就是59049中数字。尽管这种想法也是正确的,然而过分强调有效性,而漠视了易辨识这个准则,凡事过犹不及。 常见的比拟无效的编码有阿拉伯数字,莫尔斯电码以及计算机中依据电路状态演变的二进制编码。 一个无效的编码是否就是最优编码呢,答案当然是不肯定。香农第一定理通知咱们编码长度是有实践最小值的,摘录信息论这本书中的公式如下: 编码长度 ≥ 信息熵(信息量) / 每一个码的信息量 香农对此做出了严格的数学证实,同时还证实,只有编码零碎设计得足够奇妙,下面的等号是成立的。 咱们以二进制编码为例来阐明这个公式,为了预测世界杯冠军,咱们先对世界杯的32只球队编码,那如何编码能力使得编码长度最短呢?对于这样的n选1的问题,依据香农第一定理,32选1的信息熵为log32=5比特(以2为底的对数),每个编码的信息量为1比特,依据公式最短编码长度为5。如果编码长度小于5,那么传递进来的信息就肯定蕴含不确定性,也就是有损信息、失真信息。 至于信息熵的计算为什么是以2为底的对数,能够参考分治思维。 如果咱们对经常出现的字母采纳较短的编码,对不常见的字母采纳较长的编码,依据常识,这样是可能升高编码的整体长度的。在莫尔斯电码中,咱们会发现26个英文字母中的5个元音字母aeiou的编码长度是最短的。如果对英文26个字母采纳等长度的编码,比方进行二进制编码,须要log26,就是5比特信息。而采纳莫尔斯的编码方式,均匀只须要3比特,这样效率就晋升了很多。 在中国,北京和上海等重要城市的长途电话区位码就是两位,小城市就应用3位,比方北京是010,上海是021,而江苏常州是0519(所有都疏忽掉后面的0),这样做的目标就是为了缩小均匀的编码长度。 那怎样才能找到最无效的二进制编码呢?哈夫曼在《A Method for the Construction of Minimum-Redundancy Codes》这篇论文中发表了基于自底向上的有序频率二叉树的编码方法,并很快证实了这个办法是最无效的。 对于哈夫曼树的构建过程能够加入文末的参考中的Wikipedia链接,此处只做一个简略形容: 假如咱们要给一个英文单字"F O R G E T"进行哈夫曼编码,而每个英文字母呈现的频率别离列在下图中。 进行霍夫曼编码前,咱们先创立一个霍夫曼树。 将每个英文字母按照呈现频率由小排到大,最小在左,如上图。每个字母都代表一个终端节点(叶节点),比拟F.O.R.G.E.T六个字母中每个字母的呈现频率,将最小的两个字母频率相加合成一个新的节点。比拟5.R.G.E.T,发现R与G的频率最小,故相加4+4=8。比拟5.8.E.T,发现5与E的频率最小,故相加5+5=10。比拟8.10.T,发现8与T的频率最小,故相加8+7=15。最初剩10.15,没有能够比拟的对象,相加10+15=25。最初产生的树状图就是霍夫曼树,如下图。 给霍夫曼树的所有左节点'0'与右节点'1',从树根至树叶依序记录所有字母的编码,如下图。 哈夫曼编码从实质上讲,是将最贵重的资源(最短的编码)给呈现概率最大的信息。咱们能够在任何须要分配资源的工作中利用哈夫曼编码的思维。 在风险投资畛域,利用哈夫曼编码原理投资就是一套比拟无效的零碎办法。假设你有一大笔钱能够用于风险投资,怎么投资成果最好?上面有三种做法: 均匀的投入到100个初创公司利用本人的眼光投入到一家最可能的公司中利用哈夫曼编码进行投资第一种办法,过于均匀,基本上只能失去一个市场的均匀回报。第二种办法,只投一家,其实这就是赌博,我的一些敌人购买股票时,会只买单只股票并且重仓,这种状况如果碰到了会有几倍支出,然而大多数状况下都是血本无归,这是极为蹩脚的投资形式。第三种办法是利用哈夫曼编码的原理,能够先把钱逐级投下去,每一次投资的公司呈指数缩小,而金额倍增,这样通常不会错失上市的那家。大部分资金都集中到了最初的上市或被收买的企业中,这种投资回报要远远高于前两种。 对于集体而言,利用哈夫曼编码进行投资也是实用的。美国有名的私立学校哈克学校的前校长尼克诺夫博士说过,在孩子小时候,要让他们尝试各种不同的喜好,然而最终他们要在一个点上实现冲破。他将这比作圆规画圆,一方面有一个扎得很深的核心,另一方面有足够广的很浅的覆盖面。 在工作中,一方面须要成为某个方面的专家,做到足够的深刻,比方在DevOps方面,另一方面也须要有足够的覆盖面,理解各个细分畛域的设计思维,基本原理和简略实用。 对于我而言,我会尝试很多新的事件,不会去排挤,是因为不想失去机会,尽管后果是绝大部分失败了,然而至多也尝试过了,毕竟谋事在人成事在天。另一方面对于我花了一些精力,然而看样子也成不了的事件,我是坚定做减法登场止损。这条同样也实用于感情。 参考: wiki:https://zh.wikipedia.org/wiki/%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81dahuffman:https://github.com/soxofaan/d...哈夫曼树的调整:https://blog.csdn.net/fx67758...记得帮我点赞哦! 精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!! 朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。 我是职场亮哥,YY高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。听我说,提高多,程序人生一把梭 如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。 职场亮哥文章列表:更多文章 自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

August 29, 2020 · 1 min · jiezi