Oracle-创建表空间和用户

1、创建临时表空间

create temporary tablespace dsjzx_temp
tempfile '/data/oracledata/dsjzx_cdb_temp.dbf'
size 100m  
autoextend on  
next 100m
maxsize UNLIMITED
extent management local;

注意:如果遇到报错:ORA-03206: maximum file size of (4194304) blocks in AUTOEXTEND clause is out of range。

因为db_block 8k 表空间的数据文件大小不能超过32G!如果空间存放的数据大小超过32GB,就需要给表空间额外添加数据文件。

可以查看后面第5节:解决表空间不足的情况。

2、创建数据表空间

create tablespace dsjzx_data  
logging  
datafile '/data/oracledata/dsjzx_cdb_data.dbf' 
size 2G  
autoextend on  
next 100m  
maxsize UNLIMITED
extent management local
Segment space management auto ; 

注意:如果遇到报错:ORA-03206: maximum file size of (4194304) blocks in AUTOEXTEND clause is out of range。

因为db_block 8k 表空间的数据文件大小不能超过32G!如果空间存放的数据大小超过32GB,就需要给表空间额外添加数据文件。

可以查看后面第5节:解决表空间不足的情况。

3、创建用户并指定表空间

create user C##dsjzx identified by 123456  
default tablespace dsjzx_data  
temporary tablespace dsjzx_temp;

--用户名: C##dsjzx , 密码: 123456

--当密码是数字+字母时,必须将密码用双引号引起来

注意:

(1)如果遇到报错:ORA-65096: invalid common user or role name。

原因: sqlplus / as sysdba命令默认登陆的是CDB数据库,而CDB数据库中要求所有新建用户用户名必须以c##开头,否则就会报以上错误,在PDB内创建用户则没有此要求。

(2)如果遇到报错:ORA-65048: error encountered when processing the current DDL statement in pluggable database ORCLPDB1
                                  ORA-00959: tablespace 'DSJZX_DATA' does not exist.

原因:在CDB内创建用户分配表空间时,所分配的表空间必须在PDB和CDB中同时存在,否则会报错。如果是在PDB与CDB有相同表空间的情况下给CDB用户分配表空间,则会分配CDB的表空间,给用户PDB的表空间并不受影响。所以要在PDB内创建相同的表空间,然后再回CDB创建用户。

解决步骤:

①、查询当前数据库名称

show con_name;

②、查询PDB数据库名称

select name,open_mode from v$pdbs;

③、切换数据库

alter session set container=ORCLPDB1;

④、在PDB中创建CDB相同名称的表空间(注意数据文件不能与之前的重名)。

--创建临时表空间
create temporary tablespace dsjzx_temp
tempfile '/data/oracledata/dsjzx_pdb_temp.dbf'
size 100m  
autoextend on  
next 100m
maxsize UNLIMITED
extent management local;

--创建表空间 create tablespace dsjzx_data logging datafile '/data/oracledata/dsjzx_pdb_data.dbf' size 2G autoextend on next 100m maxsize UNLIMITED extent management local Segment space management auto ;

这里和CDB库唯一的区别就是:数据文件名称不一样。

⑤、切换回CDB数据库

alter session set container=CDB$ROOT;

⑥、此时再执行上面的语句,就可以正确创建用户了。

 

4、给用户授予权限

grant connect,resource,dba to C##dsjzx;

5、解决表空间不足的情况

Oracle IMP出现【无法为表空间 XX 中的段创建 INITIAL 区】时,通常是由于表空间不足引起的,扩展一下表空间容量或改成表空间自动增长(表空间自动增张可能或导致磁盘涨满,处理起来比较麻烦) 。

具体如何操作还要分情况而定

情况1:表空间未设置自动增张,而表空间容量又达到了LimitedSize。 
那么现找打表空间文件位置,然后设置自动增长,或 resize。

--1.设置数据文件自动扩展

select * from dba_data_files where TABLESPACE_NAME='XX';
alter database datafile '/opt/oracle/datafile/datafile01.dbf' autoextend on;

--2.修改数据文件大小

alter database datafile '/opt/oracle/datafile/datafile01.dbf' resize 1024M;

情况2:表空间自动增长,而表空间容量达到了MaxSize即(2147483645byte),这个时候表空间已经无法自动增长了,必须添加数据文件。

--查看表空间状态

select * from sys.dba_tablespaces where tablespace_name ='XX';

--为表空间xx添加数据文件

alter tablespace xx add datafile '/opt/oracle/datafile/datafile02.dbf' size 1024M autoextend on next 512M maxsize unlimited

补充:

赋予该用户登录数据库的权限

grant create session to tester;

赋予用户查看outpatient下的视图(或表)v_daily_charge的权限

grant select on outpatient.v_daily_charge to tester;

删除用户

drop user 用户名称 cascade;

查看数据库里面所有用户(前提是你是有dba权限的帐号,如sys,system)

select * from dba_users;
(select * from dba_users where TO_CHAR(CREATED,'yyyy-MM-dd')='2018-08-14';)

查看当前用户能管理的所有用户

select * from all_users;

查看当前用户信息

select * from user_users;

创建视图

create or replace view view_name
AS SELECT column_1,column_2 ... FROM tablename ;

 

posted @ 2022-11-21 18:30  业余砖家  阅读(1286)  评论(0)    收藏  举报