分类
外汇基本知识

客户选择 OCI 的原因

sqlplus "sys/password as sysdba"
ERROR:
ORA-01031: insufficient privileges 或者 sqlplus /nolog conn / as sysdba
ERROR:
ORA-01031: insufficient privileges

总结—elasticsearch启动失败的几种情况及解决

原来在执行yum -y install elasticsearch的时候,就已经自动创建了一个单独的管理用户elasticsearch,但是我又自己创建了一个elk用户,并且把data和log目录授权给elk,所以就会出现“Starting elasticsearch: 2018-06-12 15:13:客户选择 OCI 的原因 50,287 main ERROR Unable to create file /var/log/elasticsearch/elk.log java.io.IOException: 权限不够”的报错。
因此只需要将/opt/elk/data和/var/log/elasticsearch目录权限改为elasticsearch:elasticsearch就好了:

4、日志和数据目录权限异常,启动失败

在一次启动elasticsearch的时候启动失败,日志有提示“main ERROR Unable to create file /home/elk/logs/my-application_index_indexing_slowlog.log java.io.IOException: 权限不够”和“Caused by: java.nio.file.AccessDeniedException: /home/elk/data/nodes”客户选择 OCI 的原因 客户选择 OCI 的原因 。关键日志信息如下(下面两段日志是节选的,日志信息太多了,有很多重复的):

5、内存不够,启动失败

原因:
查看了 /usr/local/elasticsearch-5.6.0/bin/hs_err_pid1027.log日志文件,出现这样的报错,有两种可能:
1、系统进程数达到上限了,部署服务的时候/etc/security/limits.conf文件修改没有生效。
2、确实物理内存不够

解决:
通过命令查看系统限制:ulimit -a查看open files不够大,如果不够大,就尝试通过设大该值:

6、 elasticsearch.客户选择 OCI 的原因 yml的bind的IP写错,服务起不来

在一次安装 elasticsearc的时候,服务起不来,提示“Failed to 客户选择 OCI 的原因 bind to [9300-9400]”。启动服务报下面的错误:

ORA-01031: insufficient privileges 解决办法

但是我们如果用sqlplus "sys/[email protected] as sysbda"这样的方式去不能登录.

这里我们的错误一般分为两类
第一类: 提示ORA-01031: insufficient privileges(权限不足)

sqlplus "sys/password as sysdba"
ERROR:
ORA-01031: 客户选择 OCI 的原因 insufficient privileges

或者

客户选择 OCI 的原因

sqlplus /nolog

conn / as sysdba
ERROR:
ORA-01031: insufficient privileges

如果是这样的错误,你明明是用这个sys登录的,而且确实是sysdba的权限,为什么登录却提示你的权限不够叻。
这里的问题出现在密码文件里,由于你的密码文件缺损或者不存在,而Oracle实例对sysdba的权限是根据这个
密码文件来判断的,如果你的用户被grant to sysdba了,那么这个用户的密码和用户名也在这个密码文件了。
这样也就发现你不是sysdba的角色,当然as sysdba就会提示权限不足了哟。
为什么这样做了,如果我们的数据库没有open,那么对于的一些动态视图是不能打开的,所以oracle必须把这些
用户的口令和username放在一个独立的文件里,这样在数据库还不是open的状况写,有个地方判断了。

如何解决了。我们首先来判断一下
执行sql
SQL> select * 客户选择 OCI 的原因 from v$pwfile_users;
USERNAME SYSDB SYSOP
------------------------------ ----- -----
SYS TRUE TRUE

这里解决的方法就是重建orapwd文件
使用密码文件orapwd 命令

再次查看 v$pwfile_users 这时候有一条记录了

还有一种情况,提示的是ORA-01017:用户名密码出错

这样的错误,可是你的密码和用户名明明输入的都是正确的。这又是为什么叻
检查一下系统参数remote_login_passwordfile的值,
这里需要启动密码文件的话,需要前提就是这个值, 这里的值可以NONE,EXCLUSIVE和SHARE
EXCLUSIVE和SHARE都可以,EXCLUSIVE是独占的文件,SHARE是多实例的体系中的共享模式
这个问题基本上就是这个值导致的
SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;

数据库表设计原则(多表字段尽量唯一)

在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式;第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。总结一下,就是: 第一范式(确保每列保持原子性)第二范式(确保表中的每列都和主键相关)第三范式(确保每列都和主键列直接相关,而不是间接相关)

1. 不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分 ,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也 尽量不要创建外键关联 ,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。

3.根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式: 一个表中的所有非关键字属性都依赖于整个关键字 。关键字可以是一个属性,也可以是多个属性的集合,不论那种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保证关键字不会参与业务且不会出现更新异常,这时,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。

6.在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。 如果表结构中存在多值依赖,则证明领域模型中的对象具有至少两个以上的职责 ,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。

7.在经过分析后确认所有的表都满足二、三、四范式的情况下, 表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构 。并且,我认为数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。

8. 应针对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率 。虽然建立索引会消耗部分系统资源,但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响,以及无索引时的排序操作所带来的性能影响,这种方式仍然是值得提倡的。

9. 尽量少采用存储过程 ,目前已经有很多技术可以替代存储过程的功能如"对象/关系映射"等,将数据一致性的保证放在数据库中,无论对于版本控制、开发和部署、以及数据库的迁移都会带来很大的影响。但不可否认,存储过程具有性能上的优势,所以,当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性时,可经过平衡考虑选用存储过程。

10. 当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改、删除、更改异常所付出的代价 ,并且数据冗余也不是主要的问题时,表设计可以不符合四个范式。四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结构难于使用,所以在设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。

11.设计出的表要具有较好的使用性,主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。 我感觉遵守的范式越多,就越使SQL复杂 ,具体情况具体分析。设计出的表要尽可能减少数据冗余,确保数据的准确性, 有效的控制冗余有助于提高数据库的性能

1.四种事务隔离级别:read uncommited, read commited(大多数db默认的),repeatable read(mysql默认), seriazable。

2.mysql是默认的auto commited, 也就是说每次查询默认都是自动提交的(show variables like 'autocommited')。mysql可以通过set transaction isolatioin level命令来设置隔离级别,例如:set session 客户选择 OCI 的原因 transaction isolation level read commited。

3.mysql中像innodb采用mvcc(多版本并发控制)来处理并发。mvcc只工作在read commited,repeatable read这两种事务隔离级别上。read uncommited隔离级别不兼容mvcc是因为在该级别得下的查询,不读取符合当前事务版本的数据行,而是最新版本的数据行。seriazable隔离级别不兼容MVCC,因为该级别下的读操作会对每个返回行进行加锁。

1.尽可能的要把field定义为Not NULL, mysql比较难优化使用了可空列的查询,它会使索引,索引统计更加复杂。可空列需要更多的存储空间,还需要mysql内部进行特殊处理,当可空列被索引时,每条记录都需要一个格外的字节。 即使要在表中存储"没有值"的字段,考虑使用0,特殊字段或者空字符串来代替。

5.mysql会把text与blob类型的列当成有实体的对象来进行保存。他们有各自的数据类型家族(tinytext,smalltext,text,mediumtext,longtext; blob类似); mysql对blob与text列排序方式和其他类型有所不同,它不会按照字符串的完整长度来排序。而只是按照max_sort_length规定的若干个字节来进行排序。

数据库表设计原则(多表字段尽量唯一)

在实际开发中最为常见的设计范式有三个:第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式;第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。总结一下,就是: 第一范式(确保每列保持原子性)第二范式(确保表中的每列都和主键相关)第三范式(确保每列都和主键列直接相关,而不是间接相关)

1. 不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分 ,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也 尽量不要创建外键关联 ,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表结构的重构提供可能性。

3.根据建立的领域模型进行数据库表的映射,此时应参考数据库设计第二范式: 一个表中的所有非关键字属性都依赖于整个关键字 。关键字可以是一个属性,也可以是多个属性的集合,不论那种方式,都应确保关键字能够保证唯一性。在确定关键字时,应保证关键字不会参与业务且不会出现更新异常,这时,最优解决方案为采用一个自增数值型属性或一个随机字符串作为表的关键字。

6.在映射后得出的数据库表结构中,应再根据第四范式进行进一步修改,确保不存在多值依赖。这时,应根据反向工程的思路反馈给领域模型。 如果表结构中存在多值依赖,则证明领域模型中的对象具有至少两个以上的职责 ,应根据第一条进行设计修正。第四范式:一个表如果满足BCNF,不应存在多值依赖。

7.在经过分析后确认所有的表都满足二、三、四范式的情况下, 表和表之间的关联尽量采用弱关联以便于对表字段和表结构的调整和重构 。并且,我认为数据库中的表是用来持久化一个对象实例在特定时间及特定条件下的状态的,只是一个存储介质,所以,表和表之间也不应用强关联来表述业务(数据间的一致性),这一职责应由系统的逻辑层来保证,这种方式也确保了系统对于不正确数据(脏数据)的兼容性。当然,从整个系统的角度来说我们还是要尽最大努力确保系统不会产生脏数据,单从另一个角度来说,脏数据的产生在一定程度上也是不可避免的,我们也要保证系统对这种情况的容错性。这是一个折中的方案。

8. 应针对所有表的主键和外键建立索引,有针对性的(针对一些大数据量和常用检索方式)建立组合属性的索引,提高检索效率 。虽然建立索引会消耗部分系统资源,但比较起在检索时搜索整张表中的数据尤其时表中的数据量较大时所带来的性能影响,以及无索引时的排序操作所带来的性能影响,这种方式仍然是值得提倡的。

9. 尽量少采用存储过程 ,目前已经有很多技术可以替代存储过程的功能如"对象/关系映射"等,将数据一致性的保证放在数据库中,无论对于版本控制、开发和部署、以及数据库的迁移都会带来很大的影响。但不可否认,存储过程具有性能上的优势,所以,当系统可使用的硬件不会得到提升而性能又是非常重要的质量属性时,可经过平衡考虑选用存储过程。

10. 当处理表间的关联约束所付出的代价(常常是使用性上的代价)超过了保证不会出现修改、删除、更改异常所付出的代价 ,并且数据冗余也不是主要的问题时,表设计可以不符合四个范式。四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结构难于使用,所以在设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。

11.设计出的表要具有较好的使用性,主要体现在查询时是否需要关联多张表且还需使用复杂的SQL技巧。 我感觉遵守的范式越多,就越使SQL复杂 ,具体情况具体分析。设计出的表要尽可能减少数据冗余,确保数据的准确性, 有效的控制冗余有助于提高数据库的性能

1.四种事务隔离级别:read uncommited, read commited(大多数db默认的),repeatable read(mysql默认), seriazable。

2.mysql是默认的auto commited, 也就是说每次查询默认都是自动提交的(show variables like 'autocommited')。mysql可以通过set transaction isolatioin level命令来设置隔离级别,例如:set session transaction isolation level read commited。

3.mysql中像innodb采用mvcc(多版本并发控制)来处理并发。mvcc只工作在read commited,repeatable read这两种事务隔离级别上。read uncommited隔离级别不兼容mvcc是因为在该级别得下的查询,不读取符合当前事务版本的数据行,而是最新版本的数据行。seriazable隔离级别不兼容MVCC,因为该级别下的读操作会对每个返回行进行加锁。

1.尽可能的要把field定义为Not NULL, mysql比较难优化使用了可空列的查询,它会使索引,索引统计更加复杂。可空列需要更多的存储空间,还需要mysql内部进行特殊处理,当可空列被索引时,每条记录都需要一个格外的字节。 即使要在表中存储"没有值"的字段,考虑使用0,特殊字段或者空字符串来代替。

5.mysql会把text与blob类型的列当成有实体的对象来进行保存。他们有各自的数据类型家族(tinytext,smalltext,text,mediumtext,longtext; blob类似); mysql对blob与text列排序方式和其他类型有所不同,它不会按照字符串的完整长度来排序。而只是按照max_sort_length规定的若干个字节来进行排序。