《ITPUB名人堂》第5期采访技术新星:qingyun 圆满结束

2021-09-16 00:00:00 数据 函数 数据库 备份 迁移

 大家好,本期我们邀请到“技术新星-qingyun”来与大家分享自己的技术心得的和数据库实战的相关经验。

hwayw:
您先自我介绍一下?分享以下您的职业经历?您目前的从事的工作??
qingyun:
      工作10年出头,基本围绕自动化仓库运作管理做相应的信息化开发工作;目前做项目数据库PL/SQL开发和自动设备控制框架设计;

hwayw:
在对数据维护时,有什么值得注意的吗?优化是否对稳定性有影响?
qingyun:
      数据库维护:1、重视基本保养,定期监控数据库的运行健康状态,常见的:
      a.硬盘空间够否;
      b.归档日志定时清理否;
      c.会话过多或占用过多否等等
      我的工作中,就经常遇到会话问题,因为程序开发人员对数据库原理不够深入,有时会有漏洞,导致某些会话消耗了太多的内存,结果导致不能创建新会话;
      2、再专业些,需要对数据的原理有更对的认识,熟悉数据字典和常用的检测工具,常见的:
      a.检查AWR报表;
      b.监控性能指标的关键动态数据字典等;
      发现异常,比如某些特别消耗资源的SQL,发现频繁硬编码的语句,要考虑SQL优化;在某些情况下可能需要调整某些参数,不过随着数据库的改进,这些会更加的自动化;当然也有很多第三方工具可以借鉴;
      优化对于稳定性非常重要。这也是我这么多年项目实施的一个深刻体会;从两个方面来理解优化对于稳定性的作用:

1、数据库设计层面,常用的手段是:
           a.优化SQL写法;
           b.恰当使用索引;
           c.数据表的合理设计以及转移历史记录机制等;
      这些地方如果控制不好,无疑会加大数据库的负担,容易引起死锁等问题;严重的时候数据库会宕机;
      2、业务层面,实际项目中,如果不是那种大型项目,数据一般也不至于海量,所以数据库自身出现大的故障并不多;但是优化不好,对业务影响可能是致命性的;体现在:
          a.用户体验差;一个按钮点下去半天没反应,感觉肯定不会好;
          b.容易发生并发异常,很多开发人员,对数据库执行原理并不是很清楚,导致多人同时执行相关业务的时候,可能出现脏数据,这种问题在性能好的时候,出现概率是非常的低;但是如果性能低,这种情况的概率就非常高;
          c.有些业务必须要快速响应,否者系统就是一个失败的系统;而这种响应机制是建立在数据运算的基础上;比如自动化物流分拣,如果必须在半秒提供运算结果,那么优化出现问题,会导致整个系统崩溃;
hwayw:
从您的经验来看,如果是学习数据库,是先选择MS SQL SERVER还是先选择学习ORACLE呢,如果要学习ORACLE,应该注意哪些方面,从哪些方面入手,怎样才能达到应用熟练的水平?
qingyun:
      我个人觉得,如果是诚心学习数据库,好还是先学习ORACLE; 人都有思维定势,次学习的东西印象更深刻; 我觉得先学习 ORACLE的好处是:
      1、 Oracle  有汗牛充栋的资料庖丁解牛的讲解ORACLE的体系结构;SGA有哪些组成,联机重做日志,归档日志的机制;大量的数据字典和动态视图的开放; 这些在MS SQL SERVER 体现的相对比较弱;
      2、ORACLE 更偏向于标准,毕竟有很多数据库都在学它,DB2也支持pl/sql, 开源数据库EnterPriseDB ,国产数据库达梦也在“抄袭”它;而MS SQL SERVER ,只有当初的SysBase 和它是类似的;
      如果要学好ORACLE; 我觉得更多的是实践;
      1.首先,在各种环境下学习安装,尝试手工安装取代DBCA,反复实验;熟练掌握SQLPLUS等基础工具;了解ORACLE的基本结构,知道用户,表空间的关系等;
      2.懂点开发知识,数据库是用来做应用系统的;所以有了熟练的PL/SQL技能,就能做很多应用处理;同时也能做更好的性能优化;
      3.深入学习ORACLE体系架构,反复实验各种备份;数据泵,rman备份等;
      4.学习oracle技术和外延产品,比如DG,RAC,GridContrl,中间件等;
      5.多了解Oracle的新资讯;
hwayw:
备份数据库有哪些基本的方法:针对mysql、sqlserver和oracle。数据库资料日常备份、整理、维护、加密方面您能支几招吗?
qingyun:
     Mysql 的常用备份方法:
    1、 Mysqldump
    2、直接拷贝(cp、tar,gzip,cpio)
    3、 Mysqlhotcopy
    4、同步复制
    SqlServer的常用备份方法:
    1、全备份
    2、 差异备份
    3、日志备份
    4、 文件组备份
    Oracle 的常用备份方法:
    1、EXP逻辑备份;
    2、Expdp数据泵备份;
    3、冷备份(需要关闭实例)
    4、热备份(常见的是RMAN)
    对于oracle,为安全起见,尽量不用默认的端口1521;在业务实现时,要有历史表的概念,比如入库操作流水,定期将完成的流水转移到表结构类似的相应的历史表里;历史表甚至可以放在一个新的用户和表空间里,这样可以对业务数据 和历史数据分开做备份策略;

hwayw:
SQL Server数据库迁移到Oracle,有什么好的迁移办法?存储过程、函数、触发器等是否必须重写?是否有工具可以转换?考虑SQL  Server的 语法如:判断null值,用isnull函数,我是否可以在oracle中写一个isnull函数,来实现类似sqlserver中isnull的功能? 字符串函数、日期函数也这样在oracle中重写一个,是否可以实现不改动sqlserver中的sql语句??如果这样可行,需要的工作量有多大?
qingyun:
      我个人不太喜欢迁移,因为SQL server 和 ORACLE 体系结构,语法差异太大;除非仅仅使用了简单的表和视图;其他存储过程,函数,包,触发器,序列,job等都是天壤之别;但是如果一个数据库,就是简简单单使用了表和视图,那又何必用oracle这么“”的产品; 所以迁移之后,存储过程,函数,触发器避免不了做调整;有些数据库,都官方提供了迁移方法,比如DB2,EnterPriseDB ; 他们号称能够90%多的移植过来;但也要做很多的修改;SQL server 的迁移看来更多的是表结构和数据;可以利用SQL server 的DTS; ORACLE 的GateWays,Oracle Migration Workbench等手段;
      在oracle中写一个isnull 函数,我感觉很难实现;彻底的方法是换成NVL;但很多系统已经在前台写死了isnull,但是在ORACLE写一个函数isnull ,实现nvl的功能;都是需要类型的;字符,日期,数字等,这就需要重载;但是重载只有在oracle的包里才能实现;如果oracle 像vb或者像一些脚本语言那样,支持弱类型object ;那么还考虑;再说,即便能写出了一个isnull,也很别扭,我觉得干脆还是修改成nvl 算了;而且一个系统里,其他的常用函数,substr, replace,lpad 等函数都要涉及到自定义成sqlserver对应函数的问题;
      说白了,本来就不是一个体系架构的东西,无缝迁移还是不太现实的,只是能够有越来越多的手段和工具减少迁移的工作量;因为在一个大的应用系统里,前台往往可以更换;今天用c#,明天换成JAVA ;但是数据库涉及到核心的数据和相应的业务,建议不要轻易更换;oracle,sqlserver内部机制思路都不一样的;比如锁机制就有很大的不同,随着对不同数据库内部构造和原理的深入,你会发现数据库差异大的很难面面俱到的迁移;


hwayw:
2010年,您被评为ITPUB社区的“技术新星”,您在社区也获得了很多人的支持,当时您是什么样的一种心情状态?对于这个荣誉称号您有什么想与大家分享?对未来想成为“技术新星”的会员有什么的捷径或建议?
qingyun:
       当时心里很高兴,在ITPUB oracle开发 板块常常流连忘返;从newkid,OO等热心的大侠身上学到了很多宝贵的经验,投入到项目后,提高了效率和系统的健壮性;
       也曾经写了一个oracle的工具:http://www.itpub.net/viewthread.php?tid=681396  希望对广大的oracle开发人员有用;
       我希望大家能够保持学习的热情,不断的提高自己专业的深度,就像拳不离手,曲不离口,松懈就会退步和遗忘;
        对于未来的“技术新星”,我想更多的是反复练习基本功,多接触专业上有所建树的朋友,会提高得很快;当然关键的还是兴趣;


嘉宾介绍:
   

   社区ID:qingyun
   戴志存,PUB上ID为qingyun。工作10年出头,基本围绕自动化仓库运作管理做相应的信息化开发工作;目前做项目数据库PL/SQL开发和自动设备控制框架设计;


更多往期回顾:http://www.itpub.net/thread-1480316-1-1.html


相关文章