1.建立临时表空间create Temporary Tablespace systemOracle TempFile ‘F:\oracleSpace\datebase.dbf’ size 200M;
2.创建表空间create tablespace orcl logging datafile ‘F:\oracleSpace\base.dbf’ size 200M autoextend on next 300M maxsize unlimited extent management local;
3.给用户赋权alter user system quota unlimited on orcl;
4.connect /as sysdba;
grant connect,resource, create session, create view,create any table,select any table,insert any table,delete any table,update any table,alter any table,drop any table,create any procedure, alter any procedure,drop any procedure,execute any procedure ,create any sequence,alter any sequence,select any sequence,drop any sequence To admin with admin option;
alter user admin quota unlimited on orcl;
// docker切换用户
首先查看oracle数据库的编码
SQL> select * from nls_database_parameters where parameter =‘NLS_CHARACTERSET’;
PARAMETER
VALUE
NLS_CHARACTERSET
AL32UTF8
这其来源于props$,这是表示数据库的字符集。
oracle客户端编码
SQL> select * from nls_instance_parameters where parameter=‘NLS_LANGUAGE’;
PARAMETER
VALUE
NLS_LANGUAGE
SIMPLIFIED CHINESE
其来源于v
p
a
r
a
m
e
t
e
r
,
表
示
客
户
端
的
字
符
集
的
设
置
,
可
能
是
参
数
文
件
,
环
境
变
量
或
者
是
注
册
表
会
话
字
符
集
环
境
s
e
l
e
c
t
∗
f
r
o
m
n
l
s
s
e
s
s
i
o
n
p
a
r
a
m
e
t
e
r
s
,
其
来
源
于
v
parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表会话字符集环境 select * from nls_session_parameters,其来源于v
parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表会话字符集环境select∗fromnlssessionparameters,其来源于vnls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
再来说一下怎么修改oracle的字符集:
目前我的数据库环境的字符集是AL32UTF8,那么把它改成ZHS16GBK
1.首先以sysdba的身份登录上去 conn /as sysdba
2.关闭数据库shutdown immediate;
3.以mount打来数据库,startup mount
4.设置session
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
5.启动数据库
alter database open;
6.修改字符集
ALTER DATABASE CHARACTER SET ZHS16GBK;
这会可能会报错,提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
这条语句就可以了,TERNAL_USE提供的帮助就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部操作时完全相同的。
7.关闭,重新启动
SQL>shutdown immediate;
SQL> startup
当然字符集最好不要轻易修改,因为这会对数据库的数据有直接的影响,如果是生产环境的话,可能会造成不可估计得损失。
创建临时表空空间
CREATE TEMPORARY TABLESPACE QC_TEMP
TEMPFILE ‘/u01/app/oracle/oradata/XE/QC_TEMP.DBF’
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE QC_DATA
LOGGING
DATAFILE ‘/u01/app/oracle/oradata/XE/QC_DATA.DBF’
SIZE 32M AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
CREATE USER admin IDENTIFIED BY admin
ACCOUNT UNLOCK
DEFAULT TABLESPACE QC_DATA
TEMPORARY TABLESPACE QC_TEMP;
GRANT CONNECT,RESOURCE TO QC;
GRANT DBA TO QC;
---
###### 用户授权
---
###### 回收用户 dba权限
revoke dba from VTA
---
###### ORACLE空表分配空间
select ‘alter table ‘||table_name||’ allocate extent;’ from user_tables where num_rows=0 or num_rows is null
> 执行一下输出的结果
---
###### 导出数据
exp VTA/VTA@orcl file=./nanjing.dmp owner=VTA
---
###### 导入数据
imp NANJINGBANK/NANJINGBANK@orcl fromuser=VTA touser=NANJINGBANK file=./nanjing.dmp ignore=y
---
###### 删除空表空间,包含物理文件
drop tablespace NANJING_TEMP including contents and datafiles CASCADE CONSTRAINTS;
drop tablespace NANJING_DATA including contents and datafiles CASCADE CONSTRAINTS;
---
###### 删除用户
drop user NANJINGBANK cascade;
---
###### 导出数据到其他用户
如果想导入的用户已经存在:
- 导出用户 expdp VTA/VTA directory=dumpdir dumpfile=nanjing.dmp
- 导入用户 impdp NANJINGBANK/NANJINGBANK directory=dumpdir dumpfile=nanjing.dmp REMAP_SCHEMA=VTA:NANJINGBANK EXCLUDE=USER
###### 如果想导入的用户不存在:
- 导出用户 expdp user1/pass1 directory=dumpdir dumpfile=user1.dmp
- 导入用户 impdp system/passsystem directory=dumpdir dumpfile=user1.dmp REMAP_SCHEMA=user1:user2
- user2会自动建立,其权限和使用的表空间与user1相同,但此时用user2无法登录,必须修改user2的密码
create sequence TEMP_TEST_TABLE_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
create or replace trigger TEMP_TEST_TABLE_TRI
before insert on userInfo
REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW
begin
SELECT TEMP_TEST_TABLE_SEQ.NEXTVAL INTO :NEW.ID FROM DUAL;
end;