Force India again looked quick, with Sergio Perez and Nico Hulkenberg fourth and fifth fastest respectively, trading their positions from FP1. Kimi Raikkonen was sixth for Ferrari, while Lotus look set for another strong weekend, with Romain Grosjean seventh and Pastor Maldonado eighth.
The Williams cars of Valtteri Bottas and Felipe Massa completed the top ten in what was a closely fought 90-minute session, punctuated by minor off-track moments. The unluckiest man of the session was Jenson Button, the former champion restricted to just three laps thanks to technical problems on his McLaren.
Hamilton set the early pace on the medium tyres, recording a 1m 25.133s - which matched Rosberg's time from FP1 - before cutting almost one second off by switching to the softs, to end the session on 1m 24.279s. Rosberg's respective times were 1m 25.451s and 1m 24.300s, leaving him just 0.021s adrift.
Vettel posted a 1m 25.038s, which left him with a two-tenth advantage over Perez's 1m 25.278s. Hulkenberg and Raikkonen were both around one tenth of a second down the road, on 1m 25.325s and 1m 25.380s respectively.
Grosjean was only fractionally slower on 1m 25.497s, but also had a big moment at Ascari, while Maldonado shadowed him with 1m 25.513s. Bottas and Massa were the last men to break the 1m 26s barrier, on 1m 25.647s and 1m 25.891s apiece.
Felipe Nasr headed the Sauber effort in 11th on 1m 26.114s from team mate Marcus Ericsson on 1m 25.133s. Meanwhile, Max Verstappen survived a hairy spin at Ascari which saw him just miss hitting the tyre wall; the teenager lapped in 1m 25.133 to book 14th, one spot ahead of team mate Carlos Sainz, who managed 1m 25.641s.
It was a troubled session for Red Bull ahead of their scheduled engine changes. Daniel Ricciardo was forced to creep back to the pits in first gear early on due to an hydraulic issue, lost much of the session while it was rectified, and had to be content with the 13th fastest time of 1m 26.222s. Team mate Daniil Kvyat struggled throughout and only managed 1m 28.723s for 20th.
Jenson Button had a tough time too, spending almost the entirety of the session in the garage as his recalcitrant McLaren was worked on. No sooner had he finally got out on track, to record 1m 28.471s for 19th, than he was called back in for an 'abnormality' to be investigated, leaving him with just three laps for the entire session - Sainz managed the most on 50.
Fernando Alonso fared slightly better in the second Honda-powered car, managing 1m 26.966s for 16th ahead of the two Marussias; Will Stevens was 17th on 1m 28.201s, with Roberto Merhi again right on his tail with 1m 28.439s.