Oliveira took the lead from Miller on the second lap around the Circuit de Barcelona-Catalunya and while he fell behind Fabio Quartararo at one point, the Portuguese rider was able to get back ahead.
He then survived late pressure from Pramac Racing’s Zarco, while fellow Ducati rider Miller inherited the final podium place due to a penalty for a shortcut which dropped Yamaha’s Quartararo to fourth.
The latter remains at the head of the standings, but his lead over Zarco has been cut to 17 points.
At the start, Miller (Ducati Lenovo Team) lifted his front wheel but was still able to outbrake pole-sitter Quartararo at the first corner and take the lead.
Oliveira (Red Bull KTM) was also able to get through in the gap created by the Australian, meaning the #20 Monster Energy Yamaha was third, while Joan Mir (Suzuki Ecstar) charged all the way from 10th on the grid to fourth in the first half of the opening lap.
Miller ceded first spot to Oliveira when he ran wide on Lap 2 at Turn 4, but when Quartararo tried to dive past at the next corner, he overcooked it and dropped to fifth on exit, behind Mir and Aleix Espargaro (Gresini Aprilia).
The latter was soon also past Mir and then tried to slip under Miller at Turn 10 on Lap 4, but could not make that stick and was instead re-passed by Mir at the start of Lap 5.
Quartararo, who had briefly dropped behind Zarco and into sixth, was back up to fourth when he overtook Espargaro on Lap 5 at Turn 4.
Miller was almost one second behind Oliveira before he dropped spots to Mir and Quartararo on Lap 6, in a moment not picked up by television cameras but later explained as being a case of a false neutral at Turn 5.
Mir, however, was not in second position for long, with Quartararo passing him into Turn 4 on Lap 7.
The Yamaha rider trailed the race-leading KTM by about 1.2s at that point, but he had caught Oliveira in the space of three laps, as Zarco began to pressure Miller for fourth.
Zarco had not long escaped from a vigorous battle for fifth with Marc Marquez (Repsol Honda) and Espargaro, and both of those two would play little further part in the race.
Marquez crashed at Turn 10 on Lap 8 and Espargaro went down at the same spot on Lap 10, leaving Maverick Viñales (Monster Energy Yamaha) sixth.
Quartararo went under Oliveira on Lap 12 at Turn 5 and while he survived the slipstream and KTM power next time down the main straight, he lost the lead to the Portuguese rider at the start of Lap 14.
Just behind, Zarco was also passing Miller into Turn 1, and the Pramac rider was into the podium positions when he got Mir at the same corner, two laps later.
Miller also passed Mir on Lap 16, at Turn 7, while Quartararo continued to tail Oliveira, and Viñales was catching the fifth placed Mir.
Quartararo was only two tenths away from the lead at the start of Lap 21 but then started losing bulk pace as it became apparent that his leathers had opened up, exposing the Frenchman’s chest.
Zarco claimed second when he passed his countryman on the run to Turn 1 on Lap 22, and Quartararo ran beyond the corner as he tried to fight back immediately.
That would prove crucial because, while Miller could not make a move at Turn 1 stick on Lap 23, #20 would soon be issued a three-second penalty for a shortcut which would drop him off the podium anyway.
Meanwhile, Zarco closed to within half a second of Oliveira as they began the 24th and final lap, but the KTM rider stayed in front to take a third MotoGP race win of his career, and the Austrian marque’s first of 2021.
Miller was officially third despite taking the chequered flag in fourth, and the opposite applied for Quartararo, while Mir wound up fifth, ahead of Viñales.
Francesco Bagnaia (Ducati Lenovo Team) took seventh having run in the back half of the top 10 for the bulk of the race, ahead of Brad Binder (Red Bull KTM), Franco Morbidelli (Petronas Yamaha SRT), and rookie Enea Bastianini (Avintia Esponsorama Ducati).
Only the bare top 15 who score points finished, including Pramac’s Jorge Martin in 14th, despite crashing on his lap out of the pits and therefore having to start rear of grid on his second Ducati.
Valentino Rossi was among those who crashed out, the Italian dropping his Petronas SRT Yamaha at Turn 10 on Lap 16 while occupying 13th spot.
The field remains at Catalunya for a test on Monday (local time) before Round 8, the return of the Sachsenring and the German Grand Prix, on June 18-20.
Catalan MotoGP race results
|1||88||Miguel Oliveira||POR||Red Bull KTM Factory Racing||KTM||40:21.749|
|2||5||Johann ZARCO||FRA||Pramac Racing||Ducati||+0.175|
|3||43||Jack MILLER||AUS||Ducati Lenovo Team||Ducati||+1.990|
|4||20||Fabio QUARTARARO||FRA||Monster Energy Yamaha MotoGP||Yamaha||+4.815|
|5||36||Joan MIR||ESP||Team SUZUKI ECSTAR||Suzuki||+5.325|
|6||12||Maverick VIÑALES||ESP||Monster Energy Yamaha MotoGP||Yamaha||+6.281|
|7||63||Francesco BAGNAIA||ITA||Ducati Lenovo Team||Ducati||+8.175|
|8||33||Brad Binder||RSA||Red Bull KTM Factory Racing||KTM||+8.378|
|9||21||Franco MORBIDELLI||ITA||Petronas Yamaha SRT||Yamaha||+15.652|
|10||23||Enea Bastianini||ITA||Avintia Esponsorama||Ducati||+19.297|
|11||73||Alex MARQUEZ||ESP||LCR Honda CASTROL||Honda||+21.650|
|12||10||Luca MARINI||ITA||SKY VR46 Avintia||Ducati||+22.533|
|13||30||Takaaki NAKAGAMI||JPN||LCR Honda IDEMITSU||Honda||+27.833|
|14||89||Jorge MARTIN||ESP||Pramac Racing||Ducati||+29.075|
|15||32||Lorenzo SAVADORI||ITA||Aprilia Racing Team Gresini||Aprilia||+40.291|
|DNF||27||Iker LECUONA||ESP||Tech 3 KTM Factory Racing||KTM||8 Laps|
|DNF||46||Valentino Rossi||ITA||Petronas Yamaha SRT||Yamaha||9 Laps|
|DNF||41||Aleix ESPARGARO||ESP||Aprilia Racing Team Gresini||Aprilia||14 Laps|
|DNF||93||Marc Marquez||ESP||Repsol Honda Team||Honda||17 Laps|
|DNF||9||Danilo PETRUCCI||ITA||Tech 3 KTM Factory Racing||KTM||19 Laps|
|DNF||44||Pol ESPARGARO||ESP||Repsol Honda Team||Honda||20 Laps|