连接Oracle
- 连接本地oracle
sqlplus / as sysdba
2.连接远程oracle
sqlplus fia_aims_jj_hxjj/fia_aims_jj_hxjj@//172.16.2.17:1521/orcl
DBA授权
很多时候我们用拥有DBA权限的用户 从oracle数据库导出数据,那么再导入新的数据库时就还得需要DBA权限的用户,下面是如何创建一个新用户并授予DBA权限命令。
1.用有dba权限的用户登录:sys用户
sqlplus / as sysdba
2、创建表空间:
create tablespace oracle_test datafile ‘G:\Oracle11g_64bit\data\oracle_test.dbf’ size 500M autoextend on next 50m maxsize unlimited;
3.创建一个新用户:
create user user_one identified by 1234 default tablespace oracle_test;
注:Oracle 12C创建用户的时候要以c##开头。
4.授予DBA权限:
grant connect,resource,dba to user_one ;
ok,创建好了,就可以用user_one 这个用户登录了,user_one 用户拥有dba权限。
select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system
select * from all_users; 查看你能管理的所有用户!
select * from user_users; 查看当前用户信息 !
5.删除用户
drop user username cascade;
6.通过当前日期创建用户:
declare
v_date varchar2(8);--定义日期变量
v_sql varchar2(2000);--定义动态sql
v_tablename varchar2(20);--定义动态表名
begin
select to_char(sysdate,'yyyymmdd') into v_date from dual;--取日期变量
v_tablename := 'T_'||v_date;--为动态表命名
v_sql := 'create user '||v_tablename||' identified by 123456';--为动态sql赋值
dbms_output.put_line(v_sql);--打印sql语句
execute immediate v_sql;--执行动态sql
end;
运行结果:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
如何修改Oracle用户名?
1、用sysdba账号登入数据库,然后查询到要更改的用户信息:
SELECT user#,name FROM user$;
2、更改用户名并提交:
UPDATE USER$ SET NAME='PORTAL' WHERE user#=88;
COMMIT;
3、强制刷新:
ALTER SYSTEM CHECKPOINT;
ALTER SYSTEM FLUSH SHARED_POOL;
4、更新用户的密码:
ALTER USER PORTAL IDENTIFIED BY 123;
导入与导出
1、导入语句
imp username/password@ip/sid file="imp文件路径" log="输出log路径(可以没有)" full=y ignore=y
2、导出语句
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表table1 、table2导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)
4 将数据库中的表table1中的字段filed1以"00"打头的数据导出
exp system/manager@TEST file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"
Oracle 导出空表
11g默认创建一个表时不分配segment,只有在插入数据时才会产生(当然也可以强制分配),以节省磁盘空间。
解决方法:
1、解决方法
查找空表语句:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
运行查询结果,通过Plsql在进行导出。
更新语句
更新表中的所有属性,前面加1
update DICT_DEPT set DDTNAME = '1' || DDTNAME
更新表中所有属性,把1替换为空的字符串
update DICT_DEPT t set DDTNAME = replace(DDTNAME,'1','')
Oracle序列创建和使用
创建序列
语法 CREATE SEQUENCE 序列名 [相关参数]
参数说明
INCREMENT BY :序列变化的步进,负值表示递减。(默认1)
START WITH:序列的初始值 。(默认1)
MAXvalue:序列可生成的最大值。(默认不限制最大值,NOMAXVALUE)
MINVALUE:序列可生成的最小值。(默认不限制最小值,NOMINVALUE)
CYCLE:用于定义当序列产生的值达到限制值后是否循环(NOCYCLE:不循环,CYCLE:循环)。
CACHE:表示缓存序列的个数,数据库异常终止可能会导致序列中断不连续的情况,默认值为20,如果不使用缓存可设置NOCACHE
例
CREATE SEQUENCE SEQ_DEMO INCREMENT BY 1 START WITH 1 NOMAXvalue NOCYCLE NOCACHE;
修改、删除序列
使用 alter 命令进行修改
使用 drop 命令删除
序列的使用
currval 表示序列的当前值,新序列必须使用一次nextval 才能获取到值,否则会报错
nextval 表示序列的下一个值。新序列首次使用时获取的是该序列的初始值,从第二次使用时开始按照设置的步进递增
查询序列的值:
select seq_name.[currval,nextval] from dual;
查看所有已创建的序列:
select * from user_sequences
SQL语句中使用:
insert into table (id) values (seq_name.nextval)
文档会持更新........