奥了个数据库用户的账号,我们要去访问一个数据库,我们需要一个账号,那么我们在创建账号的时候,我们需要注意, 我们要去创建一个唯一的用户名,就是不要重复的啊,这个名字有一定的规定,比如说我们一般是有开发的时候有规定是吧,一个用户名不能超过三十二字符是吧,太长就不好识别。然后我们创这个用户,最好跟我们业务啊进行关联,这样会啊看起来就啊比较知道什么意思。 那我们在创建账号的时候,我们要确认这个账号是用什么样的认证方式去登录啊,基于密码的方式去登录,还是基于这个 s, s, l 或者基于这个操作系统认证的方式去登录。那么这个用户呢?要跟这个表空间进行管理啊,我们说表 空间下面就是放了我们的啊,非常多的表,在逻辑上放了很多的表,在物理上就表空间下面有很多物理文件是吧? 那这个我们因为我们要通过用户理论去去创建一些对象啊,创建对象对象的集合, sk 码下面就有很多对象,那这样的话我通过这个用户理论去我创建这个对象的话,那这个对象表的数据呢,就写对应到这个表空间里面,对应这个文件里面去。 那临时表空间指的是我们这个用户呢,最好有对应的自己的临时表空间,因为用这个账号连上来啊。我们比如说做一些这个 史莱克的操作的是奥特曼排序,那么这个排序的这个结果排序的过程当中只要到内存,如果内存不够的话,那么这个中间结果会写到我们的临时表空间啊。那么如果说我们想对这个用 户啊的密码的 simi 周期以及密码的一些这个啊,这个复杂度啊,以及呢对我们登录啊的过程当中,我们啊控制这个登录啊几次,如果说失败的话,锁定这个账号以及 啊我们这个用户所用多少这个 cp 的资源,我们可以定义我们的 profi, 然后管理到我们的啊用户账号里面去。 然后也可以对这个账号里面去设定我们的消费组,因为如果说我们的系统里面是一个混合的 o a t p 和 o a a p 的话,那我们要去设定这个消费组 以及包括这个账户的状态。如果这账号你不想让他用,你可以把这个账户设为锁定。如果你把它放开,把锁定 啊这个打开啊,那么这个用户啊连进去操作,就是操作我们的 schema 下面的对象表啊,视图啊,出发呃,出发器啊,群众过程啊,视图啊等等啊。这是 allen 用户的账号创建的时候一些属性。 那么这个 oracle 支持的管理账号啊,管理员的账号有 c s, c s 是最大的权限账号,它可以操作输入过的所有的一切。 那 system 相对来说比 system 的账号要少一些啊,比如说他不能做关闭数据库启动数据库是吧? system 啊,他可以查看我们呃,稍微少一些 啊。然后还有专门做备份的时候,我们用 set back up 啊,做安排备份的时候是吧? set back。 然后我们做 detaco 的时候可以用 says deta dg, 然后我们做透明数据加密的时候,我们可以用 sets km, 我们在搭建管理 rack 集群的时候,我们可以用 sets ic, 我们再用企业管理器,我们可以用 sesman 作为管理表啊,还有 d, b, s, n, m, p 啊,这也是这个企业管理器里面的。 那么对于这个创业账号的时候,我们的认证方式,我们刚才讲了,我们可以通过密码的方式,也可以通过操作系统认证,也可以通过更强的一些啊, cobras s, s, l 和目录认证,那么我们这个用户密码都有了。那么我们去操作我们的数据库,那么我们有两种权限,一个是 system, 一个是 object。 那么对于 system 系统权限的话,主要是针对是数据库的这个操作。那数据库的这个啊,权限更大,因为数据库包括了很多很多文件,很多对线是吧,这个集合。 那 object 的对象,这个指定是指定某一个对象,这个包包括了表啊,仕途啊啊,出发器啊等等这样的对象。 那么系统权限啊,实际上对数据库的啊这个操作,比如说关闭数据库啊,启动数据库啊,或者 说对数据库的任何的对象的一组这样的一个操作啊。那后面可以加在授权的时候可以加上这个 admit option 这个选项啊,可以进行这个级别授权。 那么 object 的权限的话,它呢是针对于我们的某个对象啊,包括了表,试图序列,整个过程函数包啊这些。 那么它在授权的时候可以加上 vs gret option 可以啊,级别授权。 那么我们在授权和回收权限的时候,授权用 direct mini, 要 greater mini, 比如说我们的 dba 把 权限授给我们的某一个用户,叫比如说授权他这个 这个系统权限。比如说他能创建表,后面加一个 admit option, 那这个 joe 呢,有这个创建表,并且他可以把创建表这个权限再次授权给下面的啊, email 这个用户 啊,这个级别授权它可以加一个 admin option 啊。那么如果我想回收啊,可以用 revok 命令, 那么 dba 可以把骄傲的权限回收,就不让他创建表。但是这里注意一下,他创他回收这个啊,创建表的权限,骄傲收回收过来之后,这个 job 不能回收,因为这个他不能这个回收。 所以呢,你还是要通过九二点进去,再去回收 amile 的这个创建表的权限。这里面就是在管理系统权限里面,他回收的时候不是级别的授权是可以级别的。 那么对 object 这个对象级的这个权限授权, 我们的 dba 可以授权这个 joe, 然后后面加上 west greet option 啊。比如说他可以对 employee 这个表进行这个查询的操作,那 joe 呢,也可以把权限收回 interest。 那回收的时候可以几点回收?就是 d、 b、 a, 他说有 focal 的时候回收了胶,那他同时就回, 你知道我们的页面的,他是可以激烈回收的啊,有这么一个特性啊。那么角色是什么呢?我们说我们有用户有权限,那如果说我们的用户很多,然后呢,这比如说有一百个用户,那一百个用户里面 u 啊很多用户,他的权限是一样的。那如果说我们都要这样一个个去授权的话,那我对一百个用户 啊,都要去受啊这样的命令的权限。那如果说我一百个用户,我有两类两类五十个,五十个用户是不同的权限。那这样的话我把 这个 low 作为一个用。 low 相当于是这个用户主的概念。就是我把五十个用户权限是一样的,放在一个 low 里面,就是放给 low 取个名字。那这样的话我把五十个 把一些权限都放在这个 low 里面。比如说 low a, 那我把 low a 这个权限授权给这五十个用户, 那这样的话就一条命就就就可以了,就不用很多很多权。因为权限是很细的是吧,对哪些表现查询啊啊,不对的操作啊是吧等等是吧啊。所以他是比较方便啊。对一组用户进行授权,可以理解是这个用户组的概念啊。那有了这个呢,就后面就比较方便,好管理我们的权限。 那我们去管理这个权限啊,是分配这个权限的时候,通过 low 来授权就比较方便。比如说我们用户有 jenny 啊, david 啊, rec, 那这几个用户,他呢啊要去授权。比如说我这个呃,授权的时候经营的话他他 有删除这个 employee 这个表,或者插入这个数据 employee 这个表啊。那呢我把这两个权限啊给它创建出一个角色,叫 hr manager。 那这样的话我给杰尼授权的话,我只要把 hr many 这个角色授权给杰尼一条命令就可以了。如果没有这个 low 的话,我要执行两条命令给到杰尼。如果说我权限这里有十几二十条,那我也执行十几二条命令。那如果我把 low 啊设好之后,那下次用户如果是跟今年一样的话,那我就把 hr manage 这个设想给啊 其他用户,那这样的话就拥有了下面所有的权限啊。这个也是一样的,这里面比如说有 david 和这个 rick 他们,呃,有分别有三个权限。那我把这三个权限呢啊创建一个 low 啊 low 叫 hr click 是吧?那这样的话我只要把那个 hr click 啊授权给我们的 david 和 rack 啊,这样的话,那么就不用执行三条啊。下面的每个人只能三条, mini 执行六条了,我直接执行两条就可以搞定了。这是这个啊 low 的这个啊作用。
粉丝1154获赞6180

大家好,我是 king, 今天呢,我们继续来解读大厂高并发系统设计,像阿里为何要禁用存储过程?当然在讲这个问题的时候呢,我们必须要回顾一个历史,这个历史是什么呢? 这个历史其实就是像以前也好啊,包括现在的金融行业,银行也好,他们还在使用存住过程, 那他们为什么要使用存储过程呢?大家知道啊,就像银行,像金融行业,他们的数据库大多是欧瑞克或者是 db two 这种数据库的话呢,虽然说你要去给这种欧瑞克公司交一点钱,但是这种数据库他本身性能就非常高,所以呢,我们总结出来第一句话,有钱 任性对不对?我的预算充足,我可以去购买很多的这种小型机去满足我的性能需求,所以说 我们的这种数据库的这一个性能或者他的能力实际上是剩余的,所以我们可以用存储过程来玩一些事情,因为存储过程呢,他不用直接去写应用程序来进行处理,所以他会减少第一逼的交互,你进行部署的话也相当的方便啊,我只需要去写 c 口执行就行了。 同时的话呢,像银行或者金融行业,他往往会涉及到一些比较复杂的报表,那么我们知道,如果你要去写报表的话,你在扎瓦中间去写相当的麻烦, 那这个地方呢,他会涉及到复杂的 c 口,还有可能涉及到一些表与表之间的计算,那么用存储过程就可以达到这样的目的,所以这就是他们的第三个点。第四个点其实也是非常关键的点,就是方便外包。如果说你的银行在写一些 业务的时候用到了存储过程,那么我去招聘人要求里面呢,我就只需要去了解,随口对他的要求就相对来说比较低。所以呢,像以前像金融行业,像银行,他招聘的一个,或者是他招聘程序员的一个入职的基本要求就是会写存储过程。 那当然现在时代变了,我们来看一下阿里的开发规范,我们可以看到这是阿里巴巴的扎瓦开发手册,这里面明确的一条禁止使用存储过程,因为存储过程它存在难以调试和拓展, 更没有一致性。那么这是阿里他对于为什么要禁止存储过程他的一个说法。当然 k 老师认为这样的说法呢,其实还是比 家的草率,或者是比较的简单,我来进行对应的补充。好,你来看一下我补充的点就是为什么一线大厂不只是阿里啊,很多公司他都会弃用存储过程呢?第一个 你比如说像大家用到的都是分布式,分布式系统里面的数据库很大的话,像一线货厂公司用麦赛克,他必定会做分库分表,那存储过程你只能作用于局部的这种数据库,数据表的话,那肯定是满足不了整体的需求,所以这是第一个点。 然后第二个点,你要知道 myc 口数据库本身他的处理能力是有限的,所以你用这种过程会造成 mycyco 数据库的压力更大。然后第三点的话,在分布式系统里面呢,很多情况下面我们要用到事物,那分布是事物存储过程是没有 办法去保证分布式事物的一个全局性的,所以这是第三个点,第四个点其实非常关键啊,就是实际项目,如果你真的使用存储过程,你进行版本更新的时候,你出了问题,你进行回滚会很麻烦,你来看 好,为什么说麻烦呢?假设你的这一个重要的东西放到存储,存储过程当中啊,我们知道存储过程是放到麦塞口或者是 db 里面的, 那么如果你在实际执行过程当中,你更新的这个版本的存储过程有问题,写法有问题,那是不是我们要去回滚,但回滚的话,我们是不是就是替啊?这一个我们对应的绘画对不对?或者是把我们这一个存储过程 他当前执行这个规划要停止。但是你要知道了,在很多情况下面,你如果要回滚的话,不单纯是停止这个应用程序, 他的绘画还会在执行,就有可能造成你要去暂停这个业务的时候,实际上面这个数据库的绘画他会一直存在,他还可能再继续执行这个存储过程,可能里面呢 啊,别人有应用请求过来了,还在执行,还在执行的话呢,就会造成一些,比如说一百个、一千个甚至一万个脏数据,那么你进行存储过程进行回滚的话,你会发现 我回滚呐,但是我还要去处理这一千个脏数据啊,因为存储过程他不单纯是查询,他有可能会涉及到一些数据表之间的计算,这产生的这些其他的数据你还得擦屁股。所以 一旦我们把存储过程把它更新为扎瓦逻辑的话,就非常简单了,就算你的应用更新了这一段扎瓦逻辑,他是用来替代存储过程的,对不对?他出了问题,他的写法有问题,我们直接把应用咔咔把它咔掉之后, 你只要应用一暂停了,他肯定不会有绘画跑到我们的 db 里面来啊,因为他访问数据库无非就是个查询,无非就是插入你的逻辑,是一段段处理的, 原来存储过程他是一个很长的逻辑,你要暂停的话,可能执行在中间的某一个部分,现在你用扎瓦逻辑执行,只要用于当机了,那么这个地方产生产生的脏数据就有可能只有那么少数的几条,一条或者是十条。所以你在进行版本回退的时候,你非常 方便,并且呢你也可以去把招啊代码回推到上一个版本,你进行版本管理也非常的方便。 所以这个问题其实非常严重,就是你在真实的业务场景当中,你使用扎瓦逻辑去替代存储过程,你在进行版本发布,在进行版本回滚的时候,要减少很多很多的事情, 并且他也方便很多。所以我总结一句话啊,就是在我们实际的开发过程当中,尤其是现在的这种分布式架构、微服务架构的开发过程当中,永远不要使用数据库来计算 一加一这种逻辑,也就是说在一线互联网公司,他为什么会器用存储过程?就是你让计算的事情交给你的应用来做,不要交给数据库来做,数据库就该干他数据库该干的事情。

我们是实线,实线拍死脚本实现,这个 叫调用 oracle 存储过程,存储过程的开始教本。 好,第三步,那我们接下来就在下面去实现这个拍摄交位,那我们首先需要引用我们的这个刚才所安装的我们的 cx arco, 那这里面 c x 好,你看啊,直接会有 c x r 口,我们给他直接 ta 不出来就可以了,那么引用这个 c x r 口,然后紧接着来我们看一下, 好,这个 csrco, 那我们该怎么用?在我们这里有这个笔记哈,那这里面这是整个的我们的代码,那我们来看一下哈,那把这里复制过来, 复制过来,把我们的代码复制过来。好,那这里有很多写的不规范啊,那我们整理整理,稍微整理一下,整理一下,这是名字规范的吗? 括号用余了,嗯,就可以取掉, 在这里面这个加上空格,我们符合我们皮皮吧,这括号等于就得到赢了。 ok, 好了,那我们来看一下啊,看一下我们这个代码,那首先我们设置一个变量,这个变量我们写的是一个啥东西啊? 这是写的一个我们这个 gdbc 的一个连接的 url, 连接的一个 url, 那么这里面我们的格式就是我们的用户名,用户名,然后是斜盖,加上我们的用户的密码,然后加一个艾特, 艾特后面加的是我们这个 oracle 所在 oracle 这个数据库所在服务器的这个 ipip 地址,那由于我们都是在本机,那我这个是在本机的这个刀壳里面,那大家也是自己的 windows 已经安装过我们的这个 oracle, 那我们 oracle 就在就是 自己的本机地址,那就是幺二七点零点一,然后呢奥尔库的端口号,我们默认端口是不是就是幺五二幺啊?咱们也都没有改过,这个是幺五二幺,那我们连接哪个数据库呢?还是我们这个斜杠后面的这个 o r c l 这个默认的库啊? o r c l 这个库。 好,然后紧接着我们要去创建这个连接,也就是创建我们 python 跟我们这个 oracle 的 gdbc 的连接,那需要使用我们的库, 比如说使用我们这个 csr 口下面他的这个连接的这个方法,也就是这个库里面他有一个连接的方法,那用这个方法,这个方法需要传入一个参数,那就是我们前面所创建的这个 uil 地址,所以把这个变量传进来, 把这个变量传进来,然后紧接着那我建立好连接之后,我还要建立啥呀?建立他的这个光标,那么这里面科四建立一个光标,可是这个连接的这个科四直接去建立这个光标,然后这里面我们执行这个踹,这是啥呀? 踹里面的代码,只要是他有错误,那我们可以是报告出他有什么呀?相应什么类型的错误,那么报告出来, 报告出来之后,然后我们去在这里面去执行,也就说在这段代码中一旦有了报错,有了 bug, 那怎么样 他会哎一句什么相应的类型啊?那像我这里写的就是啥呀?这里这个就是所有的错误,只要是他有错误,好,那我们就给他,给他喘执行这一, 也就说只要有车有错误就执行这一步,那没有错误的话,他就能够去顺利执行,他就能够去顺利执行,这也是啥呀?我们的这个错误检验,错误检验是吧?好, 然后看我们这里面哈,这里面首先我定义了这个啥呀?名字,也就是定义一个变量,这个变量是啥呢?是我们这个存储过程的名字,存储过程的名字,然后之后 这里打印一下,打印成什么?正在执行,正在执行这个存储过程,那实际我调用存储过程是怎么调用啊? 那是在这句话哈,这句话,那就是这里面这是调动存储过程的这个规则,那也就是我们科四,也就是我们这个光标,然后他有个方法叫靠,然后什么 p 靠 p、 r、 o、 c、 plc, 那就是调用的存储存储过程,那这里面他相当于是啥呀?就相当于我们在这里,哎,创建了执行过程,那我们想要去调用存储过程,是不是得用?靠,啊?好,跟这个是一个意思啊?靠,加上我们存储过程的名字,是吧?眼皮,这个什么 是吧?是不是调用这个生存过程啊?好,那是一样的哈,那是一样的,好, 那我们这里没有参数,可以直接这样去调整,他跟他是一个意思,也就说我这里这个方法就是你把存储过程的名字给他传进来,他就能让 oricle 数据库去执行。哎,靠,调用这个存储过程 好,要认存的过程,那如果说我这句话执行完了,执行完了,他会怎么样?他会去,哎, 我再给你一个变量来告诉你谁执行成功了,这个存储过程的名字,执行成功了,然后打印一下这个信息,就是谁执行成功这个信息,那当然如果他有报错,他就会执行下面的,下面呢就是他有任何的报错,把这个报错作为这个 e, 然后这个 e 这个参数,我们作为啥了?这个 iro 作为了这个 iro, 然后呢?这里面我们是这个再定一个 message, 如果说他有错误哈,那就说谁执行失败,那是啥呀?我们这个存储过程加上他的这个错误信息,然后说执行失败。好,那我们来试一下哈,试一下, 哎,哎,这里有问题,这里有问题哈。哎。给他 pass, 给他 贝斯艾绒看一下啊,这就是贝斯艾绒。 嗯,这是我的文件,你说我这边能进入文件应该是有问题的。 好,那这个问题我再来搜一下,那么大家就可以用这个啥,就可以用这个去执行,就可以用这个去执行哈。那我们 六十四位的这个二股连接,那应该是这个连接稍微有点问题哈。好,那我来去查一下这个问题的原因。利用拍散库调用 oracle 的存储过程中出现报错怎么办?下期分享,不见不散。

好,那接下来啊,我们看一个用 python 调用 oracle 的这个存储过程啊,利用 python 的库,调用 oracle 的存储过程。 好,那么我们首先啊,你在你的这个 python 的咱们的这个拍岔目里面先创建一个文件,那你可以点击右键,在你的任意一个文件上面哈,点击右键,然后新建,这里有一个 python 文件, 然后你可以输入这个拍摄文件的名字,比如说像我起了一个像 oracle, 然后下划线 p l, 就是调用 p l c 口存储过程的,是吧?好,那你不用写什么点 p y 哈,不用写什么点 p y, 然后直接你不写,什么都不写, 就是你只要这个名字哈,他的文件的后缀,不需要,因为他自动会识别,自动去创建点 p y 的这个拍损教本。好,然后直接创建,创建了之后会有这个奥尔口 p 下划线 p y, p l, 点 p y, 然后我们进入这个文件夹, 进入这个文件,进入这个文件里面,我们看一下这个脚本,我们采用这种多行注释的形式。来,我写一下,我接下来要做什么事啊?那首先我们来第一个大点,第一个大点,那我们要做 这个去在 oracle 数据库,在 oracle 数据库创 键存储过程, 创建生活过程。好,然后紧接着我们来第一步,我们是啥呢?是创建一个表, 创建这个,我们创建这个存储过程啊,这个存储过程,他的意义是干啥呢?是将我们的 呃,要将 emp 表,要将 emp 表全量更新至一张新的表,这张新的表是啥呢?是叫我们的这个 emp 拷贝一, emp 拷贝一,这样表 点更新到点 这里,我们看一下将表 e m p 的数据,将表 e m p 全面更新到这个表中,然后首先我们创建这个 e m p e。 创建表 e m p e。 好,那么创建这个表的我们的 circle 语句, circle 语句就是这里,那我们就来创建这张表,读这个 circle 语句。 那你这个四口语句需要在哪里去执行啊?是不是需要到你的 pl 四口,或者你的什么那位开头啊? dbew 这种 ide 里面去执行,或者你进入到这个管理后台也可以。 oppo 的管理后台是不是也可以啊?好,那我们去把这个复制去创建,这样 好,创建这张表,他的字段,那我们可以看一下哈,他的字段跟我们 emp 是一样的,都是他跟我们 emp 是一样的,只是没有任何的数据。然后紧接着第二步。第二步干啥呢?创建表,然后去 将表将我们的表 p e 添加这个什么更新时间阶段。 好,添加一个更新时间的字段,也就说我们用 alt 确认给他添加一个字段。 好,那这是添加了这个啥呀?添加了一个字段叫 last, 他 update, 然后 update d, 呃, day, 然后这里面呢?他的数据类型是 day 型,也就是是我们的时间类型是我们的时间类型。好,然后紧接着,紧接着我们第三步是干啥呢?是要将我们的存储过程,嗯, 是创建存储过程,创建存储过程,实现 将表 e m p 更新到表 e m p 拷贝一中。好,那这个存储过程的语法,那我们看啊,就是下面这个,这个就是整个的存储过程。好,我已经把它复制到我们的 这个 db 一窝里面了。复制到 db 一窝里面了。好,复制过来 退一退,这样好看一点啊,好看一点。 ok, 那么这是我们的第一步,在我们数据库里创建存储过程,然后你去执行第四步,就是 第四步,执行以上色扣,执行以上这个色扣。好, 那么我们在 d b u 里面就可以把这整个都来一个执行。比如先去创创建表,添加字段,然后创建这个存储过程。好,然后我们点击执行,你执行完了之后,执行完了之后,在你的存储过程里面会多一个啥呀?我们看啊,在我们的这个 思考课里面,这个表表里面,我们会多一个这个啥 emp 拷贝一这个表 多了一张这个表,哈,他也会怎么样?多一个拉死他 update date 这个字段。然后同时呢,我们这里面, 我们会看到在我们的存储过程里面,哎,对,在存储过程里面会多一个这个 e m p four, 也就是我们创建的这个存储过程是叫 e m p four 这个存储过程。那我们现在想实现啥呀? 就想实现用 python 来去调用我们创建的这个存储过程。那该去怎么去调用呢?好,紧接着, 紧接着我们来看我们的第二步,利用拍放库调用 oracle 的存储过程。第二步,下期分享不见不散。



首先我们打开奥瑞口的官方网站来下载 gdk, 目前最新的版本是二十一,我们不需要下载最新版本,下载 gdk 十七或者是十一就行了。 然后如果你用的是 windows 的系统,我们点开这个 windows 的选项卡,然后下载一个 e x e 的可执行文件,然后就是中间这个,然后点下载就行了。然后这个下载速度还是比较快的,我们稍等一下, 然后下载完成,双击打开这个安装文件下一步, 然后我们尽量不要默认安装,我们来自定义一个安装路径,比如说安装到地盘的 j d k 幺七 这个下边,然后确定,然后下一步, 然后很快就安装完成了,好,把它关闭, 它被安装在了地盘根部路,打开命令行窗口,输入 java god version, 然后按回车,看到这个界面就是安装完成。