oracle 19c学习(2)—导入10g数据库dmp文件

1、执行
CREATE USER c##posp IDENTIFIED BY posp;
ALTER USER c##posp QUOTA UNLIMITED ON USERS;
GRANT "CONNECT" TO c##posp;
GRANT "RESOURCE" TO c##posp;
GRANT CREATE ANY INDEX TO c##posp;
GRANT CREATE VIEW TO c##posp;
GRANT CREATE SESSION TO c##posp;
grant read,write on directory dmpdir to c##posp;

impdp c##posp/posp schemas=posp3 remap_schema=posp3:c##posp directory=dmpdir dumpfile=expdp_posp3.dmp logfile=impdp.log job_name=my_jod;

2、导入过程中提示错误
ORA-02374: conversion error loading table "C##POSP"."TBL_IPC_DFT_DSP"
ORA-12899: value too large for column IPC_DFT (actual: 266, maximum: 256)

ORA-02372: data for row: IPC_DFT : 0X'B9A4C9CCD2F8D0D0B3E5D5FDBDBBD2D7C7EBC7F32020202020'
因为字符集不一样
目标数据库字符集:al32utf8
源数据库字符集:zhs16gbk

没办法。。。

oracle 19c学习(1)—CentOS7 rpm包安装oracle19c

oracle19c相当于10g、11g后的12号版本的长期支持版,并且提供了rpm包安装,大大简化了安装过程

1、下载预安装包
wget http://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm

2、下载oracle 19c
https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#19c

3、安装预安装包
yum -y localinstall /root/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
会自动安装oracle的依赖包

4、安装oracle
yum -y localinstall /root/oracle-database-ee-19c-1.0-1.x86_64.rpm

继续阅读oracle 19c学习(1)—CentOS7 rpm包安装oracle19c

MySQL的Query语句优化

一、Query Optimizer

1、MySQL Query Optimizer是什么
是MySQL查询语句优化器,其主要的功能就是通过计算分析系统中收集的各种统计信息,为客户端请求的Query给出他认为最优的执行计划,也就是他认为最优的数据检索方式。

2、MySQL Query Optimizer基本工作原理
MySQL的Query Tree是通过优化实现DBXP的经典数据结构和Tree构造器而生成的一个指导完成一个Query语句的请求所需要处理的工作步骤,我们可以简单的认为就是一个的数据处理流程规划,只不过是以一个Tree的数据结构存放而已。通过Query Tree我们可以很清楚的知道一个Query的完成需要经过哪些步骤的处理,每一步的数据来源在哪里,处理方式是怎样的。

当客户端向MySQL请求一条Query ,到命令解析器模块完成请求分类区别出是SELECT并转发给Query Optimizer之后,Query Optimizer首先会对整条Query进行,优化处理掉一些常量表达式的预算,直接换算成常量值。并对Query中的查询条件进行简化和转换,如去掉一些无用或者显而易见的条件,结构调整等等。然后则是分析Query中的Hint信息(如果有),看显示Hint信息是否可以完全确定该Query的执行计划。如果没有Hint或者Hint信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query进行写相应的计算分析,然后再得出最后的执行计划。

继续阅读MySQL的Query语句优化

项目管理案例讨论10

某系统集成公司最近承接了一个项目,客户是该公司的老主顾。当时公司的总经理急着要出差,所以在软件模块界定和验收标准还不明确的情况下,就和客户签订了合同,并任命张工为这个项目的项目经理。

经过紧张的准备,项目终于启动了。第一个阶段结束后,在结果评估时,双方发生了分歧。客户认为模块中缺少一部分功能,而张工认为客户提出的功能在合同之外,如果要做,就要做项目变更,重新核算成本。由于合同中对此内容的界定不明确,双方各执一词,僵持不下,客户拒绝验收,项目的回款眼瞅着要泡汤。

后来项目组的程序员小王请求张工为他增派人手,说他的任务完不成了,可张工安排给他的工作已经做完了。经过了解,张工才知道,客户小刘几次请小王开发一些小的模块,小王也没向张工请示,就自作主张给做了。这次,他又答应在客户原有的模块上增加统计功能,结果做起来才发现实现不了,这才向张工求救。张工赶紧和客户沟通,要求作项目变更,可客户咬死说前几次都是免费的,这次也应该免费。

[问题1]张工所负责的项目在变更管理中存在哪些问题?
(1)在项目功能和标准不明确的时候就签订了合同,为后来的项目变更埋下了隐患
(2)没有建立项目变更管理制度
(3)涉及变更开发人员随便答应,没有上报给项目经理
(4)变更请求没有经过评估,没有评估产生的费用和技术要求,也没有签字确认,采用口头协议
(5)变更实施时没有考虑对系统其他功能的影响,也没有考虑能否实现
(6)变更后没有进行验证
(7)没有对变更后的内容进行存档,也没有通知给相关的项目干系人

继续阅读项目管理案例讨论10

MySQL数据库锁—(二)Innodb锁定模式

总的来说,Innodb的锁定机制和Oracle数据库有不少相似之处。Innodb的行级锁定同样分为两种类型,共享锁和排他锁,而在锁定机制的实现过程中为了让行级锁定和表级锁定共存,Innodb也同样使用了意向锁(表级锁定)的概念,也就有了意向共享锁和意向排他锁这两种。

1、共享锁—读锁
共享锁,简称(S锁),用于不更改或不更新数据的操作(只读操作),例如select
当事务对数据加上读锁后,其他事务只能对该数据加读锁,不能做任何修改操作,也就是不能添加写锁

2、排他锁—写锁
排他锁,简称(X锁),用于数据修改操作(写操作),例如insert、update、delete
当事务对数据加上写锁后,其他事务既不能对该数据添加读锁,也不能对该数据添加写锁,写锁与其他锁都是互斥的。只有当前数据写锁被释放后,其他事务才能对其添加写锁或者是读锁

3、意向锁
意向锁分为:意向共享锁(IS)、意向排他锁(IX)
意向锁的作用就是当一个事务在需要获取资源锁定的时候,如果遇到自己需要的资源已经被排他锁占用的时候,该事务可以需要锁定行的表上面添加一个合适的意向锁。
如果自己需要一个共享锁,那么就在表上面添加一个意向共享锁。
如果自己需要的是某行(或者某些行)上面添加一个排他锁的话,则先在表上面添加一个意向排他锁。

继续阅读MySQL数据库锁—(二)Innodb锁定模式

MySQL数据库锁

一、锁机制简介

总的来说,MySQL各存储引擎使用了三种类型(级别)的锁定机制:行级锁定,页级锁定和表级锁定。下面我们先分析一下MySQL这三种锁定的特点和各自的优劣所在。

1、行级锁定(row-level)
行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。

虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。

2、表级锁定(table-level)
和行级锁定相反,表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。

继续阅读MySQL数据库锁

MySQL性能的相关因素

一、商业需求对性能的影响

不合理需求造成资源投入产出比过低

需求是否合理很多时候可能并不是很容易界定,尤其是作为技术人员来说,可能更难以确定一个需求的合理性。即使指出,也不一定会被产品经历们认可。那作为技术人员的我们怎么来证明一个需求是否合理呢?

第一、每次产品经理们提出新的项目(或者功能需求)的时候,应该要求他们同时给出该项目的预期收益的量化指标,以备项目上先后统计评估投入产出比率;
第二、在每次项目进行过程中,应该详细记录所有的资源投入,包括人力投入,硬件设施的投入,以及其他任何项目相关的资源投入;
第三、项目(或者功能需求)上线之后应该及时通过手机相关数据统计出项目的实际收益值,以便计算投入产出比率的时候使用;
第四、技术部门应该尽可能推动设计出一个项目(或者功能需求)的投入产出比率的计算规则。在项目上线一段时间之后,通过项目实际收益的统计数据和项目的投入资源量,计算出整个项目的实际投入产出值,并公布给所有参与项目的部门知晓,同时存放以备后查。

继续阅读MySQL性能的相关因素

MySQL数据库备份

一、数据库逻辑备份

1、什么样的备份是数据库逻辑备份
数据库逻辑备份就是备份软件按照我们最初所设计的逻辑关系,以数据库的逻辑结构对象为单位,将数据库中的数据按照预定义的逻辑关联格式一条一条生成相关的文本文件,以达到备份的目的。

2、常用的逻辑备份
在MySQL中我们常用的逻辑备份主要就是两种,一种是将数据生成可以完全重现当前数据库中数据的INSERT语句,另外一种就是将数据通过逻辑备份软件,将我们数据库表数据以特定分隔符进行分隔后记录在文本文件中。

3、生成INSERT语句备份
在MySQL数据库中,我们一般都是通过MySQL数据库软件自带工具程序中的mysqldump来实现生成INSERT语句的逻辑备份文件。

4、备份时数据的一致性和完整性要求
我们知道,想数据库中的数据一致,那么只有两种情况下可以做到。
第一、同一时刻取出所有数据;
第二、数据库中的数据处于静止状态。

继续阅读MySQL数据库备份

MySQL访问控制实现原理

MySQL访问控制实际上由两个功能模块共同组成,一个是负责“看守MySQL大门”的用户管理模块,另一个就是负责监控来访者每一个动作的访问控制模块。用户管理模块决定造访客人能否进门,而访问控制模块则决定每个客人进门能拿什么不能拿什么。

一、用户管理
1、mysql.user表
访问者提供来源的主机名(或者主机IP地址信息)和访问者的来访“暗号”(登录用户名和登录密码),这两部分中的任何一个没有能够匹配上都无法让看守大门的用户管理模块乖乖开门。
Host存放信任的主机,可以是:
1)主机名(如:mytest)
2)域名(如:www.domain.com)
3)以“%”来充当通配符的某个域名集合(如:%.domain.com)
4)一个具体的IP地址(如:1.2.3.4)
5)存在通配符的IP集合(如:1.2.3.%)
6)用“%”代表任何主机

继续阅读MySQL访问控制实现原理

MySQL Innodb存储引擎简介

Innodb做为第三方公司所开发的存储引擎,和MySQL遵守相同的开源License协议。

一、功能方面的特点

1、支持事务安全
Innodb在功能方面最重要的一点就是对事务安全的支持,这无疑是让Innodb成为MySQL最为流行的存储引擎之一的一个非常重要原因。而且实现了SQL92标准所定义的所有四个级别(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE)。对事务安全的支持,无疑让很多之前因为特殊业务要求而不得不放弃使用MySQL的用户转向支持MySQL,以及之前对数据库选型持观望态度的用户,也大大增加了对MySQL好感。

2、数据多版本读取
Innodb在事务支持的同时,为了保证数据的一致性以及并发时候的性能,通过对undo信息,实现了数据的多版本读取。

3、锁定机制的改进
Innodb改变了MyISAM的锁机制,实现了行锁。虽然Innodb的行锁机制的实现是通过索引来完成的,但毕竟在数据库中99%的SQL语句都是要使用索引来做检索数据的。所以,行锁定机制也无疑为Innodb在承受高并发压力的环境下增强了不小的竞争力。

继续阅读MySQL Innodb存储引擎简介