OracleMove命令总结
Oracle Move命令总结 从8i开始,oracle开始提供Move的命令。我们通常使用这个命令,将一个table segment从一个tablespace移动到另一个tablespace。Move实际上是在block之间物理的copy数据,那么,我们可以通过这种方式来降低table的HWM。我们先通过一个实验
Oracle Move命令总结
从8i开始,oracle开始提供Move的命令。我们通常使用这个命令,将一个table segment从一个tablespace移动到另一个tablespace。Move实际上是在block之间物理的copy数据,那么,我们可以通过这种方式来降低table的HWM。我们先通过一个实验来看看move是如何移动数据的。
1.建表并插入数据:
SQL> create table sjh.test1(id int) tablespaceusers;
表已创建。
SQL> insert into sjh.test1 values(1);
已创建 1 行。
SQL> insert into sjh.test1 values(2);
已创建 1 行。
SQL> insert into sjh.test1 values(3);
已创建 1 行。
SQL> insert into sjh.test1 values(4);
已创建 1 行。
SQL> insert into sjh.test1 values(5);
已创建 1 行。
SQL> insert into sjh.test1 values(6);
已创建 1 行。
SQL> insert into sjh.test1 values(7);
已创建 1 行。
SQL> insert into sjh.test1 values(8);
已创建 1 行。
S QL> commit;
提交完成。
SQL> select * from sjh.test1;
已选择8行。
2.查看表的rowid信息和block id信息:
SQL> select rowid,id from sjh.test1;
已选择8行。
SQL> select EXTENT_ID,FILE_ID,RELATIVE_FNO,BLOCK_ID,BLOCKS
--8条记录都在一个块上(AAAABH)
这里简单介绍一下ROWID的知识:ROWID在磁盘上需要10个字节的存储空间并使用18个字符来显示它包含下列组件:
数据对象编号:每个数据对象如表或索引在创建时都分配有此编号,并且此编号在数据库中是唯一的;
相关文件编号:此编号对于一个表空间中的每个文件是唯一的;
块编号:表示包含此行的块在文件中的位置;
行编号:标识块头中行目录位置的位置;
在内部数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位,加起来总共是80 位或10 个字节,ROWID使用以64 为基数的编码方案来显示该方案将六个位置用于数据对象,编号三个位置用于相关文件编号六个位置用于块编号三个位置用于行编号以64 为基数的编码方案使用字符A-Z a-z 0-9 + 和/共64 个字符,
如下例所示:AAAMlQAAE AAAABH AAA
3.做一些DML操作,再观察ROWID有没有发生变化:
SQL> delete from sjh.test1 where id=1;
已删除 1 行。
SQL> delete from sjh.test1 where id=3;
已删除 1 行。
SQL> delete from sjh.test1 where id=5;
已删除 1 行。
SQL> commit;
提交完成。
SQL> select rowid,id from sjh.test1;
--我们看到ROWID保持不变。
4.做MOVE操作,然后观察ROWID的情况:
SQL> alter table sjh.test1 move;
表已更改。
SQL> select rowid,id from sjh.test1;
--ROWID发生变化BLOCK_ID由原来的65变为73,BLOCK的编号由原来的AAAABH变为AAAABM
5.move对HWM的影响:
这里引用网友yjz0065的一个例子:
SQL> create table my_objects tablespace HWM
SQL> delete from my_objects where rownum
9999 rows deleted
SQL> select count(*) from my_objects;
COUNT(*)
----------
SQL> exec show_space(p_segname =>'MY_OBJECTS',p_owner => 'DLINGER',p_type => 'TABLE');
Total Blocks............................425
Total Bytes.............................3481600
Unused Blocks...........................3
Unused Bytes............................24576
Last Used Ext FileId....................11
Last Used Ext BlockId...................1294
Last Used Block.........................2
这里HWM=425- 3 + 1 = 423
然后对tableMY_OBJECTS进行move操作:
SQL> alter table MY_OBJECTS move;
表已更改。
SQL> exec show_space(p_segname =>'MY_OBJECTS',p_owner => 'DLINGER',p_type => 'TABLE');
Total Blocks............................290
Total Bytes.............................2375680
Unused Blocks...........................1
Unused Bytes............................8192
Last Used Ext FileId....................11
Last Used Ext BlockId...................1584
Last Used Block.........................4
我们可以看到,tableMY_OBJECTS的HWM从423移动到290,table的HWM降低了!(show_space是自定义的一个过程)。
Move的一些用法:
以下是altertable 中move子句的完整语法,我们介绍其中的几点:
MOVE [ONLINE]
[segment_attributes_clause]
[data_segment_compression]
[index_org_table_clause]
[ { LOB_storage_clause | varray_col_properties }
?0?2?0?2?0?2 [ { LOB_storage_clause | varray_col_properties } ]...
]
[parallel_clause]
a. 我们可以使用move将一个table从当前的tablespace上移动到另一个tablespace上,如:
alter table t move tablespace tablespace_name;
b. 我们还可以用move来改变table已有的block的存储参数,如:
alter table t move storage (initial 30k next 50k);
c.另外,move操作也可以用来解决table中的行迁移的问题。
使用move的一些注意事项:
a. table上的index需要rebuild:
在前面我们讨论过,move操作后,数据的rowid发生了改变,我们知道,index是通过rowid来fetch数据行的,所以,table上的index是必须要rebuild的。
SQL> create index i_my_objects on my_objects (object_id);
Index created
SQL> alter table my_objects move;
Table altered
SQL> select index_name,status from user_indexeswhere index_name='I_MY_OBJECTS';
从这里可以看到,当tableMY_OBJECTS进行move操作后,该table上的inedx的状态为UNUSABLE,这时,,我们可以使用alterindex I_MY_OBJECTS rebuild online的命令,对index I_MY_OBJECTS进行在线rebuild。
b. move时对table的锁定
当我们对tableMY_OBJECTS进行move操作时,查询v$locked_objects视图可以发现,tableMY_OBJECTS上加了exclusivelock:
SQL>select OBJECT_ID, SESSION_ID,ORACLE_USERNAME,LOCKED_MODE from v$locked_objects;
SQL> select object_id from user_objects whereobject_name = 'MY_OBJECTS';
OBJECT_ID
----------

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











sudo 명령을 사용하면 사용자는 수퍼유저 모드로 전환하지 않고도 상승된 권한 모드에서 명령을 실행할 수 있습니다. 이 기사에서는 Windows 시스템에서 sudo 명령과 유사한 기능을 시뮬레이션하는 방법을 소개합니다. 슈도사령부란 무엇인가? Sudo("superuser do"의 약어)는 Linux 및 MacOS와 같은 Unix 기반 운영 체제 사용자가 일반적으로 관리자가 보유하는 높은 권한으로 명령을 실행할 수 있도록 하는 명령줄 도구입니다. Windows 11/10에서 SUDO 명령 실행 그러나 최신 Windows 11 Insider 미리 보기 버전이 출시되면서 Windows 사용자는 이제 이 기능을 경험할 수 있습니다. 이 새로운 기능을 통해 사용자는 다음을 수행할 수 있습니다.

이 문서에서는 명령 프롬프트(CommandPrompt)를 사용하여 Win11 시스템에서 네트워크 어댑터의 물리적 주소(MAC 주소)를 찾는 방법을 독자에게 소개합니다. MAC 주소는 네트워크 통신에서 중요한 역할을 하는 네트워크 인터페이스 카드(NIC)의 고유 식별자입니다. 명령 프롬프트를 통해 사용자는 현재 컴퓨터에 있는 모든 네트워크 어댑터의 MAC 주소 정보를 쉽게 얻을 수 있으며 이는 네트워크 문제 해결, 네트워크 설정 구성 및 기타 작업에 매우 유용합니다. 방법 1: "명령 프롬프트" 사용 1. [Win+X] 키 조합을 누르거나 [마우스 오른쪽 버튼 클릭] 작업 표시줄의 [Windows 로고]를 클릭하고 메뉴 항목이 열리면 [실행]을 선택합니다. .창을 실행하고 [cmd] 명령어를 입력한 후

cmd 창에는 telnet이 내부 또는 외부 명령이 아니라는 메시지가 표시됩니다. 이 문제는 사용자 작업에 문제가 없기 때문에 나타나지 않습니다. 몇 가지 작은 단계를 수행하면 작업 설정을 통해 텔넷이 내부 또는 외부 명령이 아니라는 cmd 창 문제를 해결할 수 있습니다. 오늘 편집기에서 가져온 텔넷이 내부 또는 외부 명령이 아니라는 메시지를 표시하는 cmd 창에 대한 솔루션을 살펴보겠습니다. cmd 창에 텔넷이 내부 또는 외부 명령이 아니라는 메시지가 표시됩니다. 해결 방법: 1. 컴퓨터의 제어판을 엽니다. 2. 프로그램과 기능을 찾아보세요. 3. 왼쪽에서 Windows 기능 켜기/끄기를 찾습니다. 4. "텔넷 클라이언트"를 찾으세요

Win11 시스템에서는 명령을 통해 Hyper-V 고급 세션 모드를 활성화하거나 비활성화할 수 있습니다. 이 문서에서는 명령을 사용하여 사용자가 시스템에서 Hyper-V 기능을 더 잘 관리하고 제어할 수 있도록 돕는 방법을 소개합니다. Hyper-V는 Microsoft에서 제공하는 가상화 기술로 Windows Server와 Windows 10 및 11(Home Edition 제외)에 내장되어 있어 사용자가 Windows 시스템에서 가상 운영 체제를 실행할 수 있습니다. 가상 머신은 호스트 운영 체제에서 격리되어 있지만 설정을 통해 사운드 카드, 저장 장치 등 호스트 리소스를 계속 사용할 수 있습니다. 주요 설정 중 하나는 고급 세션 모드를 활성화하는 것입니다. 고급 세션 모드는 Hyper입니다.

1. 개요 sar 명령은 시스템 활동에서 수집된 데이터를 통해 시스템 사용 보고서를 표시합니다. 이러한 보고서는 다양한 섹션으로 구성되어 있으며 각 섹션에는 데이터 유형과 데이터 수집 시기가 포함되어 있습니다. sar 명령의 기본 모드는 CPU에 액세스하는 다양한 리소스(예: 사용자, 시스템, I/O 스케줄러 등)에 대해 다양한 시간 증분으로 CPU 사용량을 표시합니다. 또한 특정 기간 동안 유휴 CPU의 비율을 표시합니다. 각 데이터 포인트의 평균값은 보고서 하단에 나열됩니다. sar 보고서는 기본적으로 10분마다 데이터를 수집하지만 다양한 옵션을 사용하여 이러한 보고서를 필터링하고 조정할 수 있습니다. uptime 명령과 마찬가지로 sar 명령도 CPU 로드를 모니터링하는 데 도움이 될 수 있습니다. sar를 통해 과도한 부하 발생을 이해할 수 있다.

Linux에서 서비스를 다시 시작하는 올바른 방법은 무엇입니까? Linux 시스템을 사용하다 보면 서비스를 다시 시작해야 하는 상황이 자주 발생하지만, 서비스를 다시 시작할 때 서비스가 실제로 중지되지 않거나 시작되지 않는 등의 문제가 발생할 수도 있습니다. 따라서 서비스를 다시 시작하는 올바른 방법을 익히는 것이 매우 중요합니다. Linux에서는 일반적으로 systemctl 명령을 사용하여 시스템 서비스를 관리할 수 있습니다. systemctl 명령은 systemd 시스템 관리자의 일부입니다.

Linux에서의 system() 함수 요약 Linux 시스템에서 system() 함수는 명령줄 명령을 실행하는 데 사용할 수 있는 매우 일반적으로 사용되는 함수입니다. 이 기사에서는 system() 함수를 자세히 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 1. system() 함수의 기본 사용법은 다음과 같습니다. intsystem(constchar*command) 여기서 명령 매개변수는 문자입니다.

LSOF(ListOpenFiles)는 Linux/Unix 운영 체제와 유사한 시스템 리소스를 모니터링하는 데 주로 사용되는 명령줄 도구입니다. LSOF 명령을 통해 사용자는 시스템의 활성 파일과 이러한 파일에 액세스하는 프로세스에 대한 자세한 정보를 얻을 수 있습니다. LSOF는 사용자가 현재 파일 리소스를 점유하고 있는 프로세스를 식별하는 데 도움이 되므로 시스템 리소스를 더 잘 관리하고 가능한 문제를 해결할 수 있습니다. LSOF는 강력하고 유연하며 시스템 관리자가 파일 누출, 닫히지 않은 파일 설명자 등과 같은 파일 관련 문제를 신속하게 찾는 데 도움이 될 수 있습니다. LSOF 명령을 통해 LSOF 명령줄 도구를 사용하면 시스템 관리자와 개발자는 다음을 수행할 수 있습니다. 포트 충돌이 발생할 경우 현재 특정 파일이나 포트를 사용하고 있는 프로세스를 확인합니다.
