美文网首页
【C/C++】项目_4_Oracle的虚表/日期/序列,函数/索

【C/C++】项目_4_Oracle的虚表/日期/序列,函数/索

作者: linuxCoder | 来源:发表于2020-04-25 00:32 被阅读0次

    @TOC


    1.虚表/日期/序列:SEQUENCE,.dbf

    oracle的虚表dual用来构成select的语法规则,不要当表来看,oracle保证dual里永远只有一条记录,可用它来做很多事如下

    在这里插入图片描述
    desc查表结构,select查表记录
    在这里插入图片描述
    在这里插入图片描述
    下面是校准操作系统时间,root用户,普通用户是不允许改操作系统时间的,下面ip:10.148.72.15是一个全省用来做时间同步的服务器
    在这里插入图片描述
    在这里插入图片描述
    下面是sql取操作系统时间,如下在sqlplus里取得到不完整时间段,plsqldeveloper里可以取完整
    在这里插入图片描述
    如下若是c语言写1/86400就是=0,因为整数除,只有浮点数才能这样运算。oracle中是非常精确的,不用担心精度问题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    SQL>CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 1 MAXVALUE 9999999999 NOCYCLE NOCACHE;
    在这里插入图片描述
    下面起步为100,步长为5
    在这里插入图片描述
    下面给表增加两个字段crttime和keyid,下面在crttable.sql中
    在这里插入图片描述
    在这里插入图片描述
    如下insert into里必须有主键obtid和ddatetime,将序列生成器下个值赋给keyid字段
    在这里插入图片描述
    在这里插入图片描述
    下面为rowid和rownum伪列:rowid(是数据详细地址,通过rowid,oracle可最快定位某行具体的数据在磁盘中存放的物理位置)的格式不用管。rownum(查询返回的结果集中行的序号,可使用它来限制查询返回的行数)是变的是结果集的一个序号(C语言很少用rownum)
    在这里插入图片描述
    如下select时需要将rownum和rowid写出来查询才能看到
    在这里插入图片描述
    在这里插入图片描述
    vi crttable.sql
    在这里插入图片描述
    在这里插入图片描述
    vi psurfdata.cpp
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    解决上面问题在_public.cpp中写bool CFile::CloseAndRemove()函数关闭文件指针并删除文件,在下面是以shqx用户登陆
    在这里插入图片描述

    2.函数/索引/视图:to_null.sql,index/view,database link/synonym

    1.单行函数

    在这里插入图片描述
    2.聚合函数
    在这里插入图片描述
    3.字符串函数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    4.数字函数:数字函数接收数字参数,参数可来自表中的一列,也可以是数字表达式
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    5.日期函数:日期函数对日期进行运算,常用的日期函数有:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    6.转换函数:转换函数将值从一种数据类型转换为另一种数据类型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    7.其他单行函数
    在这里插入图片描述
    在这里插入图片描述
    8.聚合函数:聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值等
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    下面为自定义to_null数据库函数,兼容其他数据库,语法麻烦不建议使用,如下在to_null.sql中
    -- pg数据库
    create or replace function to_null(varchar) returns numeric as $$
    begin
    if (length($1)=0) then
      return null;
    else
      return $1;
    end if;
    end
    $$ LANGUAGE plpgsql;
    
    -- oracle数据库
    create or replace function to_null(in_value in varchar2) return varchar2
    is
    begin
      return in_value;
    end;
    /
    
    -- mysql数据库,但是没有效果
    delimiter $$
    DROP FUNCTION IF EXISTS to_null;
    
    create function to_null(in_value varchar(10)) returns decimal
    begin
    if (length(in_value)=0) then
      return null;
    else
      return in_value;
    end if;
    end;
    $$
    

    oracle索引(index)最大作用是优化数据库查询效率,好比书目录一样,通过目录直接定位页数。如果某列出现在查询条件中,而列的数据是无序的,查询时只能从第一行开始一行一行匹配。创建索引就是对某些特定列中数据排序或归类,生成独立索引表。在某列创建索引后,如果该列出现在查询条件中,oracle会自动的引用该索引,先从索引表中查询出符合条件记录的ROWID,由于ROWID是记录的物理地址,因此可根据ROWID快速定位到具体记录。唯一索引效果相当于主键约束,obtid和ddatetime结合才能创建唯一索引,keyid单独可以创建唯一索引,下面在crttable.sql中

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如下创建索引的实质就是2列(rowid也算1列)或多列(与上面依次对应)拿出来组成一个像表一样的对象(像书的目录),用专门空间存放。所以索引有开销,虽提高查询效率,但一方面是需要更多的存储空间,另一方面是影响表的增、删、改的性能(对数据进行操作时,索引需要更新),所以不能表的什么字段都建上索引,需要设计,规范如下
    在这里插入图片描述
    在这里插入图片描述
    下面在plsql developer中tools菜单里Explainplan,F5分析
    在这里插入图片描述
    在这里插入图片描述
    ddatetime在数据库中是整数,下面对这个列转为字符串没办法识别'2019-09-22.....'这个值来做比较,所以有索引利用不上,所以sql要写成下面两行中的上一行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    视图就是访问数据的一个窗口,当成一个表来用,下面为先授权
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    drop view ...
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    下面连接本地数据库:通过数据库链路访问远程数据库对象
    在这里插入图片描述
    在这里插入图片描述
    如下注意snorcl11g_to_198中间有个to
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如下设为私有的话,自己可以用自己
    在这里插入图片描述
    在这里插入图片描述
    下面连接远程数据库,不要产生远程事务:1.性能低,2.远程事务容易拖垮数据库,对远程数据库的访问可以select,但不要update,insert,delete(都会产生事务)
    在这里插入图片描述
    下面是同义词:数据库对象(表,视图,序列,存储过程,包)的一个别名
    在这里插入图片描述
    如下dblinkname指snorcl11g_198等等
    在这里插入图片描述
    在这里插入图片描述
    实际不可能给shqx和密码给客户,给普通用户如scott给客户并授权
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.Oracle体系结构/表空间/数据文件:create tablespace,alter

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    vi .bash_profile
    在这里插入图片描述
    安装数据库的服务器有一半内存分配给oracle数据库的,不要太去关注oracle数据库这个概念。关注表空间这概念,建表时可指定表空间
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如下size是参数,创建一个名为abc的表空间并指定数据文件
    在这里插入图片描述
    如下每个表空间对应一个.dbf数据文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如下不想创建表空间,USER表空间够用就用。数据文件是表空间实际存储空间。类创建/定义/实例化一个对象/变量。
    在这里插入图片描述
    在这里插入图片描述
    上图小框放大如下图
    在这里插入图片描述

    4.Oracle启动/关闭/权限/备份/恢复:create user,exp/imp

    在这里插入图片描述 在这里插入图片描述
    在这里插入图片描述

    如上是可连上数据库,如下不能连上


    在这里插入图片描述
    如下是两个具有DBA特权的数据库用户,scott用户是测试用
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    如上三行不用dbstart命令脚本启动数据库,如下dba重新登录,创建用户并授权,授权后需要重新登陆才生效


    在这里插入图片描述
    在这里插入图片描述
    如下revoke撤销权限是立马生效
    在这里插入图片描述
    数据处理好后别的业务系统要使用这数据,给分配一用户,给这用户connect和resource权限,再授权grant select any table to......
    在这里插入图片描述
    如下是备份和恢复:括号要\来转义,以下为表模式导出。.dmp约定命名,表示是oracle的exp卸出来的。rows=n(no)表示只导出表定义,没导出数据。
    在这里插入图片描述
    在这里插入图片描述
    以下为导入(必须是有dba权限的用户,导入的文件就是上面导出的.dmp文件),索引那些都会导进来但不能重复导入一样的表
    在这里插入图片描述
    以下为用户模式导出,将shqx这用户全导出
    在这里插入图片描述
    在这里插入图片描述

    5.系统设计/清理空闲会话/归档日志:kill session,archive log list

    如下是短信平台整个系统,功能权限模块:数据量有限,一个系统没几个操作员,账户参数表,系统公告日志,操作员信息...。系统参数模块:数据量也很少。短信发送/接收日志模块:数据量很多。设计不是数据结构本身设计,结合数据库用户以及用户备份策略等进行设计

    在这里插入图片描述
    在这里插入图片描述
    如下SQL*Net其实就是tcp的服务程序
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
          )
          (ADDRESS_LIST =
            (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
          )
        )
      )
    

    其中,LISTENER是服务器中监听进程的名称;PROTOCOL表明所使用的网络协议,若是TCP/IP协议,则该值必须为“TCP”;HOST表示服务器的网络地址;PORT指TCP/IP协议在主机中所占用端口号,ORACLE缺省使用1521,是在安装ORACLE数据库时定义的,在安装时可以改变,安装完成后不能改变此值;SID_NAME指服务器上运行的ORACLE数据库名称,该值应与.bash_profile文件中的环境变量ORACLE_SID相同(一般情况下此文件为缺省值“PLSExtProc”);ORACLE_HOME是指ORACLE数据库的主目录,该值也应与. bash_profile文件中的环境变量ORACLE_HOME相同。

    在这里插入图片描述
    在这里插入图片描述
    vi listener.ora
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    别人用完我数据库不断开,我可以强行断开session
    在这里插入图片描述
    在这里插入图片描述
    sqlplus / as sysdba;oracle日志有两种方式:归档,非归档(非归档模式在如下三个在线保留的日志,有的话就可以恢复,没有的话就恢复不了。所以经常改为归档模式)
    在这里插入图片描述
    NOARCHIVELOG为非归档模式,如上两种方式查看oracle是否为归档模式,如下由非归档转为归档
    在这里插入图片描述
    在这里插入图片描述
    如上切换成归档模式成功,如下如果在线日志满了会自动写入归档日志里,对数据库很多操作,内容就写进去了。数据库不忙,一下写不进归档日志,所以手动切换日志,如下在线日志切换到了第二组,并写入了归档日志里
    在这里插入图片描述
    删除归档日志,以前清理ftp采集的文件用时间,但是归档日志文件大小和数量由数据库繁忙程度决定,一分钟产生不定量的文件。目录满了,数据库归档失败,数据库停了。所以清理日志文件,保留最近多少个文件:deletearchive.cpp见文章:https://blog.csdn.net/weixin_43435675/article/details/103476761

    6.系统高可用性:raid,rac

    在这里插入图片描述
    如上一台服务器比一般主机要大,同样cpu在里面不外露,但是服务器的磁盘以插拔形式暴露在外面有多个,主机的磁盘一般一个不会暴露在外面。如下是磁盘阵列技术,假设一个服务器有12个1T硬盘,如下raid0一但12个中一个坏了,没有一个1T补充上来,整个出问题。raid1两个盘之间互为备份,坏了就动态调整。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如下假如oracle数据库在一个服务器上运行,出问题了怎么办?(一般硬件故障)
    在这里插入图片描述
    如下是RAC技术,可以多个,但一般为两个。有的数据在内存,有的在缓存,2个要进行数据协调很麻烦,所以不是高性能,比单个服务器要慢。
    在这里插入图片描述
    如下为结合三种集群技术应用
    在这里插入图片描述
    RAC有多个节点(上面为两个),应用程序只要做好客户端配置怎么连RAC数据库就行
    在这里插入图片描述
    如下为应用系统的高可用性,不是数据库系统。把一个web系统相同全部部在多个服务器上,ip地址只有一个,那怎么访问呢?访问一网站时首先访问到nginx,nginx将访问请求均匀分给服务器
    在这里插入图片描述
    应用程序系统手动切,不像oracle的RAC和dataguard那样自动切。因为应用程序热切换难,普通系统可冷备份,2个服务器后台的应用程序以及环境都准备好,一接到切换通知立马登录服务器,冷切换,10分钟左右。银行系统必须热备份热切换:跑两套应用系统,数据库系统,加负载均衡
    在这里插入图片描述
    我们将系统部署在服务器上,有些服务器cpu,磁盘,内存浪费,有些不够用。云技术:虚拟化技术,分布式海量数据存储.......。云虚拟化平台软件将所有硬件(机房)管理起来,看成一个庞大的计算机有很多cpu,内存,磁盘空间。某个业务系统要资源cpu的几核进行分配,在分配给我们的服务器上将数据库和应用软件装起来运行,硬件坏了,云自动迁移。虚拟化平台不保证热切换和不停机切换。

    7.更强大SQL:||,删外键约束

    如下先查下有什么表:select * from tab;结果集不包含1234...这个列和EMPNO..这个行(就是外面框架)


    在这里插入图片描述

    如下是列的拼接即内容的拼接,前面是字符串后面是数字也可以拼接,行没有显示(sal+100),但结果集里最后有数字900,拼接符||不是C语言中的或,优先级高于+号


    在这里插入图片描述
    在这里插入图片描述
    如下显示中间单引号
    在这里插入图片描述
    在这里插入图片描述

    如下是对列使用别名


    在这里插入图片描述
    在这里插入图片描述
    对表使用别名,如下内表是dept,外表是emp
    在这里插入图片描述
    从结果集中查询,如下最里面表t_localobtmind(站点数据分钟表),气象数据的日界从20到20,10-03 20:01到10-04 20:00是一个气象日
    在这里插入图片描述
    distinct关键字,取结果集中的唯一值,去重,如下有很多30,20,10重复
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    如下是在create,insert和update中使用select查询


    在这里插入图片描述
    如下创建的aaa除了表和列,其他数据库对象都没有。下面1=2为了只保留表结构即第一行OBTID,DDATE......。向aaa这个空表(前面1=2)insert,keyid不允许重复是唯一索引的约束,aaa没继承这些约束,所以keyid插入了3个1,但aaa继承了字段空还是非空这些属性
    在这里插入图片描述
    在这里插入图片描述
    如上给t_surfdata表增加一个obtname空字段,如下将t_obtcode中obtname字段值赋给t_surfdata中obtname空字段
    在这里插入图片描述
    如下给t_surfdata表for updata,手动加5000(t_obtcode里不存在),58319(t_obtcode里存在),这两个表存在外键约束,到powerdesign中复制后删除外键约束,表正在忙,这时需要回滚操作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    相关文章

      网友评论

          本文标题:【C/C++】项目_4_Oracle的虚表/日期/序列,函数/索

          本文链接:https://www.haomeiwen.com/subject/wibcwhtx.html