This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
管理oracle [2018/01/17 23:56] jordan [客户端备份与还原:使用exp与imp进行备份与还原] |
管理oracle [2023/03/08 16:09] (current) xujianglong ↷ Page moved from 内部资料:管理oracle to 管理oracle |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | # 启动与停止Oracle | + | ====== |
- | # Oracle配置 | + | ====== |
- | # Oracle备份与还原 | + | ====== |
- | ## 客户端备份与还原:使用exp与imp进行备份与还原 | + | ===== 客户端备份与还原:使用exp与imp进行备份与还原 |
- | 使用imp和exp钱,需要先执行下面的命令设置编码格式 | + | 使用imp和exp前,需要先执行下面的命令设置编码格式 |
- | ```bash | + | < |
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 | export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 | ||
- | ``` | + | </ |
- | + | < | |
- | ```bash | + | |
exp < | exp < | ||
Line 19: | Line 18: | ||
# | # | ||
imp < | imp < | ||
- | ``` | + | </ |
+ | ===== sqlplus执行sql脚本 ===== | ||
- | ## 服务器端备份与还原:使用expdp和impdp进行备份与还原 | + | 打开sqlplus,连接后执行'' |
- | # Oracle用户管理 | + | <code bash> |
+ | sqlplus /nolog | ||
+ | # 最好在sqlplus中先执行spool < | ||
+ | sql> | ||
+ | </ | ||
+ | ===== 服务器端备份与还原:使用expdp和impdp进行备份与还原 ===== | ||
- | ## 新建用户 | + | 参考:[[https:// |
- | 参考[How to Create a User and Grant Permissions in Oracle](https://chartio.com/resources/tutorials/how-to-create-a-user-and-grant-permissions-in-oracle/ | + | <code bash> |
+ | # 导出 | ||
+ | expdp < | ||
+ | # 导入 | ||
+ | impdp < | ||
+ | </code> | ||
+ | ====== Oracle用户管理 ====== | ||
- | ```sql | + | ===== 新建用户 ===== |
+ | |||
+ | 参考[[https:// | ||
+ | |||
+ | < | ||
create user < | create user < | ||
grant connect, resource, dba to < | grant connect, resource, dba to < | ||
- | ``` | + | </ |
+ | ===== 删除用户 ===== | ||
- | ## 删除用户 | + | < |
- | + | ||
- | ```sql | + | |
drop user < | drop user < | ||
- | ``` | + | </ |
+ | ====== Oracle表空间管理 ====== | ||
- | # Oracle表空间管理 | + | ===== 新建表空间 |
- | ## 新建表空间 | + | < |
- | + | ||
- | ```sql | + | |
create tablespace < | create tablespace < | ||
- | ``` | + | </ |
+ | ===== 修改表的表空间 ===== | ||
- | # 常见Oracle管理问题 | + | 详见:[[https:// |
- | ## 没有任何数据的表格不能导出的解决办法 | + | <code sql> |
+ | ALTER TABLE <TABLE NAME to be moved> MOVE TABLESPACE < | ||
+ | alter index < | ||
+ | </ | ||
+ | ====== 命令行重启Oracle ====== | ||
+ | |||
+ | <code bash> | ||
+ | su oracle --登录 | ||
+ | sqlplus /nolog --进入SQLPLUS | ||
+ | </ | ||
+ | <code sql> | ||
+ | connect / as sysdba --切换管理员登录 | ||
+ | shutdown --关闭 | ||
+ | startup | ||
+ | </ | ||
+ | ====== 数据库对象解锁 ====== | ||
+ | |||
+ | <code sql> | ||
+ | --数据库对象解锁 | ||
+ | SELECT B.Owner, B.Object_Name, | ||
+ | FROM V$Locked_Object A, All_Objects B | ||
+ | WHERE A.Object_ID = B.Object_ID; | ||
+ | |||
+ | SELECT SID, SERIAL# FROM V$SESSION WHERE SID IN ( | ||
+ | SELECT SESSION_ID FROM DBA_DML_LOCKS WHERE NAME = '< | ||
+ | ); | ||
+ | ALTER SYSTEM KILL SESSION '< | ||
+ | </ | ||
+ | ====== 删除表、视图、序列等 ====== | ||
+ | |||
+ | <code sql> | ||
+ | BEGIN | ||
+ | FOR cur_rec IN (SELECT object_name, | ||
+ | FROM user_objects | ||
+ | WHERE object_type IN | ||
+ | | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | )) | ||
+ | | ||
+ | BEGIN | ||
+ | IF cur_rec.object_type = ' | ||
+ | | ||
+ | EXECUTE IMMEDIATE | ||
+ | || cur_rec.object_type | ||
+ | || ' "' | ||
+ | || cur_rec.object_name | ||
+ | || '" | ||
+ | | ||
+ | EXECUTE IMMEDIATE | ||
+ | || cur_rec.object_type | ||
+ | || ' "' | ||
+ | || cur_rec.object_name | ||
+ | || '"'; | ||
+ | END IF; | ||
+ | EXCEPTION | ||
+ | WHEN OTHERS | ||
+ | | ||
+ | DBMS_OUTPUT.put_line ( ' | ||
+ | || cur_rec.object_type | ||
+ | || ' "' | ||
+ | || cur_rec.object_name | ||
+ | || '"' | ||
+ | ); | ||
+ | END; | ||
+ | END LOOP; | ||
+ | END; | ||
+ | </ | ||
+ | ====== 解决数据库系统序列值比最大id小导致无法插入数据的问题 ====== | ||
+ | |||
+ | <code sql> | ||
+ | --解决数据库系统序列值比最大id小导致无法插入数据的问题 | ||
+ | declare | ||
+ | v_rlt number(8): | ||
+ | | ||
+ | << | ||
+ | LOOP | ||
+ | SELECT | ||
+ | dbms_output.put_line(' | ||
+ | exit fst_loop when v_rlt > 5242; | ||
+ | end loop; | ||
+ | dbms_output.put_line(' | ||
+ | | ||
+ | </ | ||
+ | ====== 常见Oracle管理问题 ====== | ||
+ | |||
+ | ===== 没有任何数据的表格不能导出的解决办法 | ||
自Oracle11g R2开始,插入第一条数据才分配空间,所以没有数据的表默认没有分配空间,使用exp命令无法导出这些表。 | 自Oracle11g R2开始,插入第一条数据才分配空间,所以没有数据的表默认没有分配空间,使用exp命令无法导出这些表。 | ||
- | 解决办法是执行下面的sql得到修改表的空间分配方案的sql命令,再执行这些sql([点击查看更多信息](https:// | + | 解决办法是执行下面的sql得到修改表的空间分配方案的sql命令,再执行这些sql([[https:// |
- | ```sql | + | < |
BEGIN | BEGIN | ||
FOR i IN (SELECT table_name FROM user_tables WHERE segment_created = ' | FOR i IN (SELECT table_name FROM user_tables WHERE segment_created = ' | ||
Line 62: | Line 165: | ||
END LOOP; | END LOOP; | ||
END; | END; | ||
- | ``` | + | </ |