Oracle学习札记(未完待续)
前言
一个好的技术只能决定你的开始,不能决定你的以后。
技术+项目管理+CMM+心理学+会计+金融。
第一年:做2~4个项目,第二年:编写一些文档(离项目经理不远了),第三年:有一定的管理能力的话就成为经理了,开始进行一些业务上的设计。
1、大型数据库DB2(只限制于IBM的产品),oracle。
2、Oracle 8/8i:i表示的是internet,意味着oracle开始向网络发展,但是这个版本属于过渡版本。
3、Oracle 9i:是现在使用最广泛地版本,是Oracle的升级版,共3CD。
4、Oracle 10g:是一个过渡性的产品,g表示的网格就算,700M。
5、Oracle 11g:是一个完整性的产品,1.8G。
6、安装时,关掉防火墙和网络!
7、全局数据库名我设的为orcl,SID为orcl
8、密码是oracleadmin
9、主要有四个用户:
超级管理员:sys/change_on_install
普通管理员:system/manager
普通用户:scott/tiger(scott是oracle创始人之人,他有一只叫做“tiger”的猫)
大数据用户:sh/sh
10、在安装过程过,一定要选上“创建带样本方案的数据库”,则以后不会出现大数据用户(实验用)。
11、最好将 oracle服务改成手工服务,否则启动电脑速度变慢。
12、有两个重要的服务:
监听服务: OracleOraDb10g_home1TNSListener
如果有程序要操作数据库,或者是一些远程的客户端要连接数据库则必须启动此服务;
数据库的实例服务:OracleServiceORCL
保存数据库的具体信息的服务,每一个数据库都有一个数据库实例(服务)。
命名规则:OracleServiceXXX,XXX是配置的数据库名称(严格来讲是SID名称)。
13、卸载:
a.直接运行卸载程序
b.删除硬盘上的残留文件,如果删除不掉则先进入到安全模式下删除;
c.同时删除注册表中所有与Oracle有关的配置项;
如果没有正常的安装成功,则必须进行卸载,直接用b和c就可以完成卸载。
14、Oracle监听服务经常出现的错误
错误一:注册表使用了优化软件被删除了相关项
对于每一个系统服务实际上都会在注册表中有所保存;
运行-> regedit->进入注册表编辑器。搜索OracleOraDb10g_home1TNSListener,右击->复制项名称-》得到监听注册项“HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\OracleOraDb10g_home1TNSListener”
里面有一个“ImagePath”的选项,这个选项有可能会在使用优化软件的时候被自动的删除,如果被删除的话则应该建立一个新的项。名称为“ImagePath”,数值数据为“D:\oracle\product\10.2.0\db_1\BIN\TNSLSNR”,BIN里Oracle的可执行程序,TNSLSNR是监听的启动程序。 TNSLSNR.exe 也可能是恶意软件所伪装,尤其是当它们存在于 c:\windows 或 c:\windows\system32 目录,所以优化器有可能把它优化掉!!!
错误二:网络环境的改变
在Oracle 10g里面,如果网络的环境改变了,有可能原始的网络就无法正常工作,此时就必须手工进行网络配置的修改。网络环境的改变最多就是电脑名称的修改。这个问题11g版本可以自动进行重新配置,但是10g或者以前的版本,只能手工修改。否则监听服务无法正常启动,因为网络环境发生改变了。必须修改网络配置文件:
配置文件路径:D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN
有两个配置文件:listener.ora和tnsnames.ora(可以用记事本打开),把两个文件里的HOST的值改为修改过的计算机名称,之后再重新启动监听服务。但是以后如果使用程序连接Oracle 10g的话,则以上的配置有可能还是不能正常访问数据库,此时可以进入到第二步操作,进行数据库名称的注册,配置和移动工具-》Net Manager,-》监听程序-》LISTENER-》数据库服务。按照图1.保存。
保存以后则在listener.ora中多出下列:
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = ORCL)
)
在BIN在也有一个监听状态的的检查命令LSNRCTL.EXE
打开后运行如图2
15、对于Oracle数据库操作主要使用命令行方式,而所有的命令都使用sqlplus完成,sqlplus有两种形式:
a:dos风格,sqlplus.exe
b:windows风格,sqlplusw.exe
直接在“运行”中敲入“sqlpus”进入dos,“sqlplusw”进入window。
在sqlplus中会有折行、折页问题,在sqlplus中也有折行、折页问题,但是可以调整,所以sqlplusw用得较多。
“主机字符串”为空时表示找到默认的实例(orcl数据库),如果这里有多个数据库的话,这里就写上数据库的名称。
16、sqlplusw.exe也有折行,和折页的问题
但是可以通过两个格式化命令进行调整:
a.设置每行显示的记录长度:set linesize 300;
但是有折页(有两行字段名),默认打印13行,
b.设置每页显示的记录长度:set pagesize 30;
虽然sqlplusw显示上方便一些,可是对于命令的编辑上却不是很方便。如果正常的操作,命令写错了,则肯定能使用方向键移到错误的位置上进行修改。但是在sqlplusw中,方向键只能控制屏幕的移动。所以在sqlplusw中提供了ed和@指令(在sqlplus中也可以使用),可以进行记事本的调用和执行。
a.使用ed,调用记事本程序。
在命令行输入ed a,则会弹出
选择是, 但是使用ed打开记事本之后,sqlplusw窗口会进入到阻塞状态,无法使用。
b.使用@执行:@a。
但是在winidows中,由于提供了许多的方便的编辑软件,所以一般会在外部编辑程序,例如,在D盘上建立一个demo.txt的文件,里面有sql语句。要读取键盘上的文件,则必须写上完整的路径:@D:\demo.txt。而且如果这个文件的后缀是*.sql,则不用输入文件后缀(demo.sql),输入:@d:\demo或者@d:demo。
我个人的爱好是:在编辑软件中写sql,复制、粘贴就行了。
17、sqlplus中set linesize 300无效(因为dos窗口的宽度不变),set pagesize 30有效(长度可变)。
18、
在一个数据库中,会有许多的用户(现在已知的是四个用户),这每一个用户下都会有多张自己的数据表,所以要想查看所有的数据表,则可以使用如下的命令:
select* from tab;
19、
show user用于显示当前的登录用户。
20、
直接进行用户的登录切换
conn 用户名/密码[as sysdba/sysoper] 例如:conn sys/change_on_install as sysdba;
“[]”,为可选的,sysoper为普通操作者。
但是,一旦使用了sys连接之后,则无法直接查询emp表数据。 对于每张表,都有其属于的用户,所以一张表的完整名称是“用户名.表名称”或者说是“模式名.表名”。所以要想访问其他用户的表,应该加上用户名,如:select*from scott.emp。
21、
但是一旦使用了超级管理员登陆的话 ,可以通过手工的控制数据库实例的打开和关闭,
a.关闭数据库实例命令:shutdown immediate
一旦关闭以后用户无法直接连接到数据库,
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
此时可以在sqlplusw中,先使用“/nolog”登录,之后使用管理员登录,conn sys/change_on_install as sysdba,然后启动数据库实例“startup”。
22、
sqlplusw也可以调用操作系统命令,使用“host”作为前缀。例如:host copy d:\demo.sql d:\hello.txt。
23、
查看所有表名称
select*from tab;
24、
查看表结构
desc 表名称
25、
number(2):由两位数字组成;
varchar2(14):最多由14个字符组成;
date:日期类型
number(7,2):两位小数,五位整数,共7位
number:数字
26、
重复数据:指的是一行中的每列的记录都重复,才叫重复数据。
select distinct ename,job from emp;
27、
改变列的名字:
select ename,sal*12 nianxin from emp;
28、
四则运算
select ename,(sal+200)*12+300 nianxin from emp;
29、
使用“||”连接查询的字段
select empno||','||ename from emp;
由于“,”属于原样输出的字符串,所以必须使用单引号括起来,在sql语句中,单引号表示字符串。
加上表头“雇员编号和名字”
select empno||','||ename 雇员编号和名字 from emp;
30、
“||”举例
select '雇员编号是:'||empno||'的名字是'||ename||'基本工资是:'||sal||',职位是'||job||'。' 雇员信息 from emp;
加上表头“雇员信息”
31、
select*from emp where (job='CLERK' or job='SALESMAN') and sal>1200;
32、
下面的效果是一样的
select*from emp where job<>'CLERK';
select*from emp where job!='CLERK';
select*from emp where not job='CLERK';
33、
between and 也对日期起作用
select*from emp where HIREDATE between '01-1月-1982' and '31-12月-87';
34、
只要列值中没有任何形式的值就是null。
35、
关于not in的问题
a.正常情况下
select*from emp where empno in(7369,7566,null);
如果在in操作符中使用了null,则不会影响查询。
b.not in
select*from emp where empno not in(7369,7566,null);
不会有任何的查询结果返回!,以后会讲解为什么not in 中不能出现null,而且:如果not in中出现了null就表示的是查询全部数据。
36、
模糊查询
a.
select*from emp where ename like '%A%';
查出带有字母“A”的雇员。
b.%%
在使用like子句的时候有一个最大的注意点:如果不设置任何关键字的话('%%')则表示查询全部记录:
这个特点可以节约很多的代码,一定要记住!!!
37、
order by一定是放在where之后.
升序asc(默认),降序desc。
下面效果是一样的:
select*from emp order by sal;
select*from emp order by sal asc;
38、
按照工资由高到低,如果工资相同,则按照雇佣日期由早到晚排序:
select*from emp order by sal desc,hiredate asc;
39、
每种数据库系统都有自己的操作函数,即单行函数;
单行函数主要分为以下五类:字符函数、数字函数、日期函数、转换函数、通用函数;
40、
- 1楼linwaterbin7分钟前
- 技术+项目管理+CMM+心理学+会计+金融nn这话实在