MSSQL编程:创立逻辑备用数据库
出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。创立|数据|数据库上面的是LogicalStandbyDatabase的设置步骤.
(上面用到的一些文件的地位都是一时性的,还得做必定的修正)
将主数据库置为FORCELOGGING形式.在主数据库创立以后做以下操纵:
SQL>ALTERDATABASEFORCELOGGING;
确认主数据库是回档的并界说好当地回档.以下:
SQL>ALTERSYSTEMSETLOG_ARCHIVE_DEST_1=LOCATION=e:oracleoradataorclarchiveMANDATORYSCOPE=BOTH;
确认LOG_PARALLELISM初始化参数值,LogicalStandbyDatabase请求此参数的值为1,是个缺省值.假如查出来的参数值为1则不必要做修正,假如不是1值则要用ALTERSYSTEMSET命令做修正.详细操纵以下:
SQL>SHOWPARAMETERLOG_PARAMETER------检察参数确当前值
SQL>ALTERSYSTEMSETLOG_PARALLELISM=1SCOPE=BOTH;
修正完今后要封闭数据库偏重新启动此参数才无效.
SQL>SHUTDOWNIMMEDIATE
SQL>STARTUP
确认撑持的数据范例和表:
在创建LogicalStandbyDatabase时,有些数据范例和表是撑持的而有些是不撑持的.
撑持的数据范例有:
CHAR
NCHAR
VARCHAR2andVARCHAR
NVARCHAR2
NUMBER
DATE
TIMESTAMP
TIMESTAMPWITHTIMEZONE
TIMESTAMPWITHLOCALTIMEZONE
INTERVALYEARTOMONTH
INTERVALDAYTOSECOND
RAW
CLOB
BLOB
不撑持的数据范例有:
NCLOB
LONG
LONGRAW
BFILE
ROWID
UROWID
user-definedtypes
objecttypesREFs
varrays
nestedtables
不撑持的工具范例有:
User-definedtablesandsequencesintheSYSschema
Tableswithunsupporteddatatypes
Tablesusingdatasegmentcompression
Index-organizedtables
确认主数据是不是包括不撑持的工具能够查询数据字典表DBA_LOGSTDBY_UNSUPPORTED:
SQL>SELECTDISTINCTOWNER,TABLE_NAMEFROMDBA_LOGSTDBY_UNSUPPORTED
2>ORDERBYOWNER,TABLE_NAME;
用以下的体例检察下面所得出的表的字段名和数据范例:
SQL>SELECTCOLUMN_NAME,DATA_TYPEFROMDBA_LOGSTDBY_UNSUPPORTED
2>WHEREOWNER=OEANDTABLE_NAME=CUSTOMERS;
LogicalStandbyDatabase会过滤的SQL语句为:
ALTERDATABASE
ALTERSESSION
ALTERSNAPSHOT
ALTERSNAPSHOTLOG
ALTERSYSTEMSWITCHLOG
CREATECONTROLFILE
CREATEDATABASE
CREATEDATABASELINK
CREATEPFILEFROMSPFILE
CREATESCHEMAAUTHORIZATION
CREATESNAPSHOT
CREATESNAPSHOTLOG
CREATESPFILEFROMPFILE
CREATETABLEASSELECTFROMACLUSTERTABLE
DROPDATABASELINK
DROPSNAPSHOT
DROPSNAPSHOTLOG
EXPLAIN
LOCKTABLE
RENAME
SETCONSTRAINTS
SETROLE
SETTRANSACTION
确保主数据库中的表行是能够独一确认的(即有表中有主键)
找出没有主键的表:
SQL>SELECTOWNER,TABLE_NAME,BAD_COLUMNFROMDBA_LOGSTDBY_NOT_UNIQUE
2>WHERETABLE_NAMENOTIN(SELECTTABLE_NAMEFROMDBA_LOGSTDBY_UNSUPPORTED);
OWNERTABLE_NAMEB
-------------------------------------------------------------
OUTLNOL$HINTSN
OUTLNOL$NODESN
SYSTEMMVIEW$_ADV_BASETABLEN
SYSTEMMVIEW$_ADV_SQLDEPENDN
SYSTEMMVIEW$_ADV_FILTERINSTANCEN
SYSTEMDEF$_ORIGINN
SYSTEMREPCAT$_SNAPGROUPN
SYSTEMREPCAT$_DDLN
SYSTEMREPCAT$_RESOLUTION_STATISTICSN
SYSTEMREPCAT$_RUNTIME_PARMSY
SYSTEMMVIEW$_ADV_INDEXN
选择出来看BAD_COLUMN字段值.假如此值为N暗示这个表关于没有主键字段列有充足的列信息传到备用数据库中.假如此值为Y暗示信息不敷必需对这个表加一个DISABLERELYCONSTRAINT以使关于这个表的LOG能够APPLY到逻辑备用库中.
选择出来只要SYSTEM用户下的表REPCAT$_RUNTIME_PARMS必要做修正,然后
SQL>DESCSYSTEM.REPCAT$_RUNTIME_PARMS检察这个表的布局.然后做修正以下:
SQL>ALTERTABLESYSTEM.REPCAT$_RUNTIME_PARMSADDPRIMARYKEY(RUNTIME_PARM_ID,PARAMETER_NAME)RELYDISABLE;
修正完今后再做下面的查询以确认没有表必要再做修正:
SQL>SELECTOWNER,TABLE_NAME,BAD_COLUMNFROMDBA_LOGSTDBY_NOT_UNIQUE
2>WHERETABLE_NAMENOTIN(SELECTTABLE_NAMEFROMDBA_LOGSTDBY_UNSUPPORTED);
OWNERTABLE_NAMEB
-------------------------------------------------------------
OUTLNOL$HINTSN
OUTLNOL$NODESN
SYSTEMMVIEW$_ADV_BASETABLEN
SYSTEMMVIEW$_ADV_SQLDEPENDN
SYSTEMMVIEW$_ADV_FILTERINSTANCEN
SYSTEMDEF$_ORIGINN
SYSTEMREPCAT$_SNAPGROUPN
SYSTEMREPCAT$_DDLN
SYSTEMREPCAT$_RESOLUTION_STATISTICSN
SYSTEMMVIEW$_ADV_INDEXN
确认主数据库能够补足日记(SupplementalLogging)
SQL>SELECTSUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UIFROMV$DATABASE;
SUPSUP
------
NONO(NO值暗示此时主数据库是不撑持补足日记的)
使主数据库能够补足日记
SQL>ALTERDATABASEADDSUPPLEMENTALLOGDATA(PRIMARYKEY,UNIQUEINDEX)COLUMNS;(这条语句将有关由主数据修正的行独一信息能够经由过程日记传到备用数据库中并做LogApply)
在主数据库中做新的日记切换.由于在上一步做完EnableSupplementalLogging以后.以后日记大概包括了有补足的日记和没有补足的日记,而逻辑备用数据库的LogApply是不撑持二者一同的日记的.以是在创立逻辑备用数据库之前要确保要从主数据库传到备用数据库的一切日记都只包括补足日记
SQL>ALTERSYSTEMARCHIVELOGCURRENT;
确认一下主数据库此时撑持补足日记
SQL>SELECTSUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UIFROMV$DATABASE;
SUPSUP
------
YESYES(YES值暗示此时主数据库是撑持补足日记的)
SUPPLEMENTAL_LOG_DATA_PK:撑持补足日记,其信息是primarykey
SUPPLEMENTAL_LOG_DATA_UI:撑持补足日记,其信息是uniqueindex
在主数据库创立一个瓜代的表空间.并用DBMS_LOGMNR_D.SET_TABLESPACE将某些表放到这个表空间中.由于在逻辑备用数据库中有一些表是属于SYS和SYSTEM用户的,而这些是放在表空间的.这些表大概在一段工夫跋文录猛增.为了使SYSTEM表空间不会被用满而招致数据库DOWN机,创建这个瓜代的表空间来寄存这些表.
SQL>CREATETABLESPACElogmnrtsDATAFILE/disk1/oracle/dbs/logmnrts.dbf
2>SIZE25MAUTOEXTENDONMAXSIZE2048M
3>SEGMENTSPACEMANAGEMENTAUTO;
SQL>EXECUTEDBMS_LOGMNR_D.SET_TABLESPACE(logmnrts);
(下面一步EXECUTEDBMS_LOGMNR_D.SET_TABLESPACE(logmnrts);能够在今后的保护中再做响应的保护)
创立逻辑备用数据库
确认主数据库的数据文件和日记文件
在主数据库中经由过程查询V$DATAFILE取得数据文件的地位
SQL>selectnamefromv$datafile;
NAME
-----------------------------------------------------------
E:ORACLEORA92ORCLYSTEM01.DBF
E:ORACLEORA92ORCLUNDOTBS01.DBF
E:ORACLEORA92ORCLEXAMPLE01.DBF
E:ORACLEORA92ORCLINDX01.DBF
E:ORACLEORA92ORCLTOOLS01.DBF
E:ORACLEORA92ORCLUSERS01.DBF
E:ORACLEORA92ORCLLOGMNRTS.DBF
E:ORACLEORA92ORCLXDB01.DBF
在主数据库中经由过程查询V$LOGFILE取得日记文件的地位
SQL>colmemberformata35
SQL>selectgroup#,type,memberfromv$logfile;
GROUP#TYPEMEMBER
----------------------------------------------------
1ONLINEE:ORACLEORA92ORCLREDO01.LOG
2ONLINEE:ORACLEORA92ORCLREDO02.LOG
3ONLINEE:ORACLEORA92ORCLREDO03.LOG
对主数据库做一次冷备份(全备份,拷贝一切必要的文件:数据文件,把持文件,参数文件)详细做法以下:
封闭数据库:SQL>SHUTDOWNIMMEDIATE
将后面失掉的数据文件拷贝到一个一时的地位F:ORACLE
启动数据库到MOUNT形态下:SQL>STARTUPMOUNT
为逻辑备用数据库创立一个备份的把持文件:
SQL>ALTERDATABASEBACKUPCONTROLFILETO
2>f:oraclekcontrol.ora;
将主数据库放在restrictedsession形式下(在翻开数据库时以避免用户对数据库举行DML和DDL操纵):SQL>ALTERSYSTEMENABLERESTRICTEDSESSION;
创建Logminer字典(LogicalStandbyDatabase在分化REDOLOG为SQL语句时必要Logminer工具,而这个工具在利用之前必要创建Logminer字典):
SQL>ALTERDATABASEOPEN;
SQL>EXECUTEDBMS_LOGSTDBY.BUILD;
作废主数据库的restrictedsession形式利用户能够实行DML和DDL语句:
SQL>ALTERSYSTEMDISABLERESTRICTEDSESSION;
检察比来的回档日记(在前面的逻辑备用数据库的创立过程当中必要用到)
SQL>ALTERSYSTEMARCHIVELOGCURRENT;(对以后日记做回档)
SQL>SELECTNAMEFROMV$ARCHIVED_LOG
2>WHERE(SEQUENCE#=(SELECTMAX(SEQUENCE#)FROMV$ARCHIVED_LOG
3>WHEREDICTIONARY_BEGIN=YESANDSTANDBY_DEST=NO));
NAME
-----------------------------------------------------------------
E:ORACLEORADATAORCLARCHIVE1_19.DBF
下面的查询个中WHERE子句的DICTIONARY_BEGIN指明是要找出新建的字典,STANDBY_DEST指明是当地回档目次而不是远程回档.
为备用数据库创立筹办初始化参数:
SQL>CREATEPFILE=f:oracleinitstdby.oraFROMSPFILE;
将后面三步所失掉的数据文件,把持文件和参数文件从主数据库的服务器拷贝到备用数据库的服务器.(拷贝到f:oracle目次)
在备用数据库服务器修正初始化参数(刚拷贝过去的初始化参数文件)修正后的值也许以下:
*.aq_tm_processes=1
*.background_dump_dest=e:oracleadmintandbydump
*.compatible=9.2.0.0.0
*.control_files=e:oracleoradatacontrolfilekcontrol.ora
*.core_dump_dest=e:oracleadmintandbylcdump
*.db_block_size=16384
*.db_cache_size=137363456
*.db_domain=
*.db_file_multiblock_read_count=16
*.db_name=orcl
*.dispatchers=(PROTOCOL=TCP)(SERVICE=orclXDB)
*.fast_start_mttr_target=300
*.hash_join_enabled=TRUE
*.instance_name=standby
*.java_pool_size=33554432
*.job_queue_processes=10
*.large_pool_size=27262976
*.log_archive_dest_1=LOCATION=e:oracleoradataarchiveMANDATORY
*.log_archive_dest_state_1=ENABLE
*.log_archive_format=arch%d_%s.dbf
*.log_archive_start=true
*.open_cursors=300
*.pga_aggregate_target=80000000
*.processes=150
*.query_rewrite_enabled=FALSE
*.remote_login_passwordfile=EXCLUSIVE
*.shared_pool_size=45088768
*.sort_area_size=524288
*.sql_trace=FALSE
*.star_transformation_enabled=FALSE
*.timed_statistics=TRUE
*.undo_management=AUTO
*.undo_retention=10800
*.undo_tablespace=UNDOTBS1
*.user_dump_dest=e:oracleadmintandbyudump
*.workarea_size_policy=AUTO
*.lock_name_space=STANDBY
*.standby_file_management=AUTO
*.standby_archive_dest=e:oracleoradatatdarch
*.log_parallelism=1
在备用数据库一端创立一个新的实例.以下操纵:
c:>oradim–new–sidstandby–startmodeauto
在主数据设置listener.ora,tnsnames.ora和sqlnet.ora文件.设置完以后分离以下:
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.0.122)(PORT=1521))
)
)
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
)
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=e:oracleora92)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=orcl)
(ORACLE_HOME=e:/oracle/ora92)
(SID_NAME=orcl)
)
)
tnsnames.ora文件为:
ORCL=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.0.122)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
STANDBY=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.0.222)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
sqlnet.ora文件为:
SQLNET.AUTHENTICATION_SERVICES=(NTS)
NAMES.DIRECTORY_PATH=(HOSTNAME,TNSNAMES,ONAMES)
在备用数据库设置listener.ora,tnsnames.ora和sqlnet.ora.设置后的文件内容分离以下:
个中设置sqlnet.ora文件中的参数sqlnet.expire_time是enable逝世毗连侦测
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC))
)
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.0.222)(PORT=1521))
)
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl2)
(ORACLE_HOME=e:oracleora92)
(SID_NAME=ORCL)
)
(SID_DESC=
(PROGRAM=extproc)
(SID_NAME=PLSExtProc)
(ORACLE_HOME=e:oracleora92)
)
)
tnsnames.ora文件为:
ORCL=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.0.122)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
STANDBY=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=10.100.0.222)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=orcl)
)
)
EXTPROC_CONNECTION_DATA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0))
)
(CONNECT_DATA=
(SID=PLSExtProc)
(PRESENTATION=RO)
)
)
sqlnet.ora文件为:
SQLNET.AUTHENTICATION_SERVICES=(NTS)
NAMES.DIRECTORY_PATH=(HOSTNAME,TNSNAMES,ONAMES)
SQLNET.EXPIRE_TIME=2
在主数据库和备用数据库用lsnrctlstart和lsnrctlstop启动和封闭监听器.然后在主数据库用tnspingstandby和在备用数据库用tnspingorcl试看两个库是不是是通的.
用初始化参数文件启动数据库到MOUNT形态下.
SQL>STARTUPMOUNTPFILE=f:oracleadmintandbypfileinitstdby.ora;
Rename数据文件.假如拷贝过去的数据文件的地位与本来在主库中的地位纷歧样.而我们如今利用的是主库备份过去的把持文件,以是要将数据文件rename到新的地位.做以下操纵(假如地位是一样的能够不做操纵):
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLYSTEM01.DBF
2>TOf:oracletandbyystem01.dbf;
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLUNDOTBS01.DBF
2>TOf:oracletandbyUNDOTBS01.DBF;
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLEXAMPLE01.DBF
2>TOf:oracletandbyEXAMPLE01.DBF;
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLINDX01.DBF
2>TOf:oracletandbyINDX01.DBF;
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLTOOLS01.DBF
2>TOf:oracletandbyTOOLS01.DBF;
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLUSERS01.DBF
2>TOf:oracletandbyUSERS01.DBF;
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLXDB01.DBF
2>TOf:oracletandbyXDB01.DBF;
SQL>ALTERDATABASERENAMEFILEE:ORACLEORA92ORCLLOGMNRTS.DBF
2>TOf:oracletandbyLOGMNRTS.DBF;
Rename日记文件.这一步只是将把持文件中日记文件的地位信息举行变动,此时并没有真实的日记文件天生,也没有从主库拷贝日记文件到备用库.做以下:
SQL>ALTERDATABASERENAMEFILEe:oracleora92orcledo01.log
2>TOe:oracleadataedo01.log;
SQL>ALTERDATABASERENAMEFILEe:oracleora92orcledo02.log
2>TOe:oracleadataedo02.log;
SQL>ALTERDATABASERENAMEFILEe:oracleora92orcledo03.log
2>TOe:oracleadataedo03.log;
在备用数据库翻开DATAGUARD(利用户不克不及在LogicalStandbyDatabase做更新操纵),做以下:
SQL>ALTERDATABASEGUARDALL;
SQL>ALTERDATABASEOPENRESETLOGS;
重设LogicalStandbyDatabase的数据库名(这一步的目标性临时没完整弄分明)
利用DBNEWID(nid)工具来重设数据库名.要先封闭数据库并把数据库启动为MOUNT形态:
SQL>SHUTDOWNIMMEDIATE;
SQL>STARTUPMOUNTPFILE=f:oracleinitstdby.ora;
用DBNEWID工具,操纵以下(这个是在命令行下操纵):
nidTARGET=SYS/password@orclDBNAME=standby
然后再封闭数据库:SQL>SHUTDOWNIMMEDIATE
改动初始化参数:db_name=standby
启动数据库为MOUNT形态:SQL>STARTUPMOUNT;
为备用数据库创立SERVERPARAMETERFILE:
SQL>CREATESPFILEFROMPFILE=f:oracleinitstdby.ora;
封闭数据库然后用SPFILE重启动数据库:
SQL>SHUTDOWNIMMEDIATE
SQL>STARTUPMOUNT
SQL>ALTERDATABASEOPENRESETLOGS;
给备用数据库创立一个新的一时文件(属于一时表空间)
先检察备用库中是不是有一时文件,假如没有就间接创立,假如有要删除从头创立.(由于从主库的冷备份拷贝过去的一时文件在备用库中是不克不及用的.以是得重修)响应操纵以下:
SQL>SELECT*FROMV$TEMPFILE;-------检察是不是有一时文件
norowsselected
SQL>ALTERDATABASETEMPFILEtempfilenameDROP;------删除重修前的一时文件
SQL>SELECTTABLESPACE_NAMEFROMDBA_TABLESPACESWHERE
2>CONTENTS=TEMPORARY;--------检察一时文件所属的一时表空间名
TABLESPACE_NAME
--------------------------------
TEMP
SQL>ALTERTABLESPACETEMPADDTEMPFILE
2>f:oracletandby emp01.dbf
3>SIZE40MREUSE;--------给这个一时表空间重修一个一时文件
注册回档日记和启动SQLApplyServices
SQL>ALTERDATABASEREGISTERLOGICALLOGFILE
2>e:oracleoradataorclarc0004.001;------将比来的回档日记注册到LogicalStandbyDatabase.这里的e:oracleoradatatdarchARCH1069826922_21.DBF是在后面失掉的.
SQL>ALTERDATABASESTARTLOGICALSTANDBYAPPLYINITIAL;-----启动redologsapply,用实行SQL语句的体例来applyredologs.就是SQLApplyServices.到于INITIAL是第一次启动SQLApplyServices时要写的.前面的能够间接用以下操纵
SQL>ALTERDATABASESTOPLOGICALSTANDBYAPPLY;----中断
SQL>ALTERDATABASESTARTLOGICALSTANDBYAPPLY;----启动
在主数据库设置远程回档.
SQL>ALTERSYSTEMSETLOG_ARCHIVE_DEST_3=SERVICE=payroll3SCOPE=BOTH;
--------设置远程回档目次
SQL>ALTERSYSTEMSETLOG_ARCHIVE_DEST_STATE_3=ENABLESCOPE=BOTH;
--------设置这个回档目次的形态为可用
SQL>ALTERSYSTEMARCHIVELOGCURRENT;----对以后日记举行回档,启动远程回档.
反省LogicalStandbyDatabase
在创建好LogicalStandbyDatabase后,LogTransportService和LogApplyService服务也都启动.必要反省一下日记是不是正由主数据库传到备用数据库并apply.要做到这个目标,用上面的步骤来做.
反省日记是不是已被注册到LogicalStandbyDatabase中.毗连到备用数据库并查询DBA_LOGSTDBY_LOG视图.
SQL>ALTERSESSIONSETNLS_DATE_FORMAT=DD-MON-YYHH24:MI:SS;
Sessionaltered.
SQL>SELECTSEQUENCE#,FIRST_TIME,NEXT_TIME,DICT_BEGIN,DICT_END
2>FROMDBA_LOGSTDBY_LOGORDERBYSEQUENCE#;
SEQUENCE#FIRST_TIMENEXT_TIMEDICDIC
------------------------------------------------------
2223-11月-0414:00:1723-11月-0414:26:58NONO
1rowsselected.
毗连到主数据库并回档部分日记.
SQL>ALTERSYSTEMARCHIVELOGCURRENT;
Systemaltered.
SQL>ALTERSYSTEMARCHIVELOGCURRENT;
Systemaltered.
再查询一下DBA_LOGSTDBY_LOG视图.
SQL>ALTERSESSIONSETNLS_DATE_FORMAT=DD-MON-YYHH24:MI:SS;
Sessionaltered.
SQL>SELECTSEQUENCE#,FIRST_TIME,NEXT_TIME,DICT_BEGIN,DICT_END
2FROMDBA_LOGSTDBY_LOGORDERBYSEQUENCE#;
SEQUENCE#FIRST_TIMENEXT_TIMEDICDIC
------------------------------------------------------
2223-11月-0414:00:1723-11月-0414:26:58NONO
2323-11月-0414:26:5823-11月-0414:33:33NONO
2rowsselected.
(能够看到多出来一个新的回档日记)
反省日记中的数据是不是Apply到逻辑备用数据库中
在逻辑备用数据库中查询DBA_LOGSTDBY_STATS视图来反省日记中的数据是不是正被准确地Appled.
SQL>COLUMNNAMEFORMATA30
SQL>COLUMNVALUEFORMATA30
SQL>SELECTNAME,VALUEFROMV$LOGSTDBY_STATSWHERENAME=coordinatorstate;
NAMEVALUE
------------------------------------------------------------
coordinatorstateINITIALIZING
在下面的输入中,coordinator历程正在初始化,这标明LogApplyService正筹办ApplySQL.可是日记中的数据还没有入手下手被Applied到逻辑备用数据库中.
查V$LOGSTDBY看以后的SQLApply举动形态.毗连到逻辑备用数据库中,查询V$LOGSTDBY视图.
SQL>COLUMNSTATUSFORMATA50
SQL>COLUMNTYPEFORMATA12
SQL>SELECTTYPE,HIGH_SCN,STATUSFROMV$LOGSTDBY;
TYPEHIGH_SCNSTATUS
------------------------------------------------------------------------
COORDINATORORA-16115:loadingLogMinerdictionarydata
READERORA-16127:stalledwaitingforadditionaltransact
ionstobeapplied
BUILDERORA-16117:processing
PREPARERORA-16116:noworkavailable
SQL>SELECTTYPE,HIGH_SCN,STATUSFROMV$LOGSTDBY;
TYPEHIGH_SCNSTATUS
------------------------------------------------------------------------
COORDINATORORA-16126:loadingtableorsequenceobjectnumber
READERORA-16116:noworkavailable
BUILDERORA-16116:noworkavailable
PREPARERORA-16116:noworkavailable
假如RedoData入手下手Apply到备用数据库中时,在V$LOGSTDBY视图中coordinator历程的形态会显现applying
反省日记中的数据是不是Apply完成能够在逻辑备用数据库中从DBA_LOGSTDBY_PROCESS视图中取得.
SQL>SELECTAPPLIED_SCN,NEWEST_SCNFROMDBA_LOGSTDBY_PROGRESS;
APPLIED_SCNNEWEST_SCN
---------------------
180702180702
个中,假如APPLIED_SCN和NEWEST_SCN两列的值是一样的,暗示coordinatorprocess历程已Apply完成.日记中的数据也Apply完成.
在LOG_ARCHIVE_DEST_n初始参数后指定DELAY=n(minutes)的意义是由primarydatabase传到standbydatabase的redologdata将在nminutes以后才入手下手Apply到standbydatabase.Default是NODELAY,假如指定了DELAY而没有指定值的话则缺省为30分钟.
提供多语言支持,常见的编码如中文的GB2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。 在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。 如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。 这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片? 理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识 对于微软系列的东西除了一遍遍尝试还真没有太好的办法 我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力 以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了 备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
页:
[1]