Oracle数据库基础(安装、基础命令)
以下都是以Oracle 11g为例,我也不知道别的版本有没有区别 其实顺了一遍还是有点乱,之后如果发现错误会回来改的!
一、安装
win下安装 Oracle 11g 教程:
https://www.hangge.com/blog/cache/detail_2817.html
win10安装报错:https://blog.csdn.net/W_Y_L_/article/details/82702444
注意安装包下载好 一定要全解压到一个文件里面,不然安装时候会报错说少文件
字符集
选择字符集时一定要注意,不一定选Unicode,ZHS16GBK也可以
选好字符集后如果显示有问题还需要修改系统环境变量
https://blog.csdn.net/weixin_30919235/article/details/96855227
ps.如果字符集错了,导入备份时候会报这个错
A-02374: conversion error loading table "schema名"."表名"
ORA-12899: value too large for column xxxx (actual: 60, maximum: 50)
ORA-02372: data for row: xxxx : 0X'xxxxxxxxxxxxxxxxxxxx'
连接使用工具 PL/SQL Developer
PL/SQL Developer下载安装见以下博客
https://blog.csdn.net/qq_34602804/article/details/114218054
如果需要远程连接客户端的话,照着这篇博文https://blog.csdn.net/weixin_42637495/article/details/106601011
1.修改安装目录
app/……/product/11.2.0/dbhome_1/network/admin/
下的listener.ora
和tnsnames.ora
的localhost
2.开启防火墙对应端口
关闭Oracle服务
要在Windows的服务中关闭Oracle实例服务
+Oracle的监听服务
https://www.php.cn/oracle/451001.html
(打码那部分就是Oracle实例的名字)
像是做删除实例之类的操作
二、Oracle基础概念
可以再看看:https://blog.csdn.net/wanghai__/article/details/4683983
Oracle是一种关系型的数据库。
关系型的数据库都有这几个概念:database,schema,table,user
我在知乎看到一个大佬的比喻,很形象
https://www.zhihu.com/question/20355738/answer/230743815
如果把
database
看作是一个仓库,仓库很多房间(schema),一个schema
代表一个房间,table
可以看作是每个房间中的储物柜,user
是每个schema的主人,有操作数据库中每个房间的权利,就是说每个数据库映射user有每个schema(房间)的钥匙。
oracle一个服务就是一个库,库下面是表空间,一个表空间可以有几个不同的数据文件,然后就是表。oracle里的表,每个用户有个缺省的表空间,也就是说这个用户建的表会在这个表空间里面:
a用户建的表ta,用a用户登录可以直接select * from ta
这样访问,而其他用户(有权限的)要用select * from a.ta
这样来访问。
1.database
Oracle在数据库层面,有几个难分区的概念:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名
。
在安装11g的时候,如果选择了“创建和配置数据库”
,典型安装配置时会让我们填一个全局数据库名:
这篇博客这样解释Oracle9i https://www.cnblogs.com/ccption/p/3664201.html
数据库名
就是数据库的名称标识,如myOracle, 这种叫法一般只适用于单机;
全局数据库名
就是数据库处于一个网络中的名称标识。
比如数据库宿主机的域为mydomain, 则数据库的全局数据库名为myOracle.mydomain; 实际上myOracle和myOracle.mydomain两者指的是同一个数据库. 即:全局数据库名 = 数据库名+"."+网络位置(宿主机所在的域)
再联系这一篇博文:https://cloud.tencent.com/developer/article/1683759
所以我觉得在Oracle11g中,这里的全局数据库名其实是 创建的实例的名字,也是数据库名
再来写一下我现在对这几个名词的理解:
1) 数据库名
DB_NAME
数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的
查询当前数据名
方法一:select name from v$database;
方法二:show parameter db_name
方法三:查看参数文件。
2) 实例名 & ORACLE_SID
instance_name
在一般情况下,数据库名和实例名是一对一的关系,但如果在oracle并行服务器架构(即oracle实时应用集群)中,数据库名和实例名是一对多的关系。
查询当前数据库实例名
方法一:select instance_name from v$instance;
方法二:show parameter instance_name
方法三:在参数文件中查询。
show parameter instance
只能在cmd命令行用
instance_name
是oracle数据库参数。而ORACLE_SID
是操作系统的环境变量,存于注册表。ORACLE_SID必须与instance_name的值一致(SID = Oracle实例,SID是Oracle实例的唯一名称标识)
数据库域名:db_domain
全局数据库名:GLOBAL_NAME 全局数据库名=数据库名+数据库域名
服务名:SERVICE_NAME
2.schema+user
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
A user is a name defined in the database that can connect to and access objects.
Schemas and users help database administrators manage database security.
schema是数据库对象的集合,这个集合包含了各种对象如:tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。
Schema是基于用户的,在数据库中创建一个用户,就创建了一个和用户名相同的Shema。Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决。
也就是说一个用户一般对应一个 schema,该用户的schema名等于用户名,并作为该用户默认schema。
关于用户及其权限
dba和sysdba的区别:https://blog.csdn.net/huoshuyinhua/article/details/76819827
3.tablespaces(表空间) 和 table
表空间:
这是个逻辑概念,本质上是一个或者多个数据文件的集合。
数据文件:
具体存储数据的物理文件,是一个物理概念。
一个数据文件只能属于一个表空间,一个表空间可以包含一个或多个数据文件。一个数据库由多个表空间组成,一个表空间只能属于一个数据库。
三、文件的路径
1.orapw密码文件
密码文件在这个目录下app/电脑用户/product/11.2.0/dbhome_1/database/
(打码的都是我的数据库名)
里面放的是sys权限的用户,sys用户以sysdba登陆之后就会存在里面
https://blog.csdn.net/hongkaihua1987/article/details/51605647
2.参数文件
https://www.cnblogs.com/xqzt/p/4832597.html
dbs和database路径都看一下,9i和11g不一样
pfile: 初始化参数文件(Initialization Parameters Files),Oracle9i之前,ORACLE一直采用pfile方式存储初始化参数,pfile默认的名称为“
init+例程名.ora
”文件路径:/data/app/oracle/product/12.1.0/dbhome_1/dbs
,这是一个文本文件,可以用任何文本编辑工具打开。
参数文件init.ora记录了控制文件的位置
spfile:服务器参数文件(Server Parameter Files),从Oracle9i开始,Oracle引入了Spfile文件,spfile默认的名称为“
spfile+例程名.ora
”文件路径:/data/app/oracle/product/12.1.0/dbhome_1/dbs
以二进制文本形式存在,不能用vi编辑器对其中参数进行修改,只能通过SQL命令在线修改。
3.数据文件
数据文件的详细信息记载在控制文件中
查看数据文件
select name from v$datafile;
三、命令
可以看w3cschool的教程
https://www.w3cschool.cn/oraclejc/
1.连接/登陆
sqlplus有几种登陆方式 比如:
C: > sqlplus "/as sysdba" --以操作系统权限认证的oracle sys管理员登陆
C: > sqlplus /nolog --不在cmd或者terminal当中暴露密码的登陆方式
SQL> conn /as sysdba
SQL> conn sys/password as sysdba
C: > sqlplus scott/tiger --非管理员用户登陆
C: > sqlplus scott/tiger@orcl --非管理员用户使用tns别名登陆
C: > sqlplus sys/password@orcl as sysdba --管理员用户使用tns别名登陆
C: > sqlplus --不显露密码的登陆方式
Enter user-name:sys
Enter password:password as sysdba --以sys用户登陆的话 必须要加上 as sysdba 子句
2.基础信息
查询服务端字符集
select userenv(‘language’) from dual;
用户
创建用户
SQL> CREATE USER [用户名] IDENTIFIED BY [密码];
赋予用户DBA权限
SQL> GRANT CONNECT, RESOURCE, DBA TO [用户名];
查看当前用户
SQL> show user
3.建数据库,表空间和表
https://www.cnblogs.com/chanshuyi/p/3821023.html
1 建立数据库最简单的是使用DBCA(Database Configuration Assistant)
详细步骤+命令行创建:https://blog.csdn.net/hyh17808770899/article/details/106433160
2 表空间建立
--创建临时表空间
create temporary tablespace test_temp
tempfile 'E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
--创建数据表空间
create tablespace test_data
logging
datafile 'E:\oracle\product\10.2.0\oradata\testserver\test_data01.dbf' //数据文件名(包含全路径)
size 32m //表空间大小
autoextend on //设定数据文件自动扩展
next 32m maxsize 2048m
extent management local;
--创建用户并指定表空间
create user username identified by password
default tablespace test_data
temporary tablespace test_temp;
-- 查询当前用户拥有的所的有表空间
select tablespace_name from user_tablespaces;
3 创建表
create table 表名
(
name varchar(12),
age varchar(12)
)
tablespace 表空间名;
-- 查看某表空间下的所有表
select tablespace_name, table_name from user_tables
where tablespace_name = '表空间名';
注意:上面的’表空间名’一定要大写。即使你在创建表空间的时候输入的表空间名是小写的,也还是要大写。因为ORACLE在存储表空间的时候自动将名字转化成大写了。
4.备份与恢复
利用自带的expdp和impdp(备份出来的文件如果用file
命令看是data)
恢复备份
假设我有一份Oracle备份文件,其相关名称
表空间名: TBS_TEST
schema/username:user_test
首先要创建同名的表空间,表空间如果不够大可以申明两个数据文件
CREATE TABLESPACE TBS_TEST DATAFILE
'E:\test01.DBF' size 5G autoextend on next 200M maxsize 30G,
'E:\test02.DBF' size 5G autoextend on next 200M maxsize 30G;
然后创建备份里面的同名用户
CREATE USER user_test IDENTIFIED BY user_test DEFAULT TABLESPACE TBS_TESTTEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK;
GRANT CONNECT TO user_test;
GRANT RESOURCE TO user_test;
GRANT CREATE ANY TABLE TO user_test;
GRANT CREATE ANY VIEW TO user_test;
GRANT CREATE SESSION TO user_test;
GRANT UNLIMITED TABLESPACE TO user_test;
GRANT SELECT ANY DICTIONARY TO user_test;
GRANT ALTER SYSTEM TO user_test;
指定存放导出导入数据的目录名称
backup_dir
create directory backup_dir as 'F:\dmp';
--给使用目录的用户赋权限
grant read,write on directory backup_dir to user_test;
最后,在cmd导入备份文件(不是在sql的命令行)
impdp 用户名/密码 dumpfile=备份文件的文件名 directory=backup_dir table_exists_action=replace logfile=xxx
备份导出
https://blog.csdn.net/qq_36891027/article/details/81315425
https://blog.csdn.net/xcymorningsun/article/details/72877156
https://blog.csdn.net/g342105676/article/details/79978076
修改System和Sys的密码
https://www.cnblogs.com/taosim/articles/2516767.html
创建 策略
https://blog.csdn.net/weixin_30787531/article/details/95875798