oracle笔记七(其他)
2021学年Oracle深度学习笔记ORACLE审计
27.Oracle深度学习笔记——ORACLE审计审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system 表空间中的SYS.AUD$表中不管是否打开数据库的审计功能,用管理员权限连接Instance;启动数据库;关闭数据库都会被记录。
1.相关参数:audit_sys_operations12C默认TRUE当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。
如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
audit_trail12C默认DBDB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;None:不做审计;2.审计级别开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement按语句审计,如audit table 会审计数据库中所有的create table,drop table,truncate table语句Privilege按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户 a 访问了用户b的表时(如select * fromb.t)会用到select any table权限,故会被审计。
Oracle数据库学习笔记_Oracle添加主键primarykey的四种方法
Oracle数据库学习笔记_Oracle添加主键primarykey的四种⽅法创建主键oracle主键添加语句通常紧跟在建表语句之后,也可以直接嵌在列声明⾥创建,oracle创建主键时会⾃动在该列上创建索引。
常见⽅法⼤概有以下5种:⽅法⼀、使⽤add constraint ⽅法添加主键约束alter table 表名 add constraint 主键名 primary key (列名1,列名2,...)⽅法⼆、使⽤索引创建主键(和⽅法⼀没有区别,可以将⽅法⼀理解为省略了using index)alter table 表名 add constraint 主键名 primary key (列名1,列名2,...)using index [index_name];当省略using index后⾯的index_name时,创建主键的同时创建同名索引;当使⽤已有索引index_name创建主键时,注意索引列和主键列应该相同才能创建成功。
⽅法三、直接添加主键alter table 表名 add primary key (列名1,列名2,...) ;同样,创建主键的同时创建同名索引。
⽅法四、参数列内添加主键create table ALERT_RESULT_EVENT_C(data_date VARCHAR2(8) not null,object_id VARCHAR2(600) not null,event_id VARCHAR2(20) not null,ratio NUMBER(22,4),pairing_object_id VARCHAR2(128),index_value_1 VARCHAR2(128),index_value_2 VARCHAR2(128),constraint PK_ALERT_RESULT_EVENT_C primary key (DATA_DATE, OBJECT_ID, EVENT_ID));删除主键alter table 表名 drop primary key ;采⽤该语句删除主键时,同名索引也会被删掉。
Oracle EBSGL学习笔记
12.81、冲销日记账1)原始借:租金10,000 本位币美元贷:现金10,000 本位币美元冲销借:现金10,000 本位币美元贷:租金10,000 本位币美元2)可以创建冲销日记账分录来冲销应计、估计、临时调整和重新分类,或更正错误。
3)方法:转换借贷项:通过转换借项和贷项金额来冲销日记账分录。
红字冲销:通过将原始日记账金额从正值改为负值来冲销日记账分录。
4)日记账> 输入> 复核日记账(B)其他活动日记账> 生成> 冲销2、自动冲销日记账1)可以自动冲销上一个月的应计日记账分录,并自动将其过账(如果需要)。
2)自动冲销日记账的前提条件:--日记账余额类型为“实际”--日记账类型已启用“自动冲销”选项--日记账已过帐,但尚未冲销--日记账冲销期间为“打开”或“将来可输入”3) 设置> 日记账> 自动冲销(AutoReverse)3、日记账分录报表提供:会计结算日期、类别、日记账名称、参考、日记账批4、与Oracle General Ledger 集成--在Excel中创建日记账--通过Web ADI 加载到GL_INTERFACE 表--从接口表中提交“日记账导入”-从Web ADI中与加载流程同时提交-从Web ADI 中作为独立的提交流程提交-从Oracle General Ledger中使用“导入日记账”窗口提交5、Web ADI 的核心功能1)布局功能--从布局中删除或向布局中添加字段--指定字段在布局中的位置--为布局中的字段分配默认值--保存布局,可以由具有适当责任的某个人来定义,然后由整个站点使用2) 文本导入功能--将文本文件数据导入到桌面文档中--创建可以修改和重复使用的映射模板,根据需要更改数据临时的移动目标。
3) 安全功能--将Web ADI 功能与菜单关联,创建用作安全配置文件的自定义访问点--将菜单附加到分配给用户的职责中,用用户级别限制Web ADI访问--为自助连接添加默认参数:强制用户在其桌面上生成文档时使用预定义的参数--将表单功能与用户的菜单关联,已授予其访问集成器的权限4) Internet 计算功能--集中部署,要操作词产品,客户机只需要浏览器和Excel--在Web 上运行6、通过Web ADI 进行桌面集成1) 集成器:Oracle General Ledger-日记账集成器、Oracle General Ledger-预算集成器、创建资产集成器、实地盘点集成器、HRMS集成器2)Oracle General Ledger-日记账集成器:--根据可定义的布局,自动生成基于电子表格的日记账分录工作表--允许通过复制和粘贴日记账行,然后进行增量式修改来快速的输入日记账--允许您定义可以反复修改和加载的日记账模板--使用安全措施和交叉验证规则以及其他引用字段全面验证账户--通过Oracle General Ledger开放接口将日记账加载到Oracle General Ledger7、导入日记账日记账> 导入> 运行1)将子分类帐和源系统数据导入Oracle General Ledger--定义分类账、币种、帐户、日记账来源和类别设置Oracle General Ledger,以接受日记账导入数据--运行“优化”程序,并定义并发程序控件。
韩顺平oracle学习笔记
韩顺平oracle学习笔记第0讲:如何学习oracle一、如何学习oracleOracle目前最流行的数据库之一,功能强大,性能卓越。
学习oracle需要具备一定基础:1.学习过一门编程语言(如:java ,c)2.最好学习过一门别的数据库(sql server,mysql , access)教程推荐:oracle使用教程,深入浅出oracle记住:欲速则不达,做任何事情要遵循他的规律,循序渐进,信心很重要成为一个oracle高手过程:理解小知识点->做小练习->把小的只是点连成线->做oracle项目->形成只是面->深刻理解Oracle基础部分:oracle基础使用; oracle用户管理; oracle表管理Oracle高级部分:oracle表的查询; oracle的函数; oracle数据库管理;oracle 的权角色; pl/sql 编程;索引,约束和事物。
期望目标:1 学会安装、启动、卸载oracle2 使用sql *plus工具3 掌握oracle用户管理4 学会在oracle中编写简单的select语句第1讲:基础语法内容介绍:1.为什么学习oracle2.介绍oracle及其公司的背景3.学会安装、启动、卸载oracle4.oracle开发工具5.Sql*plus的常用命令6.oracle用户管理一、主流数据库包括:●微软:sql server 和 access●瑞典:mysql AB公司●IBM公司:DB2●美国sybase公司:sybase●IBM公司:infromix●美国oracle公司:oracle(目前最流行的之一)二、oracle安装,启动及卸载1.系统要求:操作系统最好为windows2000内存最好在256M以上硬盘空间需要2G以上2.oracle安装会自动的生成sys和system两个用户说明:○1Sys用户是超级用户,具有最高权限,具有sysdba角色,create database 的权限,默认密码是manager○2System 用户是管理操作员,权限也很大,具有sysoper角色,没有create database权限,默认密码是 change_on_install○3一般讲,对数据库维护,使用system用户登录就可以了3.启动oracle右键单击我的电脑->服务和应用程序:服务->启动OracleServiceMYORA1(MYORA1是安装oracle时起的名字各有不同)和OracleOracleHome90TNSLlistener4.卸载oracle1、先关掉oralce,net stop OracleServiceORCL(ORCL是我的实例名字,换成你的),或者去我的电脑服务中关闭2、开始->程序->Oracle - oracle的版本号,我的是10ghome->Oracle Installation Products->Universal Installer 卸载oracle3、进注册表,regedit,删除选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下所有的key。
Oracle数据库学习笔记
Oracle数据库学习笔记Oracle数据库基础 orcale属于关系型数据库,适⽤于各类⼤,中,⼩,微机环境,是⼀种⾼效率、可靠性好的、适应⾼吞吐量的数据库⽅案。
学习,实验完全免费,商⽤需要⽀付相应费⽤。
Oracle 数据库包括数据库实例,和数据库,⼆者脱离谁都没有存在的价值。
实例是⽤来操作数据库的对象,数据库是⽤来存储数据使⽤的。
Oracle主要组件包含实例组件,数据库组件。
SGA(System Global Area)是Oracle Instance的基本组成部分,PGA(Process Global Area)是为每个连接到Oracle database的⽤户进程保留的内存。
每个实例只有⼀个SGA,所有的进程都能访SGA。
PGA是程序全局区,每个⼀个进程都⼀个PGA,PGA是私有的,只有对应进程才能访问对应的PGA。
数据库中包含:参数⽂件,⼝令⽂件,数据库⽂件,控制⽂件,⽇志⽂件以及归档⽇志⽂件。
Oracle实例进场包含⽤户进程,服务器进程和后台进程。
SGA:系统全局区 系统全局区包含共享池,数据缓冲区,⽇志缓冲区。
“共享池”:是对SQL,PL/SQL程序进⾏语法分析,编译,执⾏的内存区;由库缓存和数据字典缓存组成;其⼤⼩直接影响数据库性能。
“数据缓冲区”:临时存储从数据库读⼊的数据,所有⽤户共享,数据缓存区的⽬的是加快数据读写。
“⽇志缓冲区”:⽇志记录数据库所有修改信息,其先产⽣于⽇志缓冲区,当达到⼀定数量时,由后台进程将⽇志数据写到⽇志⽂件中。
PGA:程序全局区 PGA包含单个服务器进程所需要的数据和控制信息,在⽤户进程连接到数据库并创建⼀个会话时⾃动分配的,保存每个与数据库连接的⽤户进程所需要的信息。
PGA为⾮共享区,只能单个进程使⽤,当⼀个⽤户会话结束,PGA释放。
后台进程 后台进程中包含PMON(进程监视器(Process Monitor)),SMON(系统监视器(System Monitor)),DBWR(数据库书写器(Database Write)),LGWR(⽇志书写器(Log Write)),CKPT(检查点(Checkpoint)),以及其他。
oracle分组排序汇总笔记
一、相关函数:Group by、Rollup、Cube、Grouping sets、Over、Grouping_id、Grouping、Decode、lag、lead、rank、dense_rank、row_number、count二、初始化数据:-- Create tablecreate table EMPLOYEE(EID NUMBER not null,ENAME V ARCHAR2(20) not null,EADDRESS V ARCHAR2(200) not null,E_DID NUMBER not null,HIRE_DA TE DA TE not null,SALARY NUMBER(8,2) not null,BONUS NUMBER(8,2),BOSS NUMBER)tablespace USERSpctfree 10initrans 1maxtrans 255storage(initial 64minextents 1maxextents unlimited);-- Create/Recreate primary, unique and foreign key constraintsalter table EMPLOYEEadd primary key (EID)using index;--insert contentinsert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)values (1, '郭芙', '广东', 1, to_date('02-01-2006', 'dd-mm-yyyy'), 2000.5, 100.5, 10);insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)values (3, '杨康', '成都', 3, to_date('14-07-2004', 'dd-mm-yyyy'), 3000, null, 10);insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)values (9, '杨过', '广东', 1, to_date('02-03-2005', 'dd-mm-yyyy'), 2000, 1000, 10);insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)values (10, '小龙女', '广东', 2, to_date('05-04-2000', 'dd-mm-yyyy'), 8000, null, 10);insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)values (11, '郭襄', '广东', 3, to_date('01-12-2010', 'dd-mm-yyyy'), 5000, null, 10);insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)values (14, '郭靖', '成都', 2, to_date('08-07-2008', 'dd-mm-yyyy'), 4300, null, 14);insert into EMPLOYEE (EID, ENAME, EADDRESS, E_DID, HIRE_DATE, SALARY, BONUS, BOSS)values (15, '黄蓉', '成都', 3, to_date('13-05-2009', 'dd-mm-yyyy'), 1600, 200, 14);commit;三、具体应用:1、group by与rollup:select eaddress a ,ename b,sum(salary) c from employee group by rollup(eaddress, ename)图1分析:如图,这里不光只对第一个字段做了累计,先按(eaddress,ename)分组累计,再按(eaddress)分组累计,最后累计全部类似于:select * from(select eaddress,ename,sum(salary) a from employee group by eaddress,enameunion allselect eaddress,null,sum(salary) from employee group by eaddressunion allselect null,null,sum(salary) from employee)2、group by 与cube;select eaddress a ,ename b,sum(salary) c from employee group by cube(eaddress, ename) order by a,b图2分析:CUBE这里的使用与ROLLUP基本相同,但CUBE的合计更加详细,它能够显示次分组字段的合计信息类似于:select eaddress a,ename b,sum(salary) c from employee group by grouping sets((eaddress,ename),(eaddress),(ename),()) order by a,b3、group by 与grouping setsselect eaddress a ,ename b,sum(salary) c from employee group by grouping sets((eaddress, ename),())图3-1select eaddress a ,ename b,sum(salary) c from employee group by grouping sets((eaddress, ename),(eaddress),())图3-2分析:Group by grouping sets可以应用来指定自己感兴趣的总数组合。
Oracle学习材料
1.数据库的逻辑结构是由块、区、段和表空间组成的。
2.数据库的操作模式包括专用服务器和共享服务器。
3.Oracle关闭数据库的4种方式是正常关闭方式(NORMAL)、事务关闭方式(TRANSACTIONAL) 、立即关闭方式(IMMEDIA TE) 和强制关闭方式(ABORT) 。
4.重做日志文件的内容由重做记录组成,并且是由日志写进程(LGWR)后台进程写入到日志文件中的。
5.表空间有两种区管理方式,分别是本地管理和字典管理。
6.用户的验证方式有口令验证、外部验证和全局验证3种。
7.Oracle将权限分为系统权限和对象权限2种。
8.非系统表空间分为永久表空间、临时表空间和还原表空间三种类型。
9.SQL语句CREA TE TABLESPACE用于创建表空间。
10.Oracle关闭数据库的3个步骤是关闭数据库、卸载数据库和打开数据库。
11.初始化参数文件的两种类型分别是静态参数文件和服务器参数文件。
12.非系统表空间分为永久表空间、临时表空间和还原表空间三种类型。
13.概要文件主要提供资源限制和口令管理功能。
14.创建用户的SQL语句是CREA TE USER ,更改用户的SQL语句是ALTERUSER ,删除用户的SQL语句是DROP USER 。
15.使用OEM控制台创建用户时,系统将自动授予用于CONNECT 角色。
16.PL/SQL语句块分成标题部分、声明部分、执行部分和异常部分17.常用的单行函数可分成以下几类:系统变量、系统变量、_数字_、_字符_、_日期_、_数据类型转换和其他函数。
18.非系统表空间分为、和重做表空间三种类型。
19.Oracle数据库服务器由________和________构成。
20.在SQL语言中,为了数据库的安全性,设置了对数据的存取进行控制的语句,对用户授权使用语句,收回所授的权限使用语第1页,共9页句。
21.当对某一表进行诸如、和这些操作时,oracle 就会自动执行触发器所定义的SQL 语句。
Oracle常用命令大全(很有用,做笔记)
Oracle常⽤命令⼤全(很有⽤,做笔记)⼀、ORACLE的启动和关闭1、在单机环境下要想启动或关闭ORACLE系统必须⾸先切换到ORACLE⽤户,如下su - oraclea、启动ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>startupSVRMGR>quitb、关闭ORACLE系统oracle>svrmgrlSVRMGR>connect internalSVRMGR>shutdownSVRMGR>quit启动oracle9i数据库命令:$ sqlplus /nologSQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.SQL> connect / as sysdbaConnected to an idle instance.SQL> startup^CSQL> startupORACLE instance started.2、在双机环境下要想启动或关闭ORACLE系统必须⾸先切换到root⽤户,如下su - roota、启动ORACLE系统hareg -y oracleb、关闭ORACLE系统hareg -n oracleOracle数据库有哪⼏种启动⽅式说明:有以下⼏种启动⽅式:1、startup nomount⾮安装启动,这种⽅式启动下可执⾏:重建控制⽂件、重建数据库读取init.ora⽂件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora⽂件。
2、startup mount dbname安装启动,这种⽅式启动下可执⾏:数据库⽇志归档、数据库介质恢复、使数据⽂件联机或脱机,重新定位数据⽂件、重做⽇志⽂件。
oracle表空间总结(个人笔记总结)
表空间含义:表空间是数据库的逻辑组成部分。
从物理上讲,数据库数据存放在数据文件中;从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成1,oracle 中逻辑结构包括表空间、段、区和块。
说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由oracle 块构成的这样的一种结构,可以提高数据库的效率。
表空间用于从逻辑上组织数据库的数据。
数据库逻辑上是由一个或是多个表空间组成的2,创建表空间:create tablespace data01 datafile 'd:\test\dada01.dbf' size 20m uniform size 128k;或SQL> create tablespace lqb datefile 'e:\lqb.dbf' size 50M autoextend on next 50M maxsize unlimited extend mangement local;-------------extend mangement local;本地管理表空间。
autoextend on next 50M maxsize unlimited 在50M后最大的扩展时没有限制的3,第3步:创建用户并指定表空间*/ create user USERNAME identified by PASSWORD default tablespace USER_DATE temporary tablespace user_temp;-------------temporary 临时的,暂时的4,如何将表移动到指定表空间alter table TABLE_NAME move tablespace TABLESPACE_NAME;如何将索引移动到指定的表空间alter index INDEX_NAME REBUILD tablespace TABLESPACE_NAME;5,改变表空间的状态a,使表空间脱机alter tablespace 表空间名offline; b,使表空间联机alter tablespace 表空间名online; c,只读表空间alter tablespace 表空间名read only; (修改为可写是alter tablespace 表空间名read write;)6, 知道表空间名,显示该表空间包括的所有表select * from all_tables where tablespace_name='表空间名';7,知道表名,查看该表属于那个表空间select tablespace_name, table_name from user_tables where table_name='emp';8,扩展该表空间,为其增加更多的存储空间。
韩顺平老师oracle视频教程听课笔记
韩顺平老师 oracle教程笔记1.Oracle认证,与其它数据库比较,安装Oracle安装会自动的生成sys用户和system用户:(1)sys用户是超级用户,具有最高权限,具有sysdba角色,有create database的权限,该用户默认的密码是change_on_install (2)system用户是管理操作员,权限也很大。
具有sysoper角色,没有create database的权限,默认的密码是manager (3)一般讲,对数据库维护,使用system用户登录就可以拉也就是说sys和system这两个用户最大的区别是在于有没有create database的权限。
2.Oracle的基本使用--基本命令sql*plus的常用命令连接命令1.conn[ect]用法:conn 用户名/密码@网络服务名[as sysdba/sysoper]当用特权用户身份连接时,必须带上as sysdba或是as sysoper 2.disc[onnect]说明: 该命令用来断开与当前数据库的连接3.psssw[ord]说明: 该命令用于修改用户的密码,如果要想修改其它用户的密码,需要用sys/system登录。
4.show user说明: 显示当前用户名5.exit说明: 该命令会断开与数据库的连接,同时会退出sql*plus文件操作命令1.start和@说明: 运行sql脚本案例: sql>@ d:\a.sql或是sql>start d:\a.sql2.edit说明: 该命令可以编辑指定的sql脚本案例: sql>edit d:\a.sql,这样会把d:\a.sql这个文件打开3.spool说明: 该命令可以将sql*plus屏幕上的内容输出到指定文件中去。
案例: sql>spool d:\b.sql 并输入 sql>spool off交互式命令1.&说明:可以替代变量,而该变量在执行时,需要用户输入。
Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏
Oracle学习笔记:使⽤replace、regexp_replace实现字符替换、姓名脱敏 在数据库中难免会遇到需要对数据进⾏脱敏的操作,⽆论是姓名,还是⾝份证号。
最近遇到⼀个需求,需要对姓名进⾏脱敏:姓名长度为2,替换为姓+*;姓名长度为3,替换中间字符为*;姓名长度为4,替换第3个字符为*; 经过⼀番搜索之后,最终找到了3种⽅式的实现,具体如下。
⼀、先查找,再替换select replace('陈宏宏',substr('陈宏宏',2,1),'*') as name from dual;注意:此种⽅法通过对第2个字符进⾏替换,如果名字为叠名,则会发⽣上述误替换情况;⼆、拼接select substr('陈宏宏',1,1)||'*'||substr('陈宏宏',3,1) as name from dual;三、使⽤regexp_replace进⾏精准替换select regexp_replace('陈宏宏','(.)','*',2,1) as name from dual;注意:regexp_replace⽀持使⽤正则表达式对字符串进⾏替换,该语句解释为从第2个字符开始,取任意1个字符,替换为*;四、完整的替换代码create table temp_cwh_002 asselect a.acc_nbr,a.act_city,a.city_name,a.number1,a.number2,case when length(a.cust_name) =2then regexp_replace(cust_name,'(.)','*',2,1)when length(a.cust_name) =3then regexp_replace(cust_name,'(.)','*',2,1)when length(a.cust_name) =4then regexp_replace(cust_name,'(.)','*',3,1)else cust_name end cust_name,a.acc_nbr2,a.param_valuefrom temp_cwh_001 awhere length(a.cust_name) <=4END 2019-01-02 16:44:13。
Oracle分析函数笔记
Oracle分析函数Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的。
Oracle从8.1.6开始提供分析函数。
一、基本语法oracle分析函数的语法:function_name(arg1,arg2,...)over(<partition-clause> <order-by-clause ><windowing clause>)说明:1.partition-clause 数据记录集分组2.order-by-clause 数据记录集排序3.windowing clause 功能非常强大、比较复杂,定义分析函数在操作行的集合。
有三种开窗方式: range、row、specifying。
二、常用分析函数1. avg(distinct|all expression) 计算组内平均值,distinct 可去除组内重复数据select deptno,empno,sal,avg(sal) over (partition by deptno) avg_sal from t;DEPTNO EMPNO SAL AVG_SAL---------- ---------- ---------- ----------10 7782 2450 2916.666677839 5000 2916.666677934 1300 2916.6666720 7566 2975 21757902 3000 21757876 1100 21757369 800 21757788 3000 217530 7521 1250 1566.666677844 1500 1566.666677499 1600 1566.666677900 950 1566.666677698 2850 1566.666677654 1250 1566.666672.count(<distinct><*><expression>) 对组内数据进行计数3.rank() 和dense_rank()rank()根据 order by 子句表达式的值,从查询返回的每一行,计算和其他行的相对位置,序号从 1 开始,有重复值时序号不跳号。
Oracle学习笔记:判断表是否存在函数is_table_exists
Oracle学习笔记:判断表是否存在函数is_table_exists在 Oracle 中可以利⽤系统表 user_tables 和 all_talbes 判断表是否存在,但有时在存储过程中确认表是否存在并不⽅便,因此有必要封装⼀个函数,进⾏调⽤。
下⾯是函数的内容:-- 判断表是否存在create or replace function temp_is_table_exists(is_table_name varchar2, is_owner_name varchar2 default null)return boolean isvcproc_name varchar2(100) := 'TEMP_IS_TABLE_EXISTS';vncount number(10);vnerr_code number;vcerr_text varchar2(2000);vcowner_name varchar2(1000);vctable_name varchar2(1000);beginvncount := 0;vcowner_name := is_owner_name;vctable_name := is_table_name;if vcowner_name is null thenselect count(1) into vncountfrom user_tableswhere table_name = upper(vctable_name);elseselect count(1) into vncountfrom all_tableswhere owner = upper(vcowner_name)and table_name = upper(vctable_name);end if;if vncount > 0 thenreturn true;elsereturn false;end if;exceptionwhen others thenvnerr_code := sqlcode;vcerr_text := sqlerrm;-- 记录异常以备查pro_cwh_test(vcproc_name, vctable_name, vnerr_code, vcerr_text);rollback;commit;end temp_is_table_exists;其中,⼊参为:表名 + ⽤户名,⽤户名可缺省。
MLDN魔乐科技_Oracle课堂笔记
MLDN魔乐科技_Oracle课堂笔记1.sqlplusw命令(窗口形式),sqlplusw不支持编辑,一般在编辑器(记事本)中编辑好了后拷贝进去执行,或用ed命令;2.descdesc [tablename];查看表结构3.show user查看当前用户4.select table_name from tabs显示当前用户下的表名;5.set linesizeset linesize [number];6.set pagesizeset pagesize [number];7.eded命令用来从sqlplusw中打开编辑器来编辑文件(文本文件);8.@执行sql文件@D:\a.txt;@d:\a;(a文件的扩展名为.sql)9.connconn username/pwd@实例名;10.sql标准,其功能:DML(数据操作语言),DDL(数据定义语言),DCL(数据控制语言)11.别名Oracle中指定列别名;(不要指定为中文);12.distinct去除重复记录;13.||字符串连接符;select "我的名字是:" || name from t_user;14.NOT NULL/IS NULL选择列值不为空的记录where collumname IS NOT NULL;相反IS NULL;15.BETWEEN…AND…WHERE COLUMENAME BETWEEN...AND...; 等价于>=,<=,如果是在时间之前,则需将时间''起来;16.大小写oracle中查询值是大小写区分的,但关键字不区分;17.InFieldName in (值1,值2,值3,...值n);NOT IN;18.Like在使用Like时常用的通配符:%,匹配任意长度内容,_,匹配一个长度内容;例:select * from emp where ENAME Like '_M%';表示第二个字母为M的名字.19.>,<,>=,<=,<>,!=用法20.order byOrder by语句,放在SQL语句最后;desc(从大到小)/asc(从小到大)(默认)21.单行函数字符/数值/日期/转换/通用函数;(1).字符:UPPER()变大写,LOWER()变小写,INITCAP()将单词第一个字母大写;字符长度LENGTH(),字符串截取SUBSTR(),字符串替换REPLACE()其中substr()的第二个参数即起始位置索引为0或1效果都是从第一个字符开始,负数是从右边开始;(2).数值:四舍五入ROUND(),截取TRUNC(),求模MOD();ROUND(23.45,2),TRUNC(23.45,-1),MOD(10,3);(3).日期:MONTHS_BETWEEN(),两个日期之间的月数;MONTHS_BETWEEN(DA TE1,DA TE2)ADD_MONTHS(),下月的今天;NEXT_DA Y(),下一个的今天日期;LAST_DAY(), 给定日期的最后一天日期;(4).转换:TO_CHAR(),TO_NUMBER(),TO_DA TE();fm去除前导0,例如:to_char(sysdate,'fmyyyy-mm-dd') 得出结果2009-1-2(本应为2009-01-02).千位分隔符(格式字符用9表示),货币前缀($美元,L本地币种)to_char(123456,'$99,999')美元to_char(123456,'L99,999')本地币种(5).通用:如果有NULL类型数据参与运算,必需用NVL()转换成特定值再计算;如:NVL(filed1,'0')DECODE()函数,用于替换;DECODE(field/expression,1,"one",2,"two")表示如果field/expression如果是1的话,则替换为one,是2的话替换为two;22.ORACLE用户(1)超级管理员:sys/change_on_install;(2)管理员:system/manager;(3)普通用户:scott/tiger;23.左、右(外)连接默认左连接where a.field1(+) = b.field2"+"在左边表示右连接,在右边表示左连接cross join产生笛卡尔积;标准语法:select table1.*,table2.* from table1,table2 where table1.no=table2.no;24.sql1999select table1.*,table2.* from table1[cross join table2][natural join table2][join table2 using collumname][left|right|full outer join table2]on table1.collum1 = table2.collum2where 1=1group by 分组条件having 分组条件order by...注:where子句中不能带组函数;25.组函数(1).count();(2).max();(3).min();(4).sum();(5).avg();26.分组统计group by27.子查询示例:select * from emp where sal > (select sal from emp where empno = 7654)使用分类:单列(用得最多),单行,多行;子查询的三种操作:(1) in 在结果集之中;(2) any=any即=,>any 比最小值的要大的结果集,<any比值最大的要小的结果集;(3) all>all,比最大的值要大,<all,比最小的值要小;格式:where field1 > all(子查询)28.事务一个窗口一个会话,如没有提交互不影响;commit;提交;rollback;回滚;死锁,等待,一个session没有提交,其它session不能处理,要等待前一个session提交了再进行处理;29.子查询、外连接练习select e.job,count(e.empno)from emp e right outer join (select job from emp group by job having min(sal) > 1500) emon e.job = em.jobgroup by e.job;select e.job,count(e.empno)from emp e ,(select job from emp group by job having min(sal) > 1500) emwhere e.job(+) = em.jobgroup by e.job;select e.job,count(e.empno)from emp ewhere e.job in (select job from emp group by job having min(sal) > 1500)group by e.job;29.表的建立与删除Oracle中的主要数据类型;varchar,varchar2为255字符;number(m,n),---float,number(n)----intdateclob,blog 4G(1)复制表create table tablename as select * from emp;(2)复制表结构(加永不成立的where条件)create table tablename as select * from emp where 1==2;(3)创建表create table tablename (字段1 类型1 default '默认值',字段2 类型2,...字段n 类型n)(4)修改表删除表: drop table tablename;增加列:alter table tablename add(columnname 类型default '默认值',columnname 类型default '默认值')修改列:alter table tablename modify(columnname 类型default '默认值')修改列名:alter table rename column columnname to newcolumnname重命名表:rename tablename1 to tablename2;只能用于oracle截断表:truncate table tablename;与delete类似,但直接释放,不能回滚;30.约束的分类与使用作用:保证数据库中数据的完整性;分类:主键(PRIMARY KEY),唯一(UNIQUE),检查(CHECK),非空(NOT NULL),外键约束(FOREIGN KEY);其中,前四种约束为单表约束,外键约束为多表约束;通过constraint指定约束:constraint person_pid_pk PRIMARY KEY(pid)constraint person_sex_ck CHECK(sex in ('男','女'))外键:强制删除父表:一般是先删除子表,再删除父表,但技术上可以实现强制先删除父表(同时删除从表相关约束):DROP TABLE tablename CASCADE CONSTRAINT;(一般不使用)强制删除从表数据:删除父表数据时,从表相应有约束的记录也删除, 需在创建表约束时这样处理:CONSTRAINT person_book_pid_fk FOREIGN KEY(pid) REFERENCES persion(pid) ON DELETE CASCADE示例:CREA TE TABLE T_PARENT(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10));CREA TE TABLE T_CHIRLD(ID NUMBER(10) PRIMARY KEY NOT NULL,NAME V ARCHAR2(10),PARENT_ID NUMBER(10),CONSTRAINT CHIRLD_PARENT_FK FOREIGN KEY(PARENT_ID) REFERENCES T_PARENT ON DELETE CASCADE);增加约束:ALTER TABLE tablename ADD CONSTRAINT 约束名PRIMARY KEY(pid);示例:alter table T_CHIRLDadd constraint CHIRLD_PARENT_FK foreign key (PARENT_ID)references T_PARENT (ID) on delete cascade;修改约束:ALTER TABLE tablename MODIFY CONSTRAINT 约束名PRIMARY KEY(pid);字段名_PK,字段名_UK,字段名_CK,字段名_NK,从表字段名_父表字段名_FK删除约束:ALTER TABLE tablename DROP CONSTRAINT 约束名;31.表的关联查询:并(UNION),交(INTERSECT),差(MINUS)UNION:将多个查询的结果组合到一个查询结果中,没有重复;UNION ALL:将多个查询的结果组合到一个查询结果中,可以有重复;INTERSECT:返回两个结果集的公共部分;MINUS:返回两个结果集的差值;(左边表减右边表)示例:select * from emp UNION select * from emp2;32.ROWNUM伪列的作用自动编号,存在于每一个查询中,使用情境:只想显示前五条记录,则只需加条件:ROWNUM <= 5;常用于分页操作如果想取得中间记录的数据,不能用ROWNUM(BETWEEN AND),只能用子查询:例:查出第五条到第十条记录;SELECT * FROM (SELECT ROWNUM rn,empno,ename,job FROM emp WHERE ROWNUM<=10) tempWHERE temp.rn>=5;33.序列的使用用途:用于自动增长;创建序列:CREA TE SEQUENCE seqname[INCREMENT BY n][START WITH n] --START WITH默认从1开始;[{MAXV ALUE n|NOMAXV ALUE}][{MINV ALUE n|NOMINV ALUE}][{CYCLE|NOCYCEL}][{CACHE|NOCACHE}]示例:create sequence myseq;使用序列:insert into tablename (next,curr) values (myseq.nextval,myseq.currval);删除序列:DROP SEQUENCE seqname;34.视图创建语法:CREA TE OR REPLACE VIEW 视图名称AS 子查询其中子查询是一个复杂的select语句视图创建好后,可以作为一张表来查询使用;以上创建的视图可以执行UPDA TE,且可将原表进行修改;但实际应用用,视图是只读的,可以需要在创建视图的时候加上以下参数:WITH CHECK OPTION 不能更新视图条件字段,但能更新其它非条件字段;WITH READ ONLY表示只读,不能更新;删除语法:DROP VIEW 视图名称;35.同义词,用户管理,权限分配与撤销,数据库的备份同义词(只适用于oracle):作用:通过同义词可访问不同用户下的表,例如,scott用户可以访问sys用户下的dual表;创建同义词:CREA TE SYNONYM 同义词名称FOR 用户名.表名称;示例:create synonym emp for scott.emp;删除同义词:DROP SYNONYM 同义词名称;用户管理创建用户:CREA TE USER 用户名IDENTIFIED BY密码;为用户授权:GRANT 权限1,权限2,... TO 用户;示例将创建session的权限赋给testuser,以使得其可以连接到数据库:GRANT CREA TE SESSION TO testuser;赋予角色给用户testuser:GRANT CONNECT,RESOURCE TO testuser;修改用户密码:ALTER USER 用户名IDENTIFIED BY密码;使用户密码失效:ALTER USER 用户名PASSWORD EXPIRE;锁住用户:ALTER USER 用户名ACCOUNT LOCK;解锁用户:ALTER USER 用户名ACCOUNT UNLOCK;将某张表的读取,删除权限赋给用户testuser:GRANT SELECT,DELETE ON scott.emp TO testuser;回收权限:REVOKEREVOKE 权限ON 用户.表名称FROM 用户;示例:REVOKE SELECT,DELETE ON scott.emp FROM testuser;数据库的备份:导入导出命令EXP,IMP36.可变数组类似于嵌套表,一般开始过程中不用37.数据库设计范式第一范式:每一个字段不可再分;第二范式:实现多对多的关联;第三范式:实现一对多的关联;(用得最多90%以上的项目)注:以上三范式在设计数据库时仅作参考,数据库设计的维一原则是:表关联尽可能少,SQL 尽可能简单;37.嵌套表(ORACLE特有,使用复杂,一般实际开发中不使用)在一个表中还包含另一个子表; 先定义类型.。
Oracle优化笔记
Oracle优化笔记业务是否⽤最优的⽅式来运⾏。
如果不是最优的⽅式那就对SQL进⾏优化。
查看数据库的执⾏计划技术⽅向上,应多考虑性能⽅⾯的问题积极参与到业务层⾯,从业务⾓度思考问题。
导致性能问题的可能原因1,表没有正确的创建索引---错误的执⾏计划2,表没有及时的分析---错误的执⾏计划3,热块---数据块的争⽤(反向索引?)4,锁的阻塞---业务设计缺陷、5,SQL解析消耗⼤量CPU---变量绑定6,低效的SQL---SQL⾃⾝的问题7,数据库整体负载过程---架构设计的问题性能问题的定位原则尽可能从⼩范围分析问题1,SQL层如果能从定位到SQL,就不要从会话层⾯分析已经定位到了某条SQL语句有问题,就针对该语句着⼿。
使⽤⼯具和执⾏计划来分析该语句,如使⽤:10053,10046(查看某条语句资源消耗情况)2,会话层如果能定位到会话,就不要从系统层⾯分析:V$SESSION, V$SESSTAT, V$SESSION_WAIT, V$SQL, V$LOCK SQL_TRACE3,系统层如果⽆法定位任何性能问题,从系统层⾯⼊⼿AWR(STATSPACK), OS tools(top, iostat)锁没有并发就没有锁Oracle中锁的分类:Enqueues--队列类型的锁,通常和业务相关的简写: enqLatches---系统资源⽅⾯的锁,⽐如内存结构,SQL解析锁的原则:1,只有被修改时,⾏才会被锁定,select操作不会在数据表中加锁。
2,当⼀条语句修改了⼀条记录,只有这条记录上被锁定,在Oracle数据库中不存在锁升级。
3,当某⾏被修改时,它将阻塞别⼈对它的修改。
4,当⼀个事务修改⼀⾏时,将在这个⾏上加上⾏锁(TX),⽤于阻⽌其它事务对相同⾏的修改。
5,读永远不会阻⽌写。
6,读不会阻塞写,但有唯⼀的⼀个例外,就是select ... for update.7,写永远不会阻塞读8,当⼀⾏被修改后,Oracle通过回滚段提供给数据的⼀致性读。
oracle入门笔记---分区表的分区交换
oracle⼊门笔记---分区表的分区交换本⽂参考来⾃作者:在oracle 11.2环境下测试--drop table tab_a purge;--创建分区表create table tab_a(r_id number(19) primary key,r_name varchar2(300),r_pat integer)partition by list (r_pat)(partition p_value1 values(1),partition p_value2 values(2),partition p_value3 values(3),partition p_def values(default));--创建普遍表create table tab_b as select * from tab_a;--创建主键alter table tab_b add primary key(r_id);---插⼊测试数据insert into tab_a(r_id,r_name,r_pat)select a.OBJECT_ID,a.OBJECT_NAME,1 from all_objects a;insert into tab_a select 99199999,'test',1 from dual;commit;--测试分区交换----1.分区表,创建了主键索引,普通表没有创建,则alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation--ORA-14097: ALTER TABLE EXCHANGE PARTITION 中的列类型或⼤⼩不匹配---2.分区表,创建了主键索引,普通表也创建全局索引则alter table tab_b add primary key(r_id);alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation update global indexes;--ORA-14098: ALTER TABLE EXCHANGE PARTITION 中的表索引不匹配--3.分区表,创建了主键索引,普通表也创建主键索引则,且不包含索引交换alter table tab_a exchange partition p_value1 with table tab_b /*including indexes*/ without validation /*update global indexes*/; --成功-----但是 insert into tab_a select 99199999,'test',1 from dual;--ORA-01502: 索引 'SCOTT.SYS_C0012090' 或这类索引的分区处于不可⽤状态---这时需要重建索引才能更新数据 ----alter index SCOTT.SYS_C0012090 rebuild;insert into tab_a select 99399999,'test',1 from dual;---成功,,,--4.分区表,创建了主键索引,普通表也创建主键索引则,且不包含索引交换,更新全局索引truncate table tab_a;(/*清理分区不⾏*/)insert into tab_a select 99199999,'test',1 from dual;commit;alter table tab_a exchange partition p_value1 with table tab_b /*including indexes*/ without validation update global indexes; insert into tab_a select 99399999,'test',1 from dual;---成功,,,---但是更新普通表数据时,insert into tab_b select 99399999,'test',1 from dual 时,--ORA-01502: 索引 'SCOTT.SYS_C0012090' 或这类索引的分区处于不可⽤状态-----------------------------5.在分区表的⾮分区表键上建⽴全局索引,普通表也建⽴全局索引alter table tab_a drop primary key;alter table tab_b drop primary key;create index idx_a_r_id on tab_a(r_id) ;create index idx_b_r_id on tab_b(r_id) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; -----ORA-14098: ALTER TABLE EXCHANGE PARTITION 中的表索引不匹配---6.在分区表的⾮分区表键上建⽴全局索引,普通表不建⽴全局索引drop index idx_b_r_id;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; ---成功-----7.在分区表的⾮分区键上建⽴本地索引,普通表不创建索引drop index idx_a_r_id;create index idx_a_r_id on tab_a(r_id) local;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; --ORA-14098: ALTER TABLE EXCHANGE PARTITION 中的表索引不匹配-----8.在分区表的⾮分区键上建⽴本地索引,普通表创建索引create index idx_b_r_id on tab_b(r_id) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; ---成功---9.在分区表的分区键上创建全局索引,普通表创建索引drop index idx_a_r_id;drop index idx_b_r_id;create index idx_a_r_pat on tab_a(r_pat) ;create index idx_b_r_pat on tab_b(r_pat) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; --ORA-14098: ALTER TABLE EXCHANGE PARTITION 中的表索引不匹配---10.在分区表的分区键上创建全局索引,普通表不创建索引drop index idx_a_r_pat;drop index idx_b_r_pat;create index idx_a_r_pat on tab_a(r_pat) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; ---成功-----11.在分区表的分区键上创建本地索引,普通表不创建索引drop index idx_a_r_pat;create index idx_a_r_pat on tab_a(r_pat) local;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; --ORA-14098: ALTER TABLE EXCHANGE PARTITION 中的表索引不匹配----12.在分区表的分区键上创建本地索引,普通表创建索引create index idx_b_r_pat on tab_b(r_pat) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation; ---成功------13.在分区表上的分区键和⾮分区键上创建全局索引,普通表上创建索引drop index idx_a_r_id;drop index idx_b_r_id;create index idx_a_r_id on tab_a (r_id,r_pat);create index idx_b_r_id on tab_b (r_id,r_pat);alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation;--报错---14.在分区表上的分区键和⾮分区键上创建全局索引,普通表不创建索引drop index idx_b_r_id;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation;---成功--15.在分区表上的分区键和⾮分区键上创建本地索引,普通表不创建索引drop index idx_a_r_id;create index idx_a_r_id on tab_a(r_id,r_pat) local;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation;---报错--16.在分区表上的分区键和⾮分区键上创建本地索引,普通表创建索引create index idx_b_r_id on tab_b(r_id,r_pat) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation;---成功---17.在分区表上的分区键和⾮分区键上创建本地索引a,同时⼜在⾮分区键上创全局建索引b,普通表对应字段上都创建索引drop index idx_a_r_id;drop index idx_b_r_id;create index idx_a_r_id on tab_a(r_id);create index idx_b_r_id on tab_b(r_id);create index idx_a_r_id_loc on tab_a(r_id,r_pat) local;create index idx_b_r_id_loc on tab_b(r_id,r_pat) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation;--报错---18.在分区表上的分区键和⾮分区键上创建本地索引a,同时⼜在⾮分区键上创建全局索引b,--在普通表对应的分区表上的本地索引a的字段上创建索引,同时分区表的全局索引对应的字段上不创建索引drop index idx_a_r_id;drop index idx_b_r_id;drop index idx_a_r_id _loc;drop index idx_b_r_id _loc;create index idx_a_r_id on tab_a(r_id);create index i idx_a_r_id_loc on tab_a (r_id,r_pat) local;create index idx_b_r_id _loc on tab_b (r_id,r_pat) ;alter table tab_a exchange partition p_value1 with table tab_b including indexes without validation;--成功----以上创建普通表的索引时,都是跟分区表的字段相对应。
oracle_重做日志文件--笔记
oracle_重做⽇志⽂件--笔记重做⽇志⽂件(redo log file)⽬录重做⽇志⽂件相关。
重做⽇志⽂件简介。
查询重做⽇志⽂件的信息。
⽇志切换。
管理⽇志⽂件组增删⽇志⽂件组。
增删⽇志⽂件成员。
归档与⾮归档模式。
⼀.重做⽇志⽂件相关。
Oracle引⼊重做⽇志的⽬的:数据库的恢复。
Oracle相关进程:重做⽇志写进程(LGWR)。
重做⽇志性质:联机⽇志⽂件,oracle服务器运⾏时需要管理它们。
相关数据字典:v$log ; v$logfile。
操作者权限:具有sys⽤户或system⽤户权限。
1.1重做⽇志⽂件的规划。
(于⽹络上收集)联机⽇志⽂件的规划原则如下:1:分散放开,多路复⽤。
⼀般会将同⼀组的不同⽇志成员⽂件放到不同的磁盘或不同的裸设备上。
以提⾼安全性。
2:把重做⽇志放在速度最快的硬盘上(即:⽇志所在的磁盘应当具有较⾼的I/O),⼀般会将⽇志⽂件放在裸设备上。
3:把重做⽇志⽂件设为合理⼤⼩:例如,增⼤⽇志⽂件⼤⼩可以加快⼀些⼤型的INSERT、UPDATE、DELETE操作,也能降低⽇志⽂件切换频率。
减少⼀些⽇志等待事件。
⼀般根据具体业务情况有所不同。
⼀般⽇志组⼤⼩应满⾜⾃动切换间隔⾄少15-20分钟左右业务需求4:ORACLE推荐,同⼀个重做⽇值组下的所有重做⽇志⽂件⼤⼩、成员个数⼀致.⼆.重做⽇志⽂件简介。
2.1重做⽇志重做⽇志⽂件⼜叫联机⽇志⽂件,记录了对数据库修改的信息,包括⽤户对数据修改和数据库管理员对数据库结构的修改。
2.2重做⽇志的作⽤。
它主要⽤于在oracle发⽣故障的时候和数据库备份⽂件配合恢复数据库。
⼀般来说,数据库故障丢失数据,有两种情况。
⼀是,因为停电或死机,脏块未写⼊磁盘,造成该数据丢失。
⼆是,磁盘损坏,数据全完蛋。
对应第⼀种情况,oracle会使⽤实例恢复,使⽤重做⽇志⾃动恢复数据,不需要⽤户⼲预。
没错,实例恢复,它是⾃动的。
对应第⼆种情况,便需要DBA使⽤备份,重做⽇志,归档⽇志来恢复数据了。
Oracle 学习笔记
Oracle数据库→表空间→用户→表表空间:包含表、视图、索引段:包含数据段、索引段、回退段、临时段数据块:是Oracle中最小的逻辑存储单元创建表空间:create tablespace rootspacedatafile 'rootfile' size 1000mautoextend on创建用户:create user root用户名rootidentified by root 密码rootdefault tablespace rootspace 默认表空间rootspacetemporary tablespace temp 临时表空间tempCREATE USER usernameIDENTIFIED BY password[DEFAULT TABLESPACE tablespace][TEMPORARY TABLESPACE tablespace];授予用户username【用户名】权限:·grant connect to username; CONNECT角色允许用户连接至数据库,并创建数据库对象·grant resource to username; RESOURCE角色允许用户使用数据库中的存储空间·grant create sequence to username; 此系统权限允许用户在当前模式中创建序列,此权限包含在CONNECT角色中·grant select on test to username; 允许用户查询 TEST 表的记录·grant update on test to username; 允许用户更新 TEST 表中的记录·grant all on test to username; 允许用户插入、删除、更新和查询TEST 表中的记录·alter user username identified by newpassword;用于修改用户口令·drop user username cascade; 删除用户撤销用户权限:Revoke connect from username;设置显示行长度:Set linesize 12;伪列rownum:Select rownum,name from table;………………………………>Rownum name1 haha2 xxxx--创建表tb_stucreate table tb_stu(stu_id char(12) primary key,stu_name varchar(50) not null,sex varchar(5),birthday date)--查询表tb_stuselect * from tb_stu;--在表中插入tb_stu记录insert into tb_stu(stu_id,stu_name,sex,birthday) values('123456789012','李四','男',to_date('2009-9-9','yyyy-mm-dd'));--事务提交commit;--事务回滚rollback;--根据stu_name查询所有信息select * from tb_stu where stu_name='田七'--根据stu_id删除一条记录delete from tb_stu where stu_id=123456789015--根据stu_id修改一条记录update tb_stu set sex='女',stu_name='梁朝伟'where stu_id='123456789013';--to_date 修改存入数据库中日期的格式update tb_stu set birthday=to_date('2009-10-5','yyyy-mm-dd') wherestu_id='123456789014'--to_date 查询数据库中日期按指定格式输出select* from tb_stu where birthday between(to_date('2009-10-1','yyyy-mm-dd')) and (to_date('2009-12-1','yyyy-mm-dd'))--虚列 rownum 数据库中实际并不存在对符合条件的查询结果的编号select rownum,stu_id,stu_name,sex,birthday from tb_stu where sex='男';--在查询结果中进行查询select * from (select rownum rn,stu_id,stu_name,sex,birthday from tb_stu where sex='男') where rn<3;--创建表tb_employeecreate table tb_employee(em_id number primary key,em_name varchar(50) not null,sex varchar(2),birthday date,sal number(20,2))--向表tb_employee中插入数据insert into tb_employee values(1,'梁朝伟','男',sysdate,11000000);--按字段升序排列(默认的为升序)select * from tb_employee where sal>200order by sal asc--按字段升序排列select * from tb_employee where sal>200order by sal desc--取别名:将查询的字段按一个特定的字段名输出select em_name,((sal-2000)*0.2) 税收from tb_employee where sal>2000;--联合字段,将查询出的多个字段或者是字符串连接在一起,以一个字段输出,用“||”连接select em_name||'的应该缴税: '||((sal-2000)*0.2) as税收from tb_employee where sal>2000order by税收desc;--将em_name为“梁朝伟”的记录的birthday字段,按指定的日期格式进行修改update tb_employee set birthday=to_date('1969-1-1','yyyy-dd-mm') where em_name='梁朝伟';--查询birthday字段不为当前系统时间并且不为空的值--不等于的三种书写方式(!=,^=,<>)select * from tb_employee whereto_char(birthday,'yyyy')^=to_char(sysdate,'yyyy');-- or 连接的多条件“或”查询select * from tb_employee where birthday is null or em_id=1;--between 3 and 5 查询条件为:大于等于3同时小于等于5select * from tb_employee where em_id not between3and5;--查询条件为:大于其中任意一个(只要大于其中的某一个就为满足条件)select * from tb_employee where em_id > any(1,3,5);--查询条件为:小于其中所有的(只有比括号中所有的数字都小才为满足条件)select * from tb_employee where em_id < all(3,5);--下划线表示任意的以个字符select * from tb_employee where em_name like'周__';-- % 表示任意多个字符select * from tb_employee where birthday like'%';--快速创建和tb_stu相同的表结构的表tb_stu_temp1create table tb_stu_temp1as select * from tb_stu where1=2;--将表tb_stu按条件查询的结果插入表tb_stu_temp1中insert into tb_stu_temp1(select * from tb_stu);--查询所有的表select * from tab ;--根据表名查询表select * from tab where tname='tb_stu';如果2个表达式主键管理的:主表——子表先插入主表的数据,然后子表删除:先删从表数据,然后主表。
ORACLE EBS 11.5.10 学习笔记( 系统安装篇)
ORACLE EBS 11.5.10 学习笔记(系统安装篇)作者:MIRRORZPM@Oracle EBS 11.5.10 学习笔记(系统安装篇)目录前言第一章硬件准备第二章软件准备第三章11.5.10 For Linux 安装第四章安装后的维护和问题解决附件:11.5.10 For Windows 安装失败经验谈ORACLE EBS 11.5.10 学习笔记(系统安装篇)作者:MIRRORZPM@前言从去年十月份对ERP 行业感兴趣开始,我就利用业余时间学习ERP 的方面的知识,我本身是做Oracle 开发和DBA 的,所以自然而然比较专注Oracle EBS 的学习,一直想找个Oracle EBS 软件,搭建一个学习环境。
后来终于在网上找到了Oracle EBS 11i 下载地址。
速度不错,利用4 天时间下载了11.5.10 for linux 和for windows 版本,并刻成光盘。
准备将两种版本都安装一下,学习学习安装经验。
直到昨天我才真正安装上了11.5.10 For Linux 版本,并打上了中文Patch. 然后想把自己安装11i 的一些笔记和经验整理一下,安装的时候,遇到很多的问题,都是随手一记,现在汇总起来,发觉遇到的问题还挺多,而且有好多在网上很难查到,相信各位安装过11i 的朋友有会遇到不少问题,而且很多是不同的问题。
于是我就想把自己的安装笔记和安装问题的心得,整理的比较正规一些放到网上与大家分享,不仅是安装,在我今后学习11i 的时候,我都会记录自己的学习经验和笔记,有时间就整理出来,然后放到网上,也希望各位在学习中也整理出自己的经验和笔记来让大家共享。
有不正确之处,请指出,共勉!在此非常感谢网上的那些无私奉献资料的朋友和itpub 上的各位朋友主要的一些参考资料:oracle erp 11_5_9 on redhat as3u1 系统安装手册.pdfOracle Application1155 Installation for Win2k.pdforacle applications installation update notes release 11i for linux x86 (11.5.10).pdf Oracle® ApplicationsMaintenance ProceduresRelease 11i (11.510)Oracle® ApplicationsMaintenance UtilitiesRelease 11i (11.5.10)Installing Oracle Applications: A Guide to Using Rapid Install Release 11i (11.5.10) ORACLE EBS 11.5.10 学习笔记(系统安装篇)作者:MIRRORZPM@第一章硬件准备这么大的软件,原先的老机器肯定带不动了,而且老主板还不认大容量硬盘,没办法,一狠心,除外设,显示器,机箱外,全都换了一遍。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.如何限定特定IP访问数据库可以利用登录触发器、cmgw或者是在$OREACLE_HOME/network/admin下新增一个protocol.ora文件(有些os可能是. protocol.ora),9i可以直接修改sqlnet.ora:增加如下内容:tcp.validnode_checking=yes#允许访问的iptcp.inited_nodes=(ip1,ip2,...)#不允许访问的iptcp.excluded_nodes=(ip1,ip2,...)2.如何穿过防火墙连接数据库这个问题只会在WIN平台出现,UNIX平台会自动解决。
解决方法:在服务器端的SQLNET.ORA应类似SQLNET.AUTHENTICATION_SERVICES= (NTS)NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)TRACE_LEVEL_CLIENT = 16注册表的HOME0加[HKEY_LOCAL_MACHINE]USE_SHARED_SOCKET=TRUE3.如何利用hostname方式连接数据库host name方式只支持tcp/ip协议的小局域网修改listener.ora中的如下信息(SID_DESC =(GLOBAL_DBNAME = ur_hostname) --你的机器名(ORACLE_HOME = E:\oracle\ora92) --oracle home(SID_NAME = orcl) --sid name)然后在客户端的sqlnet.ora中,确保有NAMES.DIRECTORY_PATH= (HOSTNAME)你就可以利用数据库服务器的名称访问数据库了4.dbms_repcat_admin能带来什么安全隐患如果一个用户能执行dbms_repcat_admin包,将获得极大的系统权限。
以下情况可能获得该包的执行权限:1、在sys下grant execute on dbms_repcat_admin to public[|user_name]2、用户拥有execute any procedure特权(仅限于9i以下,9i必须显示授权)如果用户通过执行如下语句:exec sys.dbms_repcat_admin.grant_admin_any_schema('user_name');该用户将获得极大的系统特权可以从user_sys_privs中获得详细信息5.在不知道用户密码的时候,怎么样跳转到另外一个用户执行操作后并不影响该用户?我们通过如下的方法,可以安全使用该用户,然后再跳转回来,在某些时候比较有用需要Alter user权限或DBA权限:SQL> select password from dba_users where username='SCOTT'; PASSWORD-----------------------------F894844C34402B67SQL> alter user scott identified by lion;User altered.SQL> connect scott/lionConnected.REM Do whatever you like...SQL> connect system/managerConnected.SQL> alter user scott identified by values 'F894844C34402B67';User altered.SQL> connect scott/tigerConnected.6.如何加固你的数据库要注意以下方面1. 修改sys, system的口令。
2. Lock,修改,删除默认用户:dbsnmp,ctxsys等。
3. 把REMOTE_OS_AUTHENT改成False,防止远程机器直接登陆。
4. 把O7_DICTIONARY_ACCESSIBILITY改成False。
5. 把一些权限从PUBLIC Role取消掉。
6. 检查数据库的数据文件的安全性。
不要设置成666之类的。
检查其他dba 用户。
7. 把一些不需要的服务(比如ftp, nfs等关闭掉)8. 限制数据库主机上面的用户数量。
9. 定期检查Metalink/OTN上面的security Alert。
比如:/deploy/security/alerts.htm10. 把你的数据库与应用放在一个单独的子网中,要不然你的用户密码很容易被sniffer去。
或者采用advance security,对用户登录加密。
11. 限止只有某些ip才能访问你的数据库。
12. lsnrctl 要加密码,要不然别人很容易从外面关掉你的listener。
13. 如果可能,不要使用默认1521端口7.如何检查用户是否用了默认密码如果使用默认密码,很可能就对你的数据库造成一定的安全隐患,那么可以使用如下的查询获得那些用户使用默认密码select username "User(s) with Default Password!"from dba_userswhere password in('E066D214D5421CCC', -- dbsnmp'24ABAB8B06281B4C', -- ctxsys'72979A94BAD2AF80', -- mdsys'C252E8FA117AF049', -- odm'A7A32CD03D3CE8D5', -- odm_mtr'88A2B2C183431F00', -- ordplugins'7EFA02EC7EA6B86F', -- ordsys'4A3BA55E08595C81', -- outln'F894844C34402B67', -- scott'3F9FBD883D787341', -- wk_proxy'79DF7A1BD138CF11', -- wk_sys'7C9BA362F8314299', -- wmsys'88D8364765FCE6AF', -- xdb'F9DA8977092B7B81', -- tracesvr'9300C0977D7DC75E', -- oas_public'A97282CE3D94E29E', -- websys'AC9700FD3F1410EB', -- lbacsys'E7B5D92911C831E1', -- rman'AC98877DE1297365', -- perfstat'66F4EF5650C20355', -- exfsys'84B8CBCA4D477FA3', -- si_informtn_schema'D4C5016086B2DC6A', -- sys'D4DF7931AB130E37') -- system/8.如何修改默认的XDB监听端口Oracle9i默认的XML DB把HTTP的默认端口设为8080,这是一个太常用的端口了,很多别的WebServer都会使用这个端口,如果我们安装了它,最好修改一下,避免冲突,如果不使用呢,就最好不要安装提供三种修改的方法1.dbca,选择你的数据库,然后Standard Database Features->Customize->Oracle XML DB option,进入这个画面你应该就知道怎么改了。
2.OEM console,在XML Database 的配置里面修改3.用oracle提供的包:-- 把HTTP/WEBDAV端口从8080改到8081SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081))/-- 把FTP端口从2100改到2111SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),'/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111))/SQL> commit;SQL> exec dbms_xdb.cfg_refresh;-- 检查修改是否已经成功SQL> select dbms_xdb.cfg_get from dual;9.怎么捕获用户登录信息,如SID,IP地址等可以利用登录触发器,如CREATE OR REPLACE TRIGGER tr_login_recordAFTER logon ON DATABASEDECLAREmiUserSid NUMBER;mtSession v$session%ROWTYPE;CURSOR cSession(iiUserSid IN NUMBER) ISSELECT * FROM v$sessionWHERE sid=iiUserSid;BEGINSELECT sid INTO miUserSid FROM v$mystat WHERE rownum10.程序报错ORA-01555: snapshot too old: rollback segment number 148 with name"_SYSSMU148$" too small可以查询错误原因oerr ora 01555得到如下信息01555, 00000, "snapshot too old: rollback segment number %s with name \"%s\" too small"// *Cause: rollback records needed by a reader for consistent read are// overwritten by other writers// *Action: If in Automatic Undo Management mode, increase undo_retention// setting. Otherwise, use larger rollback segments说明一个事务的执行时长超过了系统设定的最大值.SQL> show parameters undo比如NAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string AUTOundo_retention integer 16200undo_suppress_errors boolean FALSEundo_tablespace string UNDOTBS2则说明是16200秒.11.如果你要用ultraEdit-32编辑oracle脚本,可以设置对关键字不同亮度的显示。