【C/C++】项目_4_Oracle的虚表/日期/序列,函数/索
@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中复制后删除外键约束,表正在忙,这时需要回滚操作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述