C/C++9天气APP:Oracle的虚表/日期/序列,索引/视图/链路/同义词,数据库高可用性
Posted 码农编程录
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++9天气APP:Oracle的虚表/日期/序列,索引/视图/链路/同义词,数据库高可用性相关的知识,希望对你有一定的参考价值。
文章目录
1.虚表/日期/序列:SEQUENCE
oracle的虚表dual用来构成select的语法规则
,不要当表来看,oracle保证dual里永远只有一条记录,可用它来做如下很多事。
如下若是c语言写1/86400就是=0(因为整数除),只有浮点数才能这样运算。oracle中是非常精确的,不用担心精度问题。
如下sysdate函数返回值可以当成值来用。
SQL>CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 1 MAXVALUE 9999999999 NOCYCLE NOCACHE;
如上新建一个序列第一次取当前值是取不到的(提示该序列在此会话中未定义),必须.nextval再.currval取当前值。下面起步为100,步长为5。
下面给表增加两个字段crttime和keyid(导出数据时用到keyid),下面在crttable.sql中
如下insert into里必须有主键obtid和ddatetime,将序列生成器下个值赋给keyid字段
下面为rowid伪列和rownum伪列:rowid
(是数据详细地址,通过rowid,oracle可最快定位某行具体的数据在磁盘中存放的物理位置
)的格式不用管。rownum
(查询返回的结果集中行的序号,可使用它来限制查询返回的行数)是变的是结果集的一个序号(C语言很少用rownum)。
如下第一行select时需要将rownum和rowid写出来查询才能看到,第二行用rowid作为查询或更新的条件最快(区别索引)
如上每条记录虽然存在数据库里(即表空间,表空间还是数据文件)最后还是存在磁盘上(在磁盘上就有位置),就是/oracle/base/oradata/snorcl11g里的.dbf文件。vi crttable.sql
vi psurfdata.cpp
下面是以shqx用户登陆。
2.索引/视图/链路/同义词:create index/view/link/synonym
虚日序,索视链同。如下decode函数如果sex为1显示男,为2显示女…(if 1 男,else if 2 女,else if 3 非男非女,else if null 不确定,else 错误)。
keyid从序列生成器取出来我们没把它当成主键,应该它是唯一的索引(索引也是数据,需要存储空间),因为keyid不可能重复。
索引创建时是否指定为唯一
索引呢?看列的性质如obtid+ddatetime是唯一的,keyid是唯一的
【只拿obtid出来或只拿ddatetime出来肯定不是唯一的,若创建唯一索引的话数据插入时插不进去。比如现在建一个表,表里有一个字段弄成唯一索引,再往里插入重复的值肯定报错】。
如果某列出现在查询条件中,而列的数据是无序的,查询时只能从第一行开始一行一行匹配。创建索引就是对某些特定列中数据排序或归类,生成独立索引表。在某列创建索引后,如果该列出现在查询条件中,oracle会自动的引用该索引,先从索引表中查询出符合条件记录的ROWID,由于ROWID是记录的物理地址,因此可根据ROWID快速定位到具体记录。
唯一索引效果相当于主键约束(即主键不允许重复)
,当表和索引在不同的表空间时效率更高,如下数据库自动将obtid和ddatetime主建字段创建唯一索引,下面在crttable.sql中。
每建一个索引就相当于把列的数据拿出来单独存放,如下创建索引的实质就是2列(rowid也算1列)或多列(与上面依次对应)拿出来组成一个像表一样的对象(像书的目录),用专门空间存放。所以索引有开销,虽提高查询效率,但一方面是需要更多的存储空间,另一方面是影响表的增、删、改的性能(对数据进行操作时,索引需要更新),所以不能表的什么字段都建上索引,需要设计,规范如下。
适合建立索引的列特点:where后经常用到的列,主键本身唯一性索引,保持数据唯一性。下面在plsql developer中tools菜单里Explainplan,选中F5分析。
ddatetime在数据库中是整数
如上如果业务系统对数据库进行全表扫描的话,我们监控查到告诉他做改进
如下第三条就是上面to_char函数用不了索引
视图就是访问数据的一个窗口,当成一个表来用,下面为先授权
如上可以exit退出,也可直接切换connect scott用户
视图不占用表空间,在emp将hiredate设置为系统时间,从v_emp查也有效果
drop view …
如下登录sqlplus是客户端,数据库服务端在tnsnames.ora中snorcl…198里配置ip和端口
如下注意snorcl11g_to_198中间有个to
如下设为私有的话,自己可以用自己
如上方法如果改了如下服务名,就不好用了
如下另一种方法创建不用snorcl11g_198服务名
下面连接远程数据库服务器不要产生远程事务:1.
性能低,2.
远程事务容易拖垮数据库,对远程数据库的访问可以select,但不要update,insert,delete(都会产生事务)
下面是同义词
:数据库对象(表,视图,序列,存储过程,包)的一个别名。
如下dblinkname指snorcl11g_198等等
实际不可能给shqx和密码给客户,给普通用户如scott给客户并授权
如下是更多sql,如下先查下有什么表:select * from tab;结果集不包含1234…这个列和EMPNO…这个行(就是外面框架)
如下是列的拼接即内容的拼接,前面是字符串后面是数字也可以拼接,行没有显示(sal+100),但结果集里最后有数字900,拼接符||不是C语言中的或,优先级高于+号。
对表使用别名,如下内表是dept,外表是emp
distinct关键字,取结果集中的唯一值,去重,如下有很多30,20,10重复
如下最后一个dname出问题
如下创建的aaa除了表和列,其他数据库对象都没有。下面1=2为了只保留表结构即第一行OBTID,DDATE…。
向aaa这个空表(前面1=2)insert,keyid不允许重复是唯一索引的约束,aaa没继承这些约束,所以keyid插入了3个1,但aaa继承了字段空还是非空这些属性。
如上给t_surfdata表增加一个obtname空字段,如下将t_obtcode中obtname字段值赋给t_surfdata中obtname空字段
3.表空间/数据文件/启动关闭/权限/备份恢复:exp/imp
vi .bash_profile,服务器安装好数据库后可装多个实例,就像类创建/定义/实例化一个对象/变量。
安装数据库的服务器有一半内存分配给oracle数据库的,不要太去关注oracle数据库这个概念。关注表空间这概念,建表时可指定表空间。不想创建表空间,USER表空间够用就用。
如上三行不用dbstart命令脚本启动数据库,如下dba重新登录,创建用户并授权,授权后需要重新登陆才生效。
如下revoke撤销权限是立马生效
数据处理好后别的业务系统要使用这数据,给分配一用户:给这用户connect和resource权限,再授权grant select any table to…
如下是备份和恢复:括号要\\来转义,以下为表模式
导出。.dmp约定命名,表示是oracle的exp卸出来的。rows=n(no)表示只导出表定义,没导出数据。注意数据库字符集和版本。
以下为导入(必须是有dba权限的用户【如下shqx/pwdidc有dba权限】,导入的文件就是上面导出的.dmp文件),索引那些都会导进来但不能重复导入一样的表。
以下为用户模式
导出(表模式只导出表,没有序列等等),将shqx这用户全导出。把shqx用户删了,创建一用户再把导入,整个用户完整恢复如下。
4.清理空闲会话/归档日志:kill session,archive log list
如下SQL*Net其实就是tcp的服务程序,是oracle的网络软件
自动创建文件:vi listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)
vi listener.ora
别人用完我数据库不断开,我可以强行断开session
sqlplus / as sysdba;oracle日志有两种方式:归档,非归档(非归档模式在如下三个在线保留的日志:有的话就可以恢复,没有的话就恢复不了。所以经常改为归档模式)
NOARCHIVELOG为非归档模式,如上两种方式查看oracle是否为归档模式,如下由非归档转为归档。
如下归档日志文件名也可以叫…dbf
如上切换成归档模式成功,如下如果在线日志满了会自动写入归档日志里
,对数据库很多操作,内容就写进去了。数据库不忙,一下写不进归档日志,所以手动切换日志,如下在线日志切换到了第二组,并写入了归档日志里。
删除归档日志,以前清理ftp采集的文件用时间,但是归档日志文件大小和数量由数据库繁忙程度决定,一分钟产生不定量的文件。目录满了,数据库归档失败,数据库停了。所以清理日志文件,保留最近多少个文件
(按照归档日志文件名用Cdir类排序,从后面往前找):deletearchive.cpp见文章:https://blog.csdn.net/weixin_43435675/article/details/103476761
5.系统高可用性:rac
一台服务器比一般主机要大,同样cpu在里面不外露,但是服务器的磁盘
以插拔形式暴露在外面有多个。如下是磁盘阵列技术
,假设一个服务器有12个1T硬盘,如下raid0一但12个中一个坏了,没有一个1T补充上来,整个出问题。raid1两个盘之间互为备份,坏了就动态调整。
如下假如oracle数据库在一个服务器上运行,出问题了怎么办?(一般硬件故障)。Oracle三种高可用集群方案:1.RAC,2.Data Guard,3.OGG
。如下是RAC技术,可以多个,但一般为两个。有的数据在内存,有的在缓存,2个要进行数据协调很麻烦,所以不是高性能,比单个服务器要慢。
如下为结合三种集群技术应用。
RAC有多个节点(上面为两个),应用程序只要做好客户端配置怎么连RAC数据库就行。
如下为应用系统的高可用性,不是数据库系统。把一个web系统相同
全部部在多个服务器上,ip地址只有一个,那怎么访问呢?访问一网站时首先访问到nginx,nginx将访问请求均匀分给服务器。
应用程序系统手动切,不像oracle的RAC和dataguard那样自动切。因为应用程序热切换难,普通系统
可冷备份,2个服务器后台的应用程序以及环境都准备好,一接到切换通知立马登录服务器,冷切换,10分钟
左右。银行系统
必须热备份热切换:跑两套
应用系统,数据库系统,加负载均衡。
以上是关于C/C++9天气APP:Oracle的虚表/日期/序列,索引/视图/链路/同义词,数据库高可用性的主要内容,如果未能解决你的问题,请参考以下文章
C/C++10天气APP:MySQL,PostgreSQL,环境变量,动静态库,Linux/Oracle字符集