oracle 常用命令
oracle 常用命令
登陆oracle
sqlplus / as sysdba #以管理员身份登陆
sqlplus consoletmp/consoletmp@//192.168.58.135:1521/ECSTMP #consoletmp/consoletmp是账号密码,ECSTMP是创建的pdb
sid
查看sid
jdbc连接的就是sid
//查看sid是什么
select instance_name from V$instance;
pdb
创建pdb并创建账号测试连接
需要以管理员身份登陆
show pdbs;
创建pdb
创建emptytest 这个pdb,并设置账号密码为 testem/testem
create pluggable database emptytest admin user testem identified by testem;
如果创建失败报错:FILE_NAME_CONVERT
需要先获取路径:
select name from v$datafile where name like '%seed%system%';
得到:/opt/oracle/oradata/ECSDB/pdbseed/system01.dbf ,对应下面url路径
create pluggable database PROD admin user dbaclass identified by dbaclass FILE_NAME_CONVERT=('/opt/oracle/oradata/ECSDB/pdbseed','/opt/oracle/oradata/ECSDB/prod');
给用户授权
创建后,把emptytest设置成对外开放
alter pluggable database emptytest open;
保存现在的状态,防止重启变化
alter pluggable database all save state;
cdb切换到emptytest 这个pdb
alter session set container=emptytest;
查看当前会话在pdb下还是cdb上
show con_name;
切换会话到cbd
alter session set container=cdb$root;
查看用户schema和表空间的关系
select default_tablespace from dba_users where username='YN_CONSOLE';
查看表空间文件
查看现有表空间所占据的dbf,创建新的表空间时可以指定同一个表空间
select name from v$datafile;
查看表空间和dbf的关系
select tablespace_name,file_name from dba_data_files;
创建表空间
后面添加账号时加到同一个表空间和临时表空间就不用重新创建临时表空间和表空间了。同时还不用remap,省去很多麻烦
create tablespace EMPTYT datafile '/data/u01/app/oradata/ECSCDB/ecs/emptyt.dbf' size 1g autoextend on;
查看临时表空间
ecs2_dev是用户,这里注意要大写,查看临时表空间
select username,TEMPORARY_TABLESPACE from dba_users where username= 'ECS2_DEV';
临时表空间所占据的dbf
select name from v$tempfile;
查看临时表空间和dbf的关系
select tablespace_name,file_name from dba_temp_files;
创建临时表空间
create temporary tablespace tmpempty tempfile '/data/u01/app/oradata/ECSCDB/ecs/tmpempty.dbf' size 100m reuse autoextend on next 20m maxsize unlimited;
为pdb创建用户并授权
//用户权限在CDB和PDB中是隔离的,也就是说在CDB中的权限不会同步到PDB,除非在CDB中授权时加上container=all,则在CDB中授权的权限会同步到PDB,在PDB中授权后权限也不会同步到CDB,在PDB中授权不能加container=all,否则会报错ORA-65040: operation not allowed from within a pluggable database
//CDB建立的C##用户可以在PDB查看到,即CDB中创建公用用户默认情况下是在所有PDB下创建了相同的用户
//CDB建立的C##用户可以在PDB登录,但是有两个前提,一是要在PDB中单独授权,二是要加上PDB对应的tns。不加tns默认连接的是CDB
//CDB删除C##用户时,就算PDB中该用户的权限和CDB不一样,该用户也自动在PDB中也删除了,PDB无法直接删除C##用户,会报错ORA-65040: operation not allowed from within a pluggable database
//PDB中已经有C##test1用户时,PDB还可以建立test1
//sys和system用户是普通用户,是全局的,所以直接在PDB中conn sys、system用户时不加PDB的tns,默认连接到CDB;sys、system的密码只能在CDB修改且新密码会自动在PDB生效,PDB修改sys、system密码会报错
create user testemcon identified by testemcon default tablespace EMPTYT temporary tablespace tmpempty; #指定表空间和临时表空间
grant dba to ecs2_21_5050_micro01 ;
grant connect,resource to ecs2_21_5050_micro01 ;
grant select any table to ecs2_21_5050_micro01 ;
grant delete any table to ecs2_21_5050_micro01 ;
grant update any table to ecs2_21_5050_micro01 ;
grant insert any table to ecs2_21_5050_micro01 ;
外部链接测试,192.168.58.135是oracle的IP
sqlplus testem/testem@//192.168.58.135:1521/emptytest
sqlplus testemcon/testemcon@//192.168.58.135:1521/emptytest
查看当前登陆用户是谁
show user;
导出导入库
导出库
用ecs2_21_5050这个用户导出e7db 这个sid下的ecs2_21_5050 数据库,
expdp ecs2_21_5050/ecs2_21_5050@e7db schemas=ecs2_21_5050 dumpfile=20210416001.dmp DIRECTORY=DATA_PUMP_DIR logfile=20210416.log
导入库
impdp导入数据库,table_exists_action决定是否覆盖
skip 是如果已存在表,则跳过并处理下一个对象;
append是为表增加数据;
truncate是截断表,然后为其增加新数据;
replace是删除已存在表,重新建表并追加数据;
impdp ECS2_CONSOLE_DEV/ECS2_CONSOLE_DEV@192.168.58.135/jianlang_dev directory=DATA_PUMP_DIR dumpfile=20210416001.dmp logfile=impdp20210416.log remap_schema=ecs2_21_5050:fuce remap_Tablespace=FSSC:fuce EXCLUDE=STATISTICS table_exists_action=replace
删除
如果数据库内数据需要清空,需要删除pdb内对应的schema,然后重新创建
删除schema
停止服务与schema的连接,ECS2_CONTRACT2_DEV是schema
alter session set container=jianlang_dev;
SELECT SID,STATUS,SERIAL# FROM V$SESSION WHERE USERNAME='ECS2_CONSOLE_DEV';
关闭对应的sid链接
ALTER SYSTEM KILL SESSION ' 2037,60452';
执行后查看状态,status是 KILLED就不用管了,可以继续kill下一个
删除schema后就可以再重新创建了
drop user ECS2_CONTRACT2_DEV cascade;
删除pdb
先把pdb关闭
alter pluggable database ECSF close;
再删除pdb和她的datafile
drop pluggable database ECSF including datafiles;
查看是否删除
show pdbs;
应用
进程过多时,可以杀掉用户进程连接减轻压力(非常不建议操作,除非特殊情况)
ps -ef|grep LOCAL=NO|grep -v grep |awk '{print $2}'|xargs kill
远程连接oracle的pdb并执行命令
sqlplus hr/hr@84.24.24.24:1521/orcl << EOF
show pdbs;
alter session set container=emptytest;
EOF
修改字符集
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER DATABASE character set INTERNAL_USE AL32UTF8;
设置最大连接数(切换pdb
alter system set processes = 3000 scope = spfile
查看最大连接数(切换pdb
select value from v$parameter where name = 'processes'