Oracle数据库基础之2_体系结构
Oracle 服务器实例数据库数据库实例Instance 内存结构SGA 后台进程Background Process。数据库服务器内存SGA PGA 服务器进程在OS级的消耗SGADB Buffer CacheShared PoolRedo Log BufferLarge PoolJava PoolStreams PoolDB Buffer Cache是采用何种方式来管理的呢Oracle 用 LRULeast Recently Used算法来管理数据高速缓冲区。该算法将最近使用的数据块按照使用时间的早晚排成队列当缓冲区占满后调入新的数据块时必须清除已有的数据块来获得空闲数据块空间那么最合理的选择就是清除最早没有使用数据块因为使用该块的概率相对比较小。通过规划SGA时合理地设置数据高速缓存的尺寸尽量的避免缓冲区占满的情况发生否则就会降低系统的效率。Oracle 将队列分成两端分别为热端A-E和冷端F-J。假设新数据块K将要被读入又没有空闲位置则Oracle会对冷端头J块进行判断假设J被访问次数为1Oracle将会认为J不是一个经常被访问的块冷则会将J块踢出队列将K插入至F的位置F和其他块右移则热端为A-E冷端为K-I假设新数据块L将要被读入又没有空闲位置则Oracle会对冷端头I块进行判断假设I被访问次数为5Oracle将会认为I是一个经常被访问的块热则会将I块放入热端头A和其他快右移则热端为I-D冷端为E-H这时将对下一个冷端头块H进行判断假设H被访问次数为1Oracle将会认为H不是一个经常被访问的块冷则会将H块踢出队列将L插入至E的位置E和其他块右移则热端为I-D冷端为L-G但是这时我们会发现。I块被放入热端头经过漫长的时间I块最终会被放到冷端头进行判断如果这段时间中即使I没有再被访问过I的访问次数也仍然是5这样I将再次回到热端头这样就造成了死循环I永远无法被踢出列表。因此当I被放到热端头的时候访问次数将会被清零。如果这段时间I被访问多次则有机会回到热端头否则可能被踢出列表。PGAPrivate SQL Area:Session Memory,Persistent Area,Runtime ArenSQL Work Areas:Sort Area,Hash Area,Bitmap Merge Area不要将PGA中的私有SQL区域与SGA中存储执行计划的共享SQL区域混淆。同一或不同会话中的多个私有SQL区域可以指向SGA中的单个执行计划。例如在一个会话中执行20次SELECT * FROM和在不同会话中执行10次相同的查询可以共享相同的计划。每次执行的私有SQL区域不共享可能包含不同的值和数据。PGA是一个非共享内存区域其中包含仅供Oracle进程使用的数据和控制信息。启动Oracle进程时Oracle数据库会创建PGA。每个服务器进程和后台进程都有一个PGA。单个PGA的集合是总实例PGA或实例PGA。数据库初始化参数设置实例PGA的大小而不是单个PGA的大小。ORACLE推荐只安装数据库的服务器80%的物理内存给数据库使用OLTP系统SGA(total_mem *80%)*80%PGA(total_mem *80%)*20%SGA内存的参数是sga_target和sga_max_sizeASMMAutomatic Shared Memory Management我们不再需要手工设置sharedpool、buffer pool 等若干内存池的大小而是为SGA设置(sga_target)一个总的大小尺寸即可。Oracle数据库会根据系统负载变化自动调整各组件的大小从而使得内存始终能够流向最需要它的地方。sga_target 的值不能超过sga_max_size 的值修改sga_max_size 时必须重启实例才能生效而sga_target则可以在线修改立即生效无须重启实例。PGA内存的参数是PGA_AGGREGATE_TARGETAMMAutomatic Memory ManagementSGA和PGA的新的管理方式的参数MEMORY_TARGET和MEMORY_MAX_TARGETOracle11g开始引入了MEMORY_TARGET来管理SGA和PGA不再需要设定参数SGA_TARGET和PGA_AGGREGATE_TARGET因为这两个参数都已经被修改成自动调优的除非想指定PGA和SGA的最小值才需要设定这两个参数。如果当初始设定的MEMORY_TARGET的内存不够当前数据库使用的时候Oracle11g还提供了另外一个初始化参数MEMORY_MAX_TARGET当原始设定的内存不够使用的时候可以手工来动态调节MEMORY_TARGET的大小但是不允许超过MEMORY_MAX_TARGET的值。Background ProcessesSystem Monitor Process (SMON)主要任务是实例启动时执行恢复性工作对有故障数据库实例进行恢复。Process Monitor Process (PMON)主要任务用于恢复失败的用户进程和注册监听。Database Writer Process (DBWn)将修改后的数据块内容写回数据文件。散列写即随机IODBWn进程可以有多个比如dbw0、dbw1、dbw2。。Log Writer Process (LGWR)将内存中的日志内容写入日志文件。顺序写即顺序IO,12C之前LGWR进程只能有一个12.1开始实现了SCALABLE LGWR多进程采用多个LGWR协同对redo log日志进行并行写入,这是Oracle数据库内部最重要的改进解决了最后的并发瓶颈点Checkpoint Process (CKPT)启动检查点用于减少数据库实例恢复所需要的时间。Manageability Monitor Processes (MMON and MMNL)Recoverer Process (RECO)用于分布式数据库中的失败处理。Archiver Processes (ARCn)当数据库服务器以归档方式运行时调用该进程完成日志归档。DBWn哪些场景会触发系统发出ckpt检查点指令。脏缓冲区个数达到指定阀值。服务进程搜索一定数目的数据块后不能找到自由缓冲区。数据写入计时时间到。表空间脱机或进入只读状态。执行删除或截断表操作。执行ALTERTABLESPACE…BEGINBACKUP命令LGWR哪些场景会触发在DWBR进程将脏缓冲区写入数据文件之前。在重做日志记录达到缓冲区的三分之一。日志缓冲区记录的日志多于1M。每隔3秒钟。提交事务执行CommitCKPT哪些场景会触发发生日志切换。关闭实例(SHUTDOWNABORT除外)。手工执行检查点操作。由初始化参数LOG_CHECKPOINT_INTERVAL和LOG_CHECKPOINT_TIMEOUT强制发出查询后台进程的方法ps -ef|grep ora_查询后台进程信息的SQLSQL select distinct name,description from V$BGPROCESS order by 1;Server Processes查询服务器进程的方法ps -ef|grep LOCALLOCALYES表示用户进程比如sqlplus运行在数据库服务器上LOCALNO表示用户进程比如sqlplus运行在客户端机器上[rootDB1]# ifconfig |grep inet addrinet addr:192.168.10.101Bcast:192.168.10.255Mask:255.255.255.0inet addr:127.0.0.1Mask:255.0.0.0[rootDB1]# ps -ef|grep LOCALoracle46294628019:30?00:00:00oracleorcl(DESCRIPTION(LOCALYES)(ADDRESS(PROTOCOLbeq)))oracle46491019:31?00:00:00oracleorcl(LOCALNO)root46653661019:32pts/200:00:00grepLOCAL[rootDB1]# netstat -apn |grep 4629udp00:::46703:::*4629/oracleorcl[rootDB1]# netstat -apn |grep 4649tcp00::ffff:192.168.10.101:1521::ffff:192.168.10.1:50053ESTABLISHED4649/oracleorcl数据库数据库在物理上由多个操作系统文件组成, 其中主要包括数据文件、控制文件和重做日志文件还有其他的一些文件比如参数文件密码文件归档日志警告文件跟踪文件。startup启动选项NOMOUNT加载参数文件参数文件内容包含控制文件路径名称包含db_name。。。启动实例即出现后台进程MOUNT加载控制文件控制文件包含日志文件路径名称大小数据文件路径名称可以查询v$打头的动态性能视图不能查询dba_打头的静态数据字典视图OPEN加载数据文件可以查询所有表和视图shutdown关闭选项SHUTDOWN [NORMAL]不允许新的连接再次连数据库等待当前所有会话连接退出数据库后再关闭数据库SHUTDOWN IMMEDIATE不允许新的连接再次连数据库不允许现有连接再启动新的事务任何没有提交的事务都立刻回滚现有的连接立刻断开再关闭数据库–常用的关闭数据库的方式SHUTDOWN TRANSACTIONAL不允许新的连接再次连数据库不允许现有连接再启动新的事务等待现有会话的事务完成后再断开现有连接再关闭数据库SHUTDOWN ABORT不允许新的连接再次连数据库不允许现有连接再启动新的事务现有的连接立刻断开没有提交的事务没有回滚参数文件初始化参数文件分为静态初始化参数文件plain-text parameter file (pfile)和动态初始化参数文件server parameter file (spfile)。静态初始化参数文件为文本格式可以用vi 编辑器编辑默认名为initsid.ora动态初始化参数文件为二进制格式不可以用vi 编辑器编辑默认名为spfilesid.ora。alter system set parameternamexxscopespfile;–重启才能生效scopememory;–在当前内存中立即生效scopeboth;–以上两者都生效使用spfile启动的数据库不加scope时默认是both参数文件加载顺序实验例子优先顺序依次是spfilesid.oraspfile.orainitsid.oraSQL!ls/u01/app/oracle/product/11.2.0/db_1/dbs|grep.ora init.ora spfileocp.oraSQLcreatepfilefromspfile;SQL!cp/u01/app/oracle/product/11.2.0/db_1/dbs/spfileocp.ora/u01/app/oracle/product/11.2.0/db_1/dbs/spfile.oraSQL!ls/u01/app/oracle/product/11.2.0/db_1/dbs|grep.ora init.ora initocp.ora spfile.ora spfileocp.oraSQLshutdownimmediate;Databaseclosed.Databasedismounted.ORACLE instance shut down.SQLstartup nomount;ORACLE instance started.Total SystemGlobalArea1272213504bytesFixedSize1344680bytes Variable Size771754840bytesDatabaseBuffers486539264bytes Redo Buffers12574720bytesSQLshowparameter spfile;NAMETYPEVALUE------------------------------------ ----------- ------------------------------spfile string/u01/app/oracle/product/11.2.0/db_1/dbs/spfileocp.oraSQLshutdownabort;ORACLE instance shut down.SQL!mv/u01/app/oracle/product/11.2.0/db_1/dbs/spfileocp.ora/u01/app/oracle/product/11.2.0/db_1/dbs/spfileocpXX.oraSQL!ls/u01/app/oracle/product/11.2.0/db_1/dbs|grep.ora init.ora initocp.ora spfile.ora spfileocpXX.oraSQLstartup nomount;ORACLE instance started.Total SystemGlobalArea1272213504bytesFixedSize1344680bytes Variable Size771754840bytesDatabaseBuffers486539264bytes Redo Buffers12574720bytesSQLshowparameter spfile;NAMETYPEVALUE------------------------------------ ----------- ------------------------------spfile string/u01/app/oracle/product/11.2.0/db_1/dbs/spfile.oraSQLshutdownabort;ORACLE instance shut down.SQL!mv/u01/app/oracle/product/11.2.0/db_1/dbs/spfile.ora/u01/app/oracle/product/11.2.0/db_1/dbs/spfileXX.oraSQL!ls/u01/app/oracle/product/11.2.0/db_1/dbs|grep.ora init.ora initocp.ora spfileocpXX.ora spfileXX.oraSQLstartup nomount;ORACLE instance started.Total SystemGlobalArea1272213504bytesFixedSize1344680bytes Variable Size771754840bytesDatabaseBuffers486539264bytes Redo Buffers12574720bytesSQLshowparameter spfile;NAMETYPEVALUE------------------------------------ ----------- ------------------------------spfile stringSQLshutdownabort;ORACLE instance shut down.SQL!mv/u01/app/oracle/product/11.2.0/db_1/dbs/initocp.ora/u01/app/oracle/product/11.2.0/db_1/dbs/initocpXX.oraSQL!ls/u01/app/oracle/product/11.2.0/db_1/dbs|grep.ora init.ora initocpXX.ora spfileocpXX.ora spfileXX.oraSQLstartup nomount;ORA-01078: failureinprocessing system parameters LRM-00109: couldnotopenparameterfile/u01/app/oracle/product/11.2.0/db_1/dbs/initocp.oraSQL控制文件新增一个控制文件的操作SQLshowparameter control_files NAMETYPEVALUE------------------------------------ ----------- ------------------------------control_files string/u01/app/oracle/oradata/ocp/c ontrol01.ctl,/u01/app/oracle/oradata/ocp/control02.ctlSQL!ls/u01/app/oracle/oradata/ocp|grep control control01.ctl control02.ctlSQLaltersystemsetcontrol_files/u01/app/oracle/oradata/ocp/control01.ctl,/u01/app/oracle/oradata/ocp/control02.ctl,/u01/app/oracle/oradata/ocp/control03.ctlscopespfile;SQLshutdownimmediate;SQL!cp/u01/app/oracle/oradata/ocp/control01.ctl/u01/app/oracle/oradata/ocp/control03.ctlSQL!ls/u01/app/oracle/oradata/ocp|grep control control01.ctl control02.ctl control03.ctlSQLstartupSQLshowparameter control_files NAMETYPEVALUE------------------------------------ ----------- ------------------------------control_files string/u01/app/oracle/oradata/ocp/c ontrol01.ctl,/u01/app/oracle/oradata/ocp/control02.ctl,/u01/app/oracle/oradata/ocp/con trol03.ctl丢失一个控制文件的恢复操作SQL ! rm -f /u01/app/oracle/oradata/ocp/control02.ctlSQL shutdown immediate;都会报错SQLshutdownabort;ORACLE instance shut down.SQL!cp/u01/app/oracle/oradata/ocp/control01.ctl/u01/app/oracle/oradata/ocp/control02.ctlSQLstartup所有控制文件丢失没有任何备份的情况下重建控制文件前提是要知道redo log和datafile路径SQLshutdownimmediate;SQL!rm-f/u01/app/oracle/oradata/ocp/control0*.ctlSQL!ls/u01/app/oracle/oradata/ocp/|grep controlSQLstartupCREATECONTROLFILE REUSEDATABASEocpNORESETLOGS NOARCHIVELOG MAXLOGFILES32MAXLOGMEMBERS2MAXDATAFILES32MAXINSTANCES1MAXLOGHISTORY449LOGFILEGROUP1/u01/app/oracle/oradata/ocp/redo01.log,GROUP2/u01/app/oracle/oradata/ocp/redo02.log,GROUP3/u01/app/oracle/oradata/ocp/redo03.logDATAFILE/u01/app/oracle/oradata/ocp/users01.dbf,/u01/app/oracle/oradata/ocp/undotbs01.dbf,/u01/app/oracle/oradata/ocp/sysaux01.dbf,/u01/app/oracle/oradata/ocp/system01.dbf,/u01/app/oracle/oradata/ocp/example01.dbfCHARACTERSETAL32UTF8;SQL!ls/u01/app/oracle/oradata/ocp/|grep control control01.ctl control02.ctl control03.ctlSQLalterdatabaseopen;SQLaltertablespaceTEMPaddtempfile/u01/app/oracle/oradata/ocp/temp01.dbfsize100M reuse;数据文件调整表空间大小表空间物理上表现为一个或多个数据文件表空间的尺寸即表空间所有数据文件尺寸的总和。因此表空间的大小由数据文件的个数和数据文件的大小来决定可通过以下方法进行调整1、重置数据文件的大小ALTER DATABASE DATAFILE’…’ |FileNo RESIZE XXALTER DATABASE DATAFILE ‘/u01/app/oracle/oradata/mytbs7.ora’ RESIZE 10GB;2、更改数据文件的大小可以使用数据文件AUTOEXTEND自动扩展属性自动调整数据文件的大小也可以使用ALTER TABLESPACE手动调整。ALTER DATABASE DATAFILE ‘/u01/app/oracle/oradata/mytbs7.ora’ AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;3、使用ALTER TABLESPACE 命令给表空间添加新的数据文件ALTER TABLESPACE mytbs3 ADD DATAFILE ‘/u01/app/oracle/oradata/mytbs3c.dbf’ SIZE 10GB;移动数据文件12C之前的版本移动有两种方法前提就是数据文件都不能是online状态方法1使用ALTER DATABASE 命令,数据库必须处于mount状态alter database rename file ‘/XX/YY.dbf’ to ‘/ZZ/WW.dbf’;方法2使用ALTER TABLESPACE 命令数据库必须处于open状态但是数据文件对应的表空间必须是offline状态alter tablespace tablespace_name rename datafile ‘/XX/YY.dbf’ to ‘/ZZ/WW.dbf’;12C开始数据文件可以在线移动alter database move datafile ‘/XX/YY.dbf’ to ‘/ZZ/WW.dbf’;undo data数据修改之前的保存的一份前镜像undo属于data file回滚段中的数据主要分为以下三种类型1.Uncommitted undo information; 未提交的回滚数据该数据所关联的事务并未提交用于实现读一致性所以该数据不能被其它事务的数据所覆盖(假如回滚段不够的情况下开始执行一个事务执行到一半就会提示ORA-30036:unable to extend segment by %s in undo tablespace ‘%s’。就如undo只有10M的情况下delete一张100M的表delete执行不到一半就会开始报错了。2.Committed undo information; 已经提交但未过期的回滚数据该数据关联的事务已经提交但是仍在undo retention参数保持的时间内3.Expired undo information; 事务已经提交而且数据保存时间已经超过undo retention参数指定的时间属于已经过期的数据当回滚段不足时会优先覆盖Expired undo information当过期数据空间覆盖后会再覆盖Committed undo information的区域这时undo retention参数所规定的保持时间是不起作用的Uncommitted undo information的数据是不允许覆盖的如果要求提交的数据在undo retention参数规定的时间内不会被覆盖必须在undo表空间上指定RETENTION GUARANTEE了解Oracle在什么情况下会产生ORA-01555:snapshot too old假设有一张1000万行数据的test表预计test全表扫描1次需要1个小时参考过程如下1、在1:00用户A发出了select * from test;此时不管将来test怎么变化1小时执行完后显示的正确结果应该是用户A看到在1:00这个时刻的内容。2、在1:20用户B执行了update命令更新了test表中的第900万行的这条记录这时用户A的全表扫描还没有到达第900万条。毫无疑问这个时候第900万行的这条记录是被写入了回滚段假设是回滚段UNDOTS1如果用户A的全表扫描到达了第900万行是应该会正确的从回滚段UNDOTS1中读取出1:00这个时刻的内容的。3、到了1:30这时用户B将他刚才做的update操作提交了但是这时系统仍然可以给用户A提供正确的数据因为那第900万行记录的内容仍然还在回滚段UNDOTS1里。但要注意到就是第900万行在回滚段UNDOTS1里的数据有可能随时被覆盖掉因为这条记录已经被提交了4、到了1:40这时由于用户A的查询时间漫长而业务在一直不断的进行UNDOTS1回滚段在被多个不同的事务使用着回滚段开始出现了不足的情况由于test表第900万行的这条记录已经被标记提交了所以在1:40它在回滚段中的空间被其他事务覆盖掉的5、到了1:50用户A的查询终于到了第900万行这时需要到回滚段UNDOTS1去找数据而这时已经出现了第4条说的情况该回滚段已经被覆盖掉了这时就出现了ORA-01555错误。redo log日志文件物理层面数据修改前先写入到redo再写入到数据文件内存层面数据修改前先写入到log buffer再写入到db bufferSQLselectGROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,ARCHIVED,STATUS from v$log;GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS---------- ---------- ---------- ---------- ---------- --- ----------------1116524288001NOCURRENT2114524288001NOINACTIVE3115524288001NOINACTIVESQLcol MEMBER format a50SQLselectGROUP#,MEMBER from v$logfile;GROUP# MEMBER---------- ----------------------------------------3/u01/app/oracle/oradata/ocp/redo03.log2/u01/app/oracle/oradata/ocp/redo02.log1/u01/app/oracle/oradata/ocp/redo01.log新增redo log组SQLalterdatabaseaddlogfilegroup4(/u01/app/oracle/oradata/ocp/redo0401.log,/u01/app/oracle/oradata/ocp/redo0402.log)size50M;新增redo log组的成员SQLalterdatabaseaddlogfile member/u01/app/oracle/oradata/ocp/redo03_02.logtogroup3;删除redo log组SQLaltersystem switch logfile;SQL/SQL/SQLselectGROUP#,THREAD#,SEQUENCE#,BYTES,MEMBERS,ARCHIVED,STATUS from v$log;SQLALTERDATABASEDROPLOGFILEGROUP4;--不能删除状态是current的logfile group否则会报错ORA-01623: log Niscurrentlogforinstance orcl(thread1)-cannotdrop--不能删除状态是active的logfile group否则会报错ORA-01624: log N neededforcrash recoveryofinstance orcl(thread1)删除redo log成员SQLALTERDATABASEDROPLOGFILE MEMBER/u01/app/oracle/oradata/ocp/redo03_02.log;--不能删除状态是current的logfile memberORA-01609: log3isthecurrentlogforthread1-cannotdropmembers口令文件orapwd命令orapwd file$ORACLE_HOME/dbs/orapwSID passwordxxfile名的格式必须是orapwSID否则不会正常口令文件用于存放特权用户信息及其口令的文件“特权用户”是指具有启动、关闭Oracle 服务器并建立数据库等特殊权利的用户。如具有SYSDBA、SYSOPER、SYSASM权限的用户。非特权用户信息及口令存放在数据库的系统数据字典中例如dba_users。SQL select * from v$pwfile_users;没有密码文件时结果为空C:\Users\101004871sqlplus sys/oracle192.168.10.101:1521/ocp as sysdba没有密码文件时异机使用sysdba登录会提示权限不够本机不会报错是因为本机可以开启OS验证异机的话必须使用密码文件验证归档查看是否归档模式看下面的Database log modeSQLarchive log listDatabaselogmodeNoArchiveModeAutomatic archival Disabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence12Currentlog sequence14归档的开启1、设置归档路径SQL alter system set log_archive_dest_1‘location/u01/app/oracle/archivelog’;LOCATIONpath_name表示本地磁盘SERVICEnet_service_name表示网络上其他数据库服务器的磁盘2、设置归档模式SQL shutdown immediate;SQL startup mount;SQL alter database archivelog;SQL alter database open;SQL alter system archive log current;SQL ! ls /u01/app/oracle/archivelogtrace file和alert log fileSQLshowparameterdumpNAMETYPEVALUE------------------------------------ ----------- ------------------------------background_core_dump stringpartialbackground_dump_dest string/u01/app/oracle/diag/rdbms/ocp/ocp/trace core_dump_dest string/u01/app/oracle/diag/rdbms/ocp/ocp/cdump max_dump_file_size string unlimited shadow_core_dump stringpartialuser_dump_dest string/u01/app/oracle/diag/rdbms/ocp/ocp/tracetrace file就是/u01/app/oracle/diag/rdbms/ocp/ocp/trace下的trc结尾文件alert log file就是/u01/app/oracle/diag/rdbms/ocp/ocp/trace下的alert_SID.log数据库后台进程跟踪文件名称包含Oracle SID、后台进程名称和操作系统进程编号而服务器进程跟踪文件名包含Oracle SID、字符串“ora”和操作系统进程号orcl_ora_5821.trc是服务器进程跟踪文件即客户端会话连上来产生的跟踪文件orcl_mmon_4139.trc是后台进程跟踪文件alert_SID.log文件记录报错信息都是ORA-开头例如ORA-00313我们可以通过oerr ora 00313命令查看该报错的详细信息SCNSystem Change Number. SCN的值是数据库更改的逻辑时间点查询当前SCNSQLselect dbms_flashback.get_system_change_number() from dual;–不会影响原有的最新值SQLselect current_scn from v$database;–SQL只要执行一次SCN就会在原有的最新值的基础上加1,和序列号的nextval相似oracle实例恢复(instance recovery)时先前滚(roll forward)再回滚(roll backward)redo、undo用到的原因是因redo log先于datafile写入持久层所以实例启动时需要先前滚redo log中修改的数据如果这些数据没有commit再使用undo中数据回滚回去。假如一个会话A修改某行的某列数值5为3但是没有来得及commit就执行了shutdown abort。因为没有ckpt所以data file和control file没有记录最新的SCN但是redo起码有shutdown abort前三秒的SCNSMON进程发现redo log、data file、control file三者的SCN不一致则利用redo log进行前滚同步数据文件、控制文件使这二者和重做日志文件的最新SCN一致当前滚完成后发现会话A的数据块的ITL状态是uncommitted则再使用undo中会话A的前镜像回滚再一次同步数据文件、控制文件、重做日志文件确保三者都是一致的SCN配置DB随服务器开机而自动启动1、# vim /etc/oratabDB1:/u01/app/oracle/product/19.3.0/db_1:Y2、# vim /lib/systemd/system/rc-local.service[Install]WantedBymulti-user.target3、# systemctl enable rc-local.service4、# chmod x /etc/rc.d/rc.local5、# vim /etc/rc.localsu- oracle-c/u01/app/oracle/product/19.3.0/db_1/bin/lsnrctl startsu- oracle-c/u01/app/oracle/product/19.3.0/db_1/bin/dbstart start访问数据库的形象一个例子客户客户端程序工厂实例数据库保安监听业务代表和小办公室私有会话Server ProcessPGA厂区公共展示台SGA客户去访问一个工厂先要到保安(监听)那里登记登记通过则进入工厂进入工厂后工厂会安排一个业务代表和客户接触业务代表安排客户在小办公室PGA有很多不同客户在不同的小办公室里洽谈客户想看产品就进入到厂区的公共展示台看SGA如果公共展示台没有就需要从仓库database拿出来放到公共展示台如果客户想让工厂代加工自己的产品就必须客户先下订单工厂拿到生产订单redo工厂才能开始生产产品data。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →