oracle 删除和重建表空间脚本

调试数据库生成脚本,需要频繁重建表空间



/**

清除原有表空间
重建表空间和用户
**/


declare


tbs varchar2(100):='TS_data'; --表空间名称
tbs_tpm varchar2(100):='data_TEMP';--临时表空间名称
uname varchar2(100):='user';--用户名 密码为用户名小写
file_sp varchar2(100):='/';--文件分隔附 自动判断
tbs_exists INTEGER;
filepath varchar2(100);
dyn_sql varchar2(1000);
begin

--check exist
select count(*) INTO tbs_exists from dba_data_files where tablespace_name=tbs;
dbms_output.put_line(tbs||' exists '|| tbs_exists);

/** **/
--drop old table space
if tbs_exists>0 then
dbms_output.put_line('drop exists old table space '||tbs);

dyn_sql:='DROP USER '||uname||' cascade';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

dyn_sql:='DROP tablespace '||tbs||' including contents and datafiles cascade constraints ';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;


dyn_sql:='DROP tablespace '||tbs_tpm||' including contents and datafiles ';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

end if;

-- windows 系统的文件分隔符
if(instr(dbms_utility.port_string,'WIN')>0) then
file_sp:='\';
end if;


-- init file path
select substr(file_name,0,instr(file_name,file_sp,-1,1)) into filepath from dba_data_files
where rownum=1;
dbms_output.put_line('filepath='||filepath);

--create new table space
dyn_sql:='create tablespace '||tbs||' logging datafile '''||filepath||tbs||'_data.dbf'' size 50m autoextend on next 10m maxsize unlimited ';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

dyn_sql:='create temporary tablespace '||tbs_tpm||' tempfile '''||filepath||tbs_tpm||'.dbf'' size 500m autoextend on next 50m maxsize 2048m extent management local ';
dbms_output.put_line(dyn_sql);

execute immediate dyn_sql;


-- USER SQL


dyn_sql:='create user '||uname||' identified by "'||lower(uname)||'" ';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

dyn_sql:='ALTER USER '||uname||' DEFAULT TABLESPACE "'||tbs||'" TEMPORARY TABLESPACE "'||tbs_tpm||'" ACCOUNT UNLOCK ';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

dyn_sql:='ALTER USER '||uname||' QUOTA UNLIMITED ON "'||tbs||'"';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

dyn_sql:='grant connect,resource,dba to '||uname||' ';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

dyn_sql:='ALTER USER '||uname||' DEFAULT ROLE "DBA"';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

dyn_sql:='grant connect,resource,dba to '||uname||' ';
dbms_output.put_line(dyn_sql);
execute immediate dyn_sql;

end;






ORA-01940: 无法删除当前已连接的用户



SQL>alter user XXX account lock;

SQL>SELECT * FROM V$SESSION WHERE USERNAME='LGDB';

SQL>alter system kill session 'xx,xx'

SQL>drop user xx cascade




drop user and table space

DROP USER XXXXcascade;


DROP tablespace TSXXXXN including contents and datafiles cascade constraints ;

DROP tablespace XXXX_TEMP including contents and datafiles ;






create tablespace TS_XXX logging datafile '/opt/oracle/oradata/orcl_pdm/TS_XXXX_data.dbf' size 50m autoextend on next 10m maxsize unlimited;

create temporary tablespace XXXX_TEMP tempfile '/opt/oracle/oradata/orcl_pdm/XXXX_TEMP.dbf' size 500m autoextend on next 50m maxsize 2048m extent management local;


-- USER SQL
create user "XXXX" identified by "XXXX" ;
ALTER USER "XXXX"
DEFAULT TABLESPACE "TS_XXXX"
TEMPORARY TABLESPACE "XXXX_TEMP"
ACCOUNT UNLOCK ;

-- QUOTAS
ALTER USER "XXXX" QUOTA UNLIMITED ON TS_XXXX;

-- SYSTEM PRIVILEGES
grant connect,resource,dba to "XXXX" ;

-- ROLES
ALTER USER "XXXX" DEFAULT ROLE "DBA";

-- SYSTEM PRIVILEGES
grant connect,resource,dba to "XXXX" ;


select COUNT(*) from all_tables t where t.owner='XXXX';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值