Reduce Oracle ASM disk size
I have had a system with Oracle ASM diskgroup from which I needed some space. The idea was to release some disk space, reduce the size of existing partitions, add a new partition and use it – all online(!)
This is a grocery list of tasks to do, with some explanation integrated into it.
- Reduce ASM diskgroup size
- Drop a disk from ASM diskgroup
- Repartition disk
- Delete and recreate ASM label on disk
- Add disk to ASM diskgroup
Assuming the diskgroup is constructed of five disks, called SSDDATA01 to SSDDATA05. All my examples will be based on that. The current size is 400GB and I will reduce it to somewhat below the target size of the partition, lets say – to 356000M
Reduce ASM diskgroup size
alter diskgroup SSDDATA resize all size 365000M;
This command will reduce the expected disks to below the target partition size. This will allow us to reduce its size
Drop a disk from the ASM diskgroup
alter diskgroup SSDDATA drop disk 'SSDDATA01';
We will need to know which physical disk this is. You can look at the device major/minor in /dev/oracleasm/disks and compare it with /dev/sd* or with /dev/mapper/*
It is imperative that the correct disk is marked (or else…) and that the disk will become currently unused.
Reduce partition size
As the root user, you should run something like this (assuming a single partition on the disk):
parted -a optimal /dev/sdX (parted) rm 1 (parted) mkpart primary 1 375GB (parted) mkpart primary 375GB -1 (parted) quit
This will remove the first (and only) partition – but not its data – and recreate it with the same beginning but smaller in size. The remaining space will be used for an additional partition.
We will need to refresh the disk layout on all cluster nodes. Run on all nodes:
Remove and recreate ASM disk label
As root, run the following command on a single node:
oracleasm deletedisk SSDDATA01 oracleasm createdisk SSDDATA01 /dev/sdX1
You might want to run on all other nodes the following command, as root:
Add a disk to ASM diskgroup
Because the disk is of different size, adding it without specific size argument would not be possible. This is the correct command to perform this task:
alter diskgroup SSDDATA add disk 'ORCL:SSDDATA01' size 356000M;
To save time, however, we can add this disk and drop another at the same time:
alter diskgroup SSDDATA add disk 'ORCL:SSDDATA01' size 356000M drop disk 'SSDDATA02';
In general – if you have enough space on your ASM diskgroup – it is recommended to add/drop multiple disks in a single command. It will allow for a faster operation, with less repeating data migration. Save time – save efforts.
The last disk will be re-added, without dropping any other disk, of course.
I hope it helps 🙂