Oracle SCN

1. What is SCN?
  • A system change number (SCN) is a logical, internal timestamp used by Oracle Database which is necessary to satisfy the ACID properties of a transaction. SCNs occur in a monotonically increasing sequence. Oracle Database can use an SCN like a clock because an observed SCN indicates a logical point in time, and repeated observations return equal or greater values. If one event has a lower SCN than another event, then it occurred at an earlier time in the database. Several events may share the same SCN, which means that they occurred at the same time in the database.
  • Every transaction has an SCN. For example, if a transaction updates a row, then the database records the SCN at which this update occurred. Other modifications in this transaction have the same SCN. When a transaction commits, the database records an SCN for this commit.
2. Four SCN
  • Three in Control file:
    • System checkpoint SCN

                          SQL> select checkpoint_change# from v$database;
                                     CHECKPOINT_CHANGE#
                                     --------------------
                                     292767

  • Datafile checkpoint SCN

                           SQL> select name,checkpoint_change# from v$datafile where name like '%users01%';
                                       NAME                                                        CHECKPOINT_CHANGE#
                                       ----------------------------------------------      --------------------
                                       /u02/oradata/OMFD1/users01.dbf       292767

  • Stop SCN 

                           SQL> select name,last_change# from v$datafile where name like '%users01%';
                                       NAME                                                      LAST_CHANGE#
                                       ---------------------------------------------     ------------
                                       /u02/oradata/OMFD1/users01.dbf                                                               Normal datafile in read-write mode, last_change# should be NULL

  • SCN in datafile header
  • Start SCN
                           SQL> select name,checkpoint_change# from v$datafile_header where name like '%users01%';
                                       NAME                                                     CHECKPOINT_CHANGE#
                                       ---------------------------------------------    ----------
                                       /u02/oradata/OMFD1/users01.dbf    292767
3.  Oracle transaction change data
  • Transaction start;
  • Check data block in buffer cache, if no, load it to buffer cache;
  • Change data block in buffer cache, mark it as "dirty data", and write the change vector to log buffer;
  • Commit the trasaction, LGWR write change vector from log buffer to redo log file on disk;
  • When prompt a checkpoint, CKPT process update all datafile header, DBWn process write dirty data from buffer cache to datafile.
4. SCN mechanism to deal with the corruption during a transaction

     In the control file, System Checkpoint SCN is for the whole database, only one exist, but each datafile has one  Datafile Checkpoint SCN and Stop SCN in the control file. When database under running, Stop SCN is NULL or infinity.

     When transaction commit, system will record one SCN in redo log.  When switch logfile or prompt checkpoint, all redo records will write to datafile, and CKPT process will update Start SCN and Datafile Checkpoint of all datafiles, and System Checkpoint SCN in control file also update.

5.  Switch between timestamp and SCN

  SQL> select dbms_flashback.get_system_change_number, SCN_TO_TIMESTAMP(dbms_flashback.get_system_change_number) from dual;

            GET_SYSTEM_CHANGE_NUMBER                    SCN_TO_TIMESTAMP(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER)

            ------------------------                    ---------------------------------------------------------

            2877076756                                                     17-AUG-07 02.15.26.000000000 PM

     SQL> select timestamp_to_scn(SYSTIMESTAMP) as scn from dual;

                 SCN

       --------

       2877078439

6. SCN in recovery
  • Shutdown immediate/normal

             Prompt checkpoint, write log buffer to log file, and update all SCN in control file and datafile.

  • Disorder shutdown 

       When database startup, oracle check the equality of Datafile Checkpoint SCN in control file and Start SCN in datafile, also check the equality of Datafile Checkpoint SCN and Stop SCN. If they are not the same, try to find SCN lost in redo log and rewrite it to datafile.

内容概要:本文详细介绍了如何利用Simulink进行自动代码生成,在STM32平台上实现带57次谐波抑制功能的霍尔场定向控制(FOC)。首先,文章讲解了所需的软件环境准备,包括MATLAB/Simulink及其硬件支持包的安装。接着,阐述了构建永磁同步电机(PMSM)霍尔FOC控制模型的具体步骤,涵盖电机模型、坐标变换模块(如Clark和Park变换)、PI调节器、SVPWM模块以及用于抑制特定谐波的陷波器的设计。随后,描述了硬件目标配置、代码生成过程中的注意事项,以及生成后的C代码结构。此外,还讨论了霍尔传感器的位置估算、谐波补偿器的实现细节、ADC配置技巧、PWM死区时间和换相逻辑的优化。最后,分享了一些实用的工程集成经验,并推荐了几篇有助于深入了解相关技术和优化控制效果的研究论文。 适合人群:从事电机控制系统开发的技术人员,尤其是那些希望掌握基于Simulink的自动代码生成技术,以提高开发效率和控制精度的专业人士。 使用场景及目标:适用于需要精确控制永磁同步电机的应用场合,特别是在面对高次谐波干扰导致的电流波形失真问题时。通过采用文中提供的解决方案,可以显著改善系统的稳定性和性能,降低噪声水平,提升用户体验。 其他说明:文中不仅提供了详细的理论解释和技术指导,还包括了许多实践经验教训,如霍尔传感器处理、谐波抑制策略的选择、代码生成配置等方面的实际案例。这对于初学者来说是非常宝贵的参考资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值