安装卸载
安装
新手不建议安装发布不久的最新版本,一来新版本可能有一些新特性,但是网上相关的文章较少,入坑概率很大,老手尚需时间来适应,新手肯定更觉得难以上手了;二来旧版本相对比较稳定,各种文档丰富,常见BUG都有比较成熟的应对方法;三是要看使用环境了,兼容性是考虑重点,客户端和服务器端版本要尽量一致,这里的问题实在太多,几百M都讲不完,说多了都是眼泪。
Windows下安装教程: Oracle 12c Windows安装、介绍及简单使用(图文)
- 网上这个教程以Oracle 12c为例,其他版本安装过程都差不多,注意安装位置自己设置一下(只要设置Oracle基目录即可,其他目录会相应改变),字符集选UTF-8。
Linux下安装教程:todo
安装过程中出现的问题
-
先决条件检查有失败内容
查看失败内容,如果是“预期值:N/A,实际值:N/A”这样的,是因为操作系统未开启默认共享,导致Oracle无法检查环境的可用性 ,这种情况直接点击右上角的全部忽略,就可以进行下一步安装了;如果确实某方面配置不达标,就不建议继续安装了,装个PL/SQL连服务器上的库玩就好了。
卸载
新手导错库或者初始化配置错误不知道还原的方法怎么办,简单,卸载重装。^_^ 装装卸卸多了,就变成熟手了。这个有现成的教程,亲测好用:
Windows下卸载:彻底的卸载干净oracle 11g
Linux下卸载:todo
常用目录结构
了解Oracle常用目录结构,将大大提高数据库管理与维护的工作效率 。这里以oracle 11g为例。
. # 主目录
│─ cfgtoollogs # 存放当运行dbca,dbua,emca,netca等图形化配置程序时的log
│─ flash_recovery_area # 存储并管理与备份和恢复有关的文件
│─ oradata # 数据库文件缺省存储目录
│ │─ dbf文件 # 对应数据库中每个表空间
│ │─ ctl文件 # 控制文件
│ └─ log文件 # 对应重做日志文件组及其成员
└─ product # 客户端主目录
└─ 11.2.0\dbhome_1
│─ bin # 主要包含用于数据库管理的各种命令
│─ css # 与Oracle Cluster Synchronization服务有关的文件
│─ database
│ └─ SPFILEORCL.ORA # 服务器参数文件
│─ dbs # 存放数据库服务器端的参数文件Spfile
│─ demo # 存放数据库实例模式的脚本等
│─ install # 用于存储ORACLE安装后的端口号,iSQL*Plus以及Enterprise Manager Database Control启动并登录的方式等,如该路径下的portlist.ini
│─ network/admin # 有关监听器listener.ora和sqlnet.ora以及tnsnames.ora等
└─ sysman/config # 用于与Oracle Enterprise Management有关的端口管理等
└─emkey.ora # 加密密钥
监听/别名配置
Oracle只有在服务器端配置监听是必须的,在客户端可以不用配置;而且一般服务器端都是监听本地,默认配置都有,不需要另外配置;只有监听其他地址才需要另外配置。网上很多配置监听的教程都是修改\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\目录下tnsname.ora文件 ,其实是错误的,监听配置文件是同一目录下listener.ora文件,下面三篇文章感觉写的比较深入,但没有具体实践对比过。
那么tnsname.ora文件是做什么用的呢,其实这是别名配置文件,类似于hosts文件,提供tnsname到主机名或者ip的对应。
配置监听和别名的格式是一样的,添加如下:
TEST = --别名
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.1 )(PORT = 1521)) --地址及端口号
(CONNECT_DATA =
(SERVICE_NAME = orcl) --实例名称
)
)
cmd命令
前提是本地安装了Oracle客户端,打开cmd,输入命令。由于帮助文档是中文的,所以不展开。
-
tnsping
:诊断连接,查看帮助tnsping
,地址可以使用别名。 -
exp
:导出,查看帮助EXP HELP=Y
,具体参见数据库迁移内容。 -
imp
:导入,查看帮助IMP HELP=Y
,具体参见数据库迁移内容。 -
sqlplus
:链接,查看版本及帮助sqlplus -H
。链接成功后命令提示符变成SQL>
,此后可以输入正常SQL语句,记得句末带;
,正常退出使用quit
,其他输错密码或陷入不可描述状态退出可使用Ctrl+C
,或者直接关闭终端。
其他命令还有很多,都在\oracle\product\11.2.0\dbhome_1\BIN\目录下,Windows下可执行命令为exe文件。
数据库初始化
数据库初始化主要分三步:创建表空间,建立用户和用户授权。
创建表空间
在创建表空间之前,首先要知道什么是表空间,并且要清楚临时表空间、永久表空间、默认表空间、UNDO表空间之间的区别,这里有几篇文章可以好好看下:
-
这里需要注意的是,若数据库没有临时表空间,在创建正式表空间之前,应先建一个临时表空间。
概念掌握之后,在实际创建表空间之前,最好先查询一下,确保要使用的名称没有被使用:
--查看已有的表空间
SELECT * FROM v$tablespace;
--查看详细数据文件
SELECT file_name,tablespace_name FROM dba_data_files;
--查看表空间使用情况
SELECT A.TABLESPACE_NAME AS TABLESPACE_NAME,
ROUND(A.BYTES/(1024*1024*1024),2) AS "TOTAL(G)" ,
ROUND(B.BYTES/(1024*1024*1024),2) AS "USED(G)" ,
ROUND(C.BYTES/(1024*1024*1024),2) AS "FREE(G)" ,
ROUND((B.BYTES * 100) / A.BYTES,2) AS "% USED" ,
ROUND((C.BYTES * 100) / A.BYTES,2) AS "% FREE"
FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;
要创建表空间,首先要使用有CREATE TABLESPACE权限的用户,创建表空间语法如下:
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace_name
DATAFILE datafile spec | TEMPFILE tempfile spec
[MINIMUM EXTENT minimum extent size]
[BLOCKSIZE blocksize]
[[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]
[LOGGING|NOLOGGING]
[FORCE LOGGING]
[ONLINE|OFFLINE]
[EXTENT MANAGEMENT DICTIONARY|LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]
[FLASHBACK ON|OFF]
语法看起来有点复杂,但是实际应用中并不是每个选项都需要配置,你只需知道能配置哪些就好,下面举一些栗子:
--创建临时表空间
CREATE TEMPORARY TABLESPACE TEMP
TEMPFILE '/u02/oradata/temp.dbf'
SIZE 50m
AUTOEXTEND ON
NEXT 50m MAXSIZE 20480m
EXTENT MANAGEMENT LOCAL;
--创建单个表空间
CREATE TABLESPACE TEST --名称
DATAFILE 'd:\work\oracle\oradata\test\TEST.DBF' --存储位置
SIZE 2048M --初始大小
AUTOEXTEND ON --自动增长
NEXT 32M MAXSIZE UNLIMITED --每次递增32M
EXTENT MANAGEMENT LOCAL; --本地管理
--创建多个表空间
CREATE TABLESPACE TS_IMAGEDATA
LOGGING
DATAFILE 'E:"ORACLE"ORADATA"DATA_01.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_02.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_03.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M,
'E:"ORACLE"ORADATA"XL"DATA_04.DBF' SIZE 2000M REUSE
AUTOEXTEND ON
NEXT 51200K MAXSIZE 3900M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
--创建UNDO表空间
CREATE UNDO TABLESPACE ts_undo01
DATAFILE '/data/ts_undo01.dbf'
SIZE 50000M REUSE
AUTOEXTEND ON;
建立用户
在建立用户之前,最好也先查询一下:
SELECT username FROM dba_users;
建立用户当然也要使用有建立用户权限的账户,语法。
实例:创建一个名为maxsu
的新用户,密码passwd1234
,默认表空间为tbs_perm_01
,配额为20MB
,使用tbs_temp_01
临时表空间。
CREATE USER maxsu
IDENTIFIED BY passwd1234
DEFAULT TABLESPACE tbs_perm_01
TEMPORARY TABLESPACE tbs_temp_01
QUOTA 20M ON tbs_perm_01;
Oracle12中建立本地用户需要在用户名前加
C##
,我试用了一下就卸载了。T_T
授权用户
当然首先了解下用户权限相关概念,初始化这里的授权一般只是授予用户的系统权限。
系统权限分为:
- DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。(此权限慎授)
- RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
- CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
系统权限只能由DBA用户授出或收回:sys, system(最开始只能是这两个用户)
普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。
语法:
--系统权限授权
GRANT CONNECT, RESOURCE, DBA TO user1 [,user2]...;
--系统权限传递:增加WITH ADMIN OPTION选项,则得到的权限可以传递。
GRANT CONNECT, RESOURCE TO user1 WITH ADMIN OPTION;
--系统权限回收
REVOKE CONNECT, RESOURCE FROM user1;
删除表空间和用户
--删除表空间
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
--删除用户:加上CASCADE则将用户连同其创建的东西全部删除
DROP USER user_name CASCADE;
导出/导入数据
前提:我们导出/导入数据,肯定是要通过Oracle自带的可执行程序来完成数据的导入导出工作,所以要安装Oracle客户端;同时导出/导入的用户必须要有导出/导入的权限才行。
导出/导入一般有两种方法:
1. 以cmd命令操作符导入导出
导出/导入的基本语法如下:
EXP user/passwd@dbname KEYWORD=value...
IMP user/passwd@dbname KEYWORD=value...
具体的KEYWORD
可以通过EXP/IMP HELP=Y
查看,这里有几个注意事项:
-
@dbname
为实例名称,远程服务器一般是@IP/实例名
,本地可以省略IP,可以使用别名。 -
full=y
表示全库(是整个数据库)导出/导入(慎用!),这个需要有DBA权限的用户,如果只要导出某个用户的所有数据,请不要加上full=y
。 - 如果导入的表已经存在,直接导入会报错,加上
ignore=y
,对该表就不进行导入 ;如果是表数据不全,可以删掉该表再加上关键字tables=...
重新导入。 - 如果使用sys账户链接导出某个用户数据,使用
exp "'sys/passwd@orcl as SYSDBA'" file=d:\test.dmp owner=ts
,注意"'sys/passwd@orcl as SYSDBA'"
这里用了两组引号,如果只用一组引号,需要用\
转义:exp \"sys/passwd@orcl as SYSDBA\" file=d:\test.dmp owner=ts
。 - 如果使用
KEYWORD=(value1,value2,...,valueN)
,括号也需要转义:KEYWORD=\(value1,value2,...,valueN\)
。 - 上述2点其实就是括号和引号需要转义。
- 如果导入的用户和导出的用户不一致,记得加上
fromuser
和touser
。 - 导出/导入最好最好加上
log
选项,方便查看过程中遇到的错误,如果有哪张表有问题,可以另外单独处理。最可怕的就是你不知道库没导全。
2. 用PL/SQL Developer工具导出/导入
PL/SQL连上数据库后,也可以进行数据库的导出/导入,但是这里要注意PL/SQL的导出有两部分内容:
- tools->export user objects:导出的.sql文件是建表语句(包括存储结构、函数、包等内容,不包含表数据,不包含dblink)
- tools->export tables:导出的是表结构和表数据(只有表,不包含其他内容)
注意导出时要选择导出的用户。
所以要完整的导出用户数据,必须将user objects和tables都导出;完整的导入先导入user objects,再导入tables,如果还有dblink,需要手动复制粘贴导入(需要dblink链接的数据库密码)。
PL/SQL export tables有三种方式:
-
Oracle导出:其实就是用Oracle客户端的EXP导出,跟cmd导出指定表是一样的,只是不用输命令,但是这里只能用本地客户端的EXP命令,如果本地Oracle版本和服务器版本不一致,可能会有兼容性问题。
-
SQL插入:导出的是SQL语句,通用性比较好,方便查看或修改。缺点是日志要全部导出操作完成才能查看,如果表数据量大会有卡死的错觉;而且效率似乎比用EXP低,适合小数据量导入导出。勾选
删掉表
选项,导入时会在插入表数据前先删掉表,然后重建表插入数据,好处就是如果已存在的表有数据就会直接替换掉。如果表包含有CLOB等类型字段的话,是无法导出sql文件的。导出时会有报错提示,可以把这个表单独拿出来用Oracle导出。
-
PL/SQL Developer:用PL/SQL自带工具导出/导入,导出为.pde格式 ,效率最低(没试过),好处是不需要安装客户端,应该适合少量数据。
总结
从效率上来说,用EXP/IMP最好,最好的导出/导入方法是在服务器本地导出/导入,这样的好处一是导出/导入的客户端版本和服务器版本一致,不存在兼容性问题(只是单纯的导出或者导入操作不存在兼容性问题,如果导出的服务器和导入的服务器版本不一致,还是有可能有兼容性问题);二是服务器本地导出速度更快;三是个人电脑关机不影响服务器操作。而且使用EXP/IMP比较方便,一个命令就解决了,但是遇到兼容性问题不太好处理。
从通用性来说,用PL/SQL的SQL插入比较好,而且不容易出现兼容性问题,即使出现了,直接修改SQL语句也比较方便。但是使用PL/SQL容易导不全,需要仔细检查。
如果数据量大的话,建议不要一次性导出/导入,分开导出/导入更安全。
数据导出/导入完整流程
- 了解要导出和导入的数据库情况,包括Oracle版本,用户权限,需要导出的数据的大致大小,有无特殊数据类型,有没有依赖其他库的东西,dblink链接密码等,要是能确定具体导哪些表哪些存储过程最好,这样一是导出数据量比较小,二是可以排除其他无效数据的影响;
- 导出时对照HELP文档检查导出语句,确保需要配置的KEYWORD都有且正确,记得加上日志选项,导出完毕查看日志,若有报错可能需要单独处理;
- 导入时按照上面初始化内容:建立表空间,建立用户并授权,检查导入语句正确无误后开始执行导入,若导入的用户名和导出的用户名不一致,需要加上
fromuser
和touser
;导入完毕查看日志,若有报错可能需要单独处理; - 检查数据是否正确导入,是否有遗漏项;没有问题后编译无效对象,PL/SQL有个按钮直接就能执行,编译完毕后如果仍存在无效对象,检查原库对象是否有效,若是也无效就不用管了(毕竟可能有一些遗留问题),否则需要排查问题;
- 整理导出导入过程相关资料,这样下一次重复工作就变得简单了。
曾经遇到的问题
-
导出报错:数据库链接口令无效
数据库链接指的就是dblink,这个问题只发生在EXP下,一般是导出客户端版本低于服务器端,解决方法一是在服务器本地导出避开兼容性问题;二是另外备份好dblink,删除后再导出,导出后记得恢复。
-
错误使用
full=y
导出:导入时各种报错这个只有新手才会犯的错误,搞清楚概念就不会发生了。
OEM创建
todo
question 1:oem是个what?
question 2:why should we build oem?
question 3:how to?
Comments